{"version":3,"file":"tinymce_editor-BTVWi2nh.js","sources":["../../../node_modules/tinymce/tinymce.js","../../../node_modules/tinymce/icons/default/icons.js","../../../node_modules/tinymce/icons/default/index.js","../../../node_modules/tinymce/themes/silver/theme.js","../../../node_modules/tinymce/themes/silver/index.js","../../../node_modules/tinymce/models/dom/model.js","../../../node_modules/tinymce/models/dom/index.js","../../../node_modules/tinymce/plugins/advlist/plugin.js","../../../node_modules/tinymce/plugins/advlist/index.js","../../../node_modules/tinymce/plugins/autolink/plugin.js","../../../node_modules/tinymce/plugins/autolink/index.js","../../../node_modules/tinymce/plugins/lists/plugin.js","../../../node_modules/tinymce/plugins/lists/index.js","../../../node_modules/tinymce/plugins/link/plugin.js","../../../node_modules/tinymce/plugins/link/index.js","../../../node_modules/tinymce/plugins/charmap/plugin.js","../../../node_modules/tinymce/plugins/charmap/index.js","../../../node_modules/tinymce/plugins/preview/plugin.js","../../../node_modules/tinymce/plugins/preview/index.js","../../../node_modules/tinymce/plugins/anchor/plugin.js","../../../node_modules/tinymce/plugins/anchor/index.js","../../../node_modules/tinymce/plugins/searchreplace/plugin.js","../../../node_modules/tinymce/plugins/searchreplace/index.js","../../../node_modules/tinymce/plugins/visualblocks/plugin.js","../../../node_modules/tinymce/plugins/visualblocks/index.js","../../../node_modules/tinymce/plugins/code/plugin.js","../../../node_modules/tinymce/plugins/code/index.js","../../../node_modules/tinymce/plugins/fullscreen/plugin.js","../../../node_modules/tinymce/plugins/fullscreen/index.js","../../../node_modules/tinymce/plugins/media/plugin.js","../../../node_modules/tinymce/plugins/media/index.js","../../../node_modules/tinymce/plugins/autoresize/plugin.js","../../../node_modules/tinymce/plugins/autoresize/index.js","../../../app/frontend/entrypoints/tinymce_editor.js"],"sourcesContent":["/**\n * TinyMCE version 7.7.0 (TBD)\n */\n\n(function () {\n 'use strict';\n\n var typeOf$1 = function (x) {\n if (x === null) {\n return 'null';\n }\n if (x === undefined) {\n return 'undefined';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isEquatableType = function (x) {\n return [\n 'undefined',\n 'boolean',\n 'number',\n 'string',\n 'function',\n 'xml',\n 'null'\n ].indexOf(x) !== -1;\n };\n\n var sort$1 = function (xs, compareFn) {\n var clone = Array.prototype.slice.call(xs);\n return clone.sort(compareFn);\n };\n\n var contramap = function (eqa, f) {\n return eq$2(function (x, y) {\n return eqa.eq(f(x), f(y));\n });\n };\n var eq$2 = function (f) {\n return { eq: f };\n };\n var tripleEq = eq$2(function (x, y) {\n return x === y;\n });\n var eqString = tripleEq;\n var eqArray = function (eqa) {\n return eq$2(function (x, y) {\n if (x.length !== y.length) {\n return false;\n }\n var len = x.length;\n for (var i = 0; i < len; i++) {\n if (!eqa.eq(x[i], y[i])) {\n return false;\n }\n }\n return true;\n });\n };\n var eqSortedArray = function (eqa, compareFn) {\n return contramap(eqArray(eqa), function (xs) {\n return sort$1(xs, compareFn);\n });\n };\n var eqRecord = function (eqa) {\n return eq$2(function (x, y) {\n var kx = Object.keys(x);\n var ky = Object.keys(y);\n if (!eqSortedArray(eqString).eq(kx, ky)) {\n return false;\n }\n var len = kx.length;\n for (var i = 0; i < len; i++) {\n var q = kx[i];\n if (!eqa.eq(x[q], y[q])) {\n return false;\n }\n }\n return true;\n });\n };\n var eqAny = eq$2(function (x, y) {\n if (x === y) {\n return true;\n }\n var tx = typeOf$1(x);\n var ty = typeOf$1(y);\n if (tx !== ty) {\n return false;\n }\n if (isEquatableType(tx)) {\n return x === y;\n } else if (tx === 'array') {\n return eqArray(eqAny).eq(x, y);\n } else if (tx === 'object') {\n return eqRecord(eqAny).eq(x, y);\n }\n return false;\n });\n\n const getPrototypeOf$2 = Object.getPrototypeOf;\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType$1 = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq$1 = t => a => t === a;\n const is$4 = (value, constructor) => isObject(value) && hasProto(value, constructor, (o, proto) => getPrototypeOf$2(o) === proto);\n const isString = isType$1('string');\n const isObject = isType$1('object');\n const isPlainObject = value => is$4(value, Object);\n const isArray$1 = isType$1('array');\n const isNull = eq$1(null);\n const isBoolean = isSimpleType('boolean');\n const isUndefined = eq$1(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isNumber = isSimpleType('number');\n const isArrayOf = (value, pred) => {\n if (isArray$1(value)) {\n for (let i = 0, len = value.length; i < len; ++i) {\n if (!pred(value[i])) {\n return false;\n }\n }\n return true;\n }\n return false;\n };\n\n const noop = () => {\n };\n const compose = (fa, fb) => {\n return (...args) => {\n return fa(fb.apply(null, args));\n };\n };\n const compose1 = (fbc, fab) => a => fbc(fab(a));\n const constant = value => {\n return () => {\n return value;\n };\n };\n const identity = x => {\n return x;\n };\n const tripleEquals = (a, b) => {\n return a === b;\n };\n function curry(fn, ...initialArgs) {\n return (...restArgs) => {\n const all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n const not = f => t => !f(t);\n const die = msg => {\n return () => {\n throw new Error(msg);\n };\n };\n const apply$1 = f => {\n return f();\n };\n const call = f => {\n f();\n };\n const never = constant(false);\n const always = constant(true);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativeSlice = Array.prototype.slice;\n const nativeIndexOf = Array.prototype.indexOf;\n const nativePush = Array.prototype.push;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const indexOf$1 = (xs, x) => {\n const r = rawIndexOf(xs, x);\n return r === -1 ? Optional.none() : Optional.some(r);\n };\n const contains$2 = (xs, x) => rawIndexOf(xs, x) > -1;\n const exists = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n const map$3 = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each$e = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const eachr = (xs, f) => {\n for (let i = xs.length - 1; i >= 0; i--) {\n const x = xs[i];\n f(x, i);\n }\n };\n const partition$2 = (xs, pred) => {\n const pass = [];\n const fail = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n const arr = pred(x, i) ? pass : fail;\n arr.push(x);\n }\n return {\n pass,\n fail\n };\n };\n const filter$5 = (xs, pred) => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n const foldr = (xs, f, acc) => {\n eachr(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const foldl = (xs, f, acc) => {\n each$e(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const findUntil$1 = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n const find$2 = (xs, pred) => {\n return findUntil$1(xs, pred, never);\n };\n const findIndex$2 = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(i);\n }\n }\n return Optional.none();\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray$1(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind$3 = (xs, f) => flatten(map$3(xs, f));\n const forall = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; ++i) {\n const x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n const reverse = xs => {\n const r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n const difference = (a1, a2) => filter$5(a1, x => !contains$2(a2, x));\n const mapToObject = (xs, f) => {\n const r = {};\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n const sort = (xs, comparator) => {\n const copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n const get$b = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n const head = xs => get$b(xs, 0);\n const last$2 = xs => get$b(xs, xs.length - 1);\n const from = isFunction(Array.from) ? Array.from : x => nativeSlice.call(x);\n const findMap = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n const r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n const unique$1 = (xs, comparator) => {\n const r = [];\n const isDuplicated = isFunction(comparator) ? x => exists(r, i => comparator(i, x)) : x => contains$2(r, x);\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (!isDuplicated(x)) {\n r.push(x);\n }\n }\n return r;\n };\n\n const keys = Object.keys;\n const hasOwnProperty$1 = Object.hasOwnProperty;\n const each$d = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const map$2 = (obj, f) => {\n return tupleMap(obj, (x, i) => ({\n k: i,\n v: f(x, i)\n }));\n };\n const tupleMap = (obj, f) => {\n const r = {};\n each$d(obj, (x, i) => {\n const tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n const objAcc = r => (x, i) => {\n r[i] = x;\n };\n const internalFilter = (obj, pred, onTrue, onFalse) => {\n each$d(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const bifilter = (obj, pred) => {\n const t = {};\n const f = {};\n internalFilter(obj, pred, objAcc(t), objAcc(f));\n return {\n t,\n f\n };\n };\n const filter$4 = (obj, pred) => {\n const t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n const mapToArray = (obj, f) => {\n const r = [];\n each$d(obj, (value, name) => {\n r.push(f(value, name));\n });\n return r;\n };\n const values = obj => {\n return mapToArray(obj, identity);\n };\n const get$a = (obj, key) => {\n return has$2(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n const has$2 = (obj, key) => hasOwnProperty$1.call(obj, key);\n const hasNonNullableKey = (obj, key) => has$2(obj, key) && obj[key] !== undefined && obj[key] !== null;\n const equal$1 = (a1, a2, eq = eqAny) => eqRecord(eq).eq(a1, a2);\n\n const stringArray = a => {\n const all = {};\n each$e(a, key => {\n all[key] = {};\n });\n return keys(all);\n };\n\n const isArrayLike = o => o.length !== undefined;\n const isArray = Array.isArray;\n const toArray$1 = obj => {\n if (!isArray(obj)) {\n const array = [];\n for (let i = 0, l = obj.length; i < l; i++) {\n array[i] = obj[i];\n }\n return array;\n } else {\n return obj;\n }\n };\n const each$c = (o, cb, s) => {\n if (!o) {\n return false;\n }\n s = s || o;\n if (isArrayLike(o)) {\n for (let n = 0, l = o.length; n < l; n++) {\n if (cb.call(s, o[n], n, o) === false) {\n return false;\n }\n }\n } else {\n for (const n in o) {\n if (has$2(o, n)) {\n if (cb.call(s, o[n], n, o) === false) {\n return false;\n }\n }\n }\n }\n return true;\n };\n const map$1 = (array, callback) => {\n const out = [];\n each$c(array, (item, index) => {\n out.push(callback(item, index, array));\n });\n return out;\n };\n const filter$3 = (a, f) => {\n const o = [];\n each$c(a, (v, index) => {\n if (!f || f(v, index, a)) {\n o.push(v);\n }\n });\n return o;\n };\n const indexOf = (a, v) => {\n if (a) {\n for (let i = 0, l = a.length; i < l; i++) {\n if (a[i] === v) {\n return i;\n }\n }\n }\n return -1;\n };\n const reduce = (collection, iteratee, accumulator, thisArg) => {\n let acc = isUndefined(accumulator) ? collection[0] : accumulator;\n for (let i = 0; i < collection.length; i++) {\n acc = iteratee.call(thisArg, acc, collection[i], i);\n }\n return acc;\n };\n const findIndex$1 = (array, predicate, thisArg) => {\n for (let i = 0, l = array.length; i < l; i++) {\n if (predicate.call(thisArg, array[i], i, array)) {\n return i;\n }\n }\n return -1;\n };\n const last$1 = collection => collection[collection.length - 1];\n\n const cached = f => {\n let called = false;\n let r;\n return (...args) => {\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n const DeviceType = (os, browser, userAgent, mediaMatch) => {\n const isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n const isiPhone = os.isiOS() && !isiPad;\n const isMobile = os.isiOS() || os.isAndroid();\n const isTouch = isMobile || mediaMatch('(pointer:coarse)');\n const isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n const isPhone = isiPhone || isMobile && !isTablet;\n const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n const isDesktop = !isPhone && !isTablet && !iOSwebview;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview),\n isDesktop: constant(isDesktop)\n };\n };\n\n const firstMatch = (regexes, s) => {\n for (let i = 0; i < regexes.length; i++) {\n const x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n const find$1 = (regexes, agent) => {\n const r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n const group = i => {\n return Number(agent.replace(r, '$' + i));\n };\n return nu$3(group(1), group(2));\n };\n const detect$4 = (versionRegexes, agent) => {\n const cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$2();\n }\n return find$1(versionRegexes, cleanedAgent);\n };\n const unknown$2 = () => {\n return nu$3(0, 0);\n };\n const nu$3 = (major, minor) => {\n return {\n major,\n minor\n };\n };\n const Version = {\n nu: nu$3,\n detect: detect$4,\n unknown: unknown$2\n };\n\n const detectBrowser$1 = (browsers, userAgentData) => {\n return findMap(userAgentData.brands, uaBrand => {\n const lcBrand = uaBrand.brand.toLowerCase();\n return find$2(browsers, browser => {\n var _a;\n return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n }).map(info => ({\n current: info.name,\n version: Version.nu(parseInt(uaBrand.version, 10), 0)\n }));\n });\n };\n\n const detect$3 = (candidates, userAgent) => {\n const agent = String(userAgent).toLowerCase();\n return find$2(candidates, candidate => {\n return candidate.search(agent);\n });\n };\n const detectBrowser = (browsers, userAgent) => {\n return detect$3(browsers, userAgent).map(browser => {\n const version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version\n };\n });\n };\n const detectOs = (oses, userAgent) => {\n return detect$3(oses, userAgent).map(os => {\n const version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version\n };\n });\n };\n\n const removeFromStart = (str, numChars) => {\n return str.substring(numChars);\n };\n\n const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n const removeLeading = (str, prefix) => {\n return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n };\n const contains$1 = (str, substr, start = 0, end) => {\n const idx = str.indexOf(substr, start);\n if (idx !== -1) {\n return isUndefined(end) ? true : idx + substr.length <= end;\n } else {\n return false;\n }\n };\n const startsWith = (str, prefix) => {\n return checkRange(str, prefix, 0);\n };\n const endsWith = (str, suffix) => {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n const blank = r => s => s.replace(r, '');\n const trim$4 = blank(/^\\s+|\\s+$/g);\n const lTrim = blank(/^\\s+/g);\n const rTrim = blank(/\\s+$/g);\n const isNotEmpty = s => s.length > 0;\n const isEmpty$3 = s => !isNotEmpty(s);\n const repeat = (s, count) => count <= 0 ? '' : new Array(count + 1).join(s);\n const toInt = (value, radix = 10) => {\n const num = parseInt(value, radix);\n return isNaN(num) ? Optional.none() : Optional.some(num);\n };\n\n const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n const checkContains = target => {\n return uastring => {\n return contains$1(uastring, target);\n };\n };\n const browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: uastring => {\n return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chromium',\n brand: 'Chromium',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: uastring => {\n return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: uastring => {\n return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: uastring => {\n return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\n }\n }\n ];\n const oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: uastring => {\n return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'macOS',\n search: checkContains('mac os x'),\n versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n },\n {\n name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n const PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n const edge = 'Edge';\n const chromium = 'Chromium';\n const ie = 'IE';\n const opera = 'Opera';\n const firefox = 'Firefox';\n const safari = 'Safari';\n const unknown$1 = () => {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$2 = info => {\n const current = info.current;\n const version = info.version;\n const isBrowser = name => () => current === name;\n return {\n current,\n version,\n isEdge: isBrowser(edge),\n isChromium: isBrowser(chromium),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n const Browser = {\n unknown: unknown$1,\n nu: nu$2,\n edge: constant(edge),\n chromium: constant(chromium),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n const windows = 'Windows';\n const ios = 'iOS';\n const android = 'Android';\n const linux = 'Linux';\n const macos = 'macOS';\n const solaris = 'Solaris';\n const freebsd = 'FreeBSD';\n const chromeos = 'ChromeOS';\n const unknown = () => {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$1 = info => {\n const current = info.current;\n const version = info.version;\n const isOS = name => () => current === name;\n return {\n current,\n version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isMacOS: isOS(macos),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n const OperatingSystem = {\n unknown,\n nu: nu$1,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n macos: constant(macos),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n const detect$2 = (userAgent, userAgentDataOpt, mediaMatch) => {\n const browsers = PlatformInfo.browsers();\n const oses = PlatformInfo.oses();\n const browser = userAgentDataOpt.bind(userAgentData => detectBrowser$1(browsers, userAgentData)).orThunk(() => detectBrowser(browsers, userAgent)).fold(Browser.unknown, Browser.nu);\n const os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n const deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n return {\n browser,\n os,\n deviceType\n };\n };\n const PlatformDetection = { detect: detect$2 };\n\n const mediaMatch = query => window.matchMedia(query).matches;\n let platform$4 = cached(() => PlatformDetection.detect(window.navigator.userAgent, Optional.from(window.navigator.userAgentData), mediaMatch));\n const detect$1 = () => platform$4();\n\n const userAgent = window.navigator.userAgent;\n const platform$3 = detect$1();\n const browser$3 = platform$3.browser;\n const os$1 = platform$3.os;\n const deviceType = platform$3.deviceType;\n const windowsPhone = userAgent.indexOf('Windows Phone') !== -1;\n const Env = {\n transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',\n documentMode: browser$3.isIE() ? document.documentMode || 7 : 10,\n cacheSuffix: null,\n container: null,\n canHaveCSP: !browser$3.isIE(),\n windowsPhone,\n browser: {\n current: browser$3.current,\n version: browser$3.version,\n isChromium: browser$3.isChromium,\n isEdge: browser$3.isEdge,\n isFirefox: browser$3.isFirefox,\n isIE: browser$3.isIE,\n isOpera: browser$3.isOpera,\n isSafari: browser$3.isSafari\n },\n os: {\n current: os$1.current,\n version: os$1.version,\n isAndroid: os$1.isAndroid,\n isChromeOS: os$1.isChromeOS,\n isFreeBSD: os$1.isFreeBSD,\n isiOS: os$1.isiOS,\n isLinux: os$1.isLinux,\n isMacOS: os$1.isMacOS,\n isSolaris: os$1.isSolaris,\n isWindows: os$1.isWindows\n },\n deviceType: {\n isDesktop: deviceType.isDesktop,\n isiPad: deviceType.isiPad,\n isiPhone: deviceType.isiPhone,\n isPhone: deviceType.isPhone,\n isTablet: deviceType.isTablet,\n isTouch: deviceType.isTouch,\n isWebView: deviceType.isWebView\n }\n };\n\n const whiteSpaceRegExp$1 = /^\\s*|\\s*$/g;\n const trim$3 = str => {\n return isNullable(str) ? '' : ('' + str).replace(whiteSpaceRegExp$1, '');\n };\n const is$3 = (obj, type) => {\n if (!type) {\n return obj !== undefined;\n }\n if (type === 'array' && isArray(obj)) {\n return true;\n }\n return typeof obj === type;\n };\n const makeMap$4 = (items, delim, map = {}) => {\n const resolvedItems = isString(items) ? items.split(delim || ',') : items || [];\n let i = resolvedItems.length;\n while (i--) {\n map[resolvedItems[i]] = {};\n }\n return map;\n };\n const hasOwnProperty = has$2;\n const extend$3 = (obj, ...exts) => {\n for (let i = 0; i < exts.length; i++) {\n const ext = exts[i];\n for (const name in ext) {\n if (has$2(ext, name)) {\n const value = ext[name];\n if (value !== undefined) {\n obj[name] = value;\n }\n }\n }\n }\n return obj;\n };\n const walk$4 = function (o, f, n, s) {\n s = s || this;\n if (o) {\n if (n) {\n o = o[n];\n }\n each$c(o, (o, i) => {\n if (f.call(s, o, i, n) === false) {\n return false;\n } else {\n walk$4(o, f, n, s);\n return true;\n }\n });\n }\n };\n const resolve$3 = (n, o = window) => {\n const path = n.split('.');\n for (let i = 0, l = path.length; i < l; i++) {\n o = o[path[i]];\n if (!o) {\n break;\n }\n }\n return o;\n };\n const explode$3 = (s, d) => {\n if (isArray$1(s)) {\n return s;\n } else if (s === '') {\n return [];\n } else {\n return map$1(s.split(d || ','), trim$3);\n }\n };\n const _addCacheSuffix = url => {\n const cacheSuffix = Env.cacheSuffix;\n if (cacheSuffix) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + cacheSuffix;\n }\n return url;\n };\n const Tools = {\n trim: trim$3,\n isArray: isArray,\n is: is$3,\n toArray: toArray$1,\n makeMap: makeMap$4,\n each: each$c,\n map: map$1,\n grep: filter$3,\n inArray: indexOf,\n hasOwn: hasOwnProperty,\n extend: extend$3,\n walk: walk$4,\n resolve: resolve$3,\n explode: explode$3,\n _addCacheSuffix\n };\n\n const is$2 = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n const equals = (lhs, rhs, comparator = tripleEquals) => lift2(lhs, rhs, comparator).getOr(lhs.isNone() && rhs.isNone());\n const cat = arr => {\n const r = [];\n const push = x => {\n r.push(x);\n };\n for (let i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n const lift2 = (oa, ob, f) => oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n const lift3 = (oa, ob, oc, f) => oa.isSome() && ob.isSome() && oc.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Optional.none();\n const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n const path = (parts, scope) => {\n let o = scope !== undefined && scope !== null ? scope : Global;\n for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n const resolve$2 = (p, scope) => {\n const parts = p.split('.');\n return path(parts, scope);\n };\n\n const unsafe = (name, scope) => {\n return resolve$2(name, scope);\n };\n const getOrDie = (name, scope) => {\n const actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n\n const getPrototypeOf$1 = Object.getPrototypeOf;\n const sandHTMLElement = scope => {\n return getOrDie('HTMLElement', scope);\n };\n const isPrototypeOf = x => {\n const scope = resolve$2('ownerDocument.defaultView', x);\n return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf$1(x).constructor.name));\n };\n\n const COMMENT = 8;\n const DOCUMENT = 9;\n const DOCUMENT_FRAGMENT = 11;\n const ELEMENT = 1;\n const TEXT = 3;\n\n const name = element => {\n const r = element.dom.nodeName;\n return r.toLowerCase();\n };\n const type$1 = element => element.dom.nodeType;\n const isType = t => element => type$1(element) === t;\n const isComment$1 = element => type$1(element) === COMMENT || name(element) === '#comment';\n const isHTMLElement$1 = element => isElement$7(element) && isPrototypeOf(element.dom);\n const isElement$7 = isType(ELEMENT);\n const isText$c = isType(TEXT);\n const isDocument$2 = isType(DOCUMENT);\n const isDocumentFragment$1 = isType(DOCUMENT_FRAGMENT);\n const isTag = tag => e => isElement$7(e) && name(e) === tag;\n\n const rawSet = (dom, key, value) => {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n const set$4 = (element, key, value) => {\n rawSet(element.dom, key, value);\n };\n const setAll$1 = (element, attrs) => {\n const dom = element.dom;\n each$d(attrs, (v, k) => {\n rawSet(dom, k, v);\n });\n };\n const get$9 = (element, key) => {\n const v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n const getOpt = (element, key) => Optional.from(get$9(element, key));\n const has$1 = (element, key) => {\n const dom = element.dom;\n return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n };\n const remove$9 = (element, key) => {\n element.dom.removeAttribute(key);\n };\n const hasNone = element => {\n const attrs = element.dom.attributes;\n return attrs === undefined || attrs === null || attrs.length === 0;\n };\n const clone$4 = element => foldl(element.dom.attributes, (acc, attr) => {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n\n const read$4 = (element, attr) => {\n const value = get$9(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n const add$4 = (element, attr, id) => {\n const old = read$4(element, attr);\n const nu = old.concat([id]);\n set$4(element, attr, nu.join(' '));\n return true;\n };\n const remove$8 = (element, attr, id) => {\n const nu = filter$5(read$4(element, attr), v => v !== id);\n if (nu.length > 0) {\n set$4(element, attr, nu.join(' '));\n } else {\n remove$9(element, attr);\n }\n return false;\n };\n\n const supports = element => element.dom.classList !== undefined;\n const get$8 = element => read$4(element, 'class');\n const add$3 = (element, clazz) => add$4(element, 'class', clazz);\n const remove$7 = (element, clazz) => remove$8(element, 'class', clazz);\n const toggle$2 = (element, clazz) => {\n if (contains$2(get$8(element), clazz)) {\n return remove$7(element, clazz);\n } else {\n return add$3(element, clazz);\n }\n };\n\n const add$2 = (element, clazz) => {\n if (supports(element)) {\n element.dom.classList.add(clazz);\n } else {\n add$3(element, clazz);\n }\n };\n const cleanClass = element => {\n const classList = supports(element) ? element.dom.classList : get$8(element);\n if (classList.length === 0) {\n remove$9(element, 'class');\n }\n };\n const remove$6 = (element, clazz) => {\n if (supports(element)) {\n const classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$7(element, clazz);\n }\n cleanClass(element);\n };\n const toggle$1 = (element, clazz) => {\n const result = supports(element) ? element.dom.classList.toggle(clazz) : toggle$2(element, clazz);\n cleanClass(element);\n return result;\n };\n const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n\n const fromHtml$1 = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n const message = 'HTML does not have a single root node';\n console.error(message, html);\n throw new Error(message);\n }\n return fromDom$2(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom$2(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom$2(node);\n };\n const fromDom$2 = node => {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n const fromPoint$2 = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$2);\n const SugarElement = {\n fromHtml: fromHtml$1,\n fromTag,\n fromText,\n fromDom: fromDom$2,\n fromPoint: fromPoint$2\n };\n\n const toArray = (target, f) => {\n const r = [];\n const recurse = e => {\n r.push(e);\n return f(e);\n };\n let cur = f(target);\n do {\n cur = cur.bind(recurse);\n } while (cur.isSome());\n return r;\n };\n\n const is$1 = (element, selector) => {\n const dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n const elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n const all = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map$3(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n const one = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n };\n\n const eq = (e1, e2) => e1.dom === e2.dom;\n const contains = (e1, e2) => {\n const d1 = e1.dom;\n const d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n\n const owner$1 = element => SugarElement.fromDom(element.dom.ownerDocument);\n const documentOrOwner = dos => isDocument$2(dos) ? dos : owner$1(dos);\n const documentElement = element => SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n const defaultView = element => SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n const parentElement = element => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n const parents$1 = (element, isRoot) => {\n const stop = isFunction(isRoot) ? isRoot : never;\n let dom = element.dom;\n const ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n const rawParent = dom.parentNode;\n const p = SugarElement.fromDom(rawParent);\n ret.push(p);\n if (stop(p) === true) {\n break;\n } else {\n dom = rawParent;\n }\n }\n return ret;\n };\n const siblings = element => {\n const filterSelf = elements => filter$5(elements, x => !eq(element, x));\n return parent(element).map(children$1).map(filterSelf).getOr([]);\n };\n const prevSibling = element => Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n const prevSiblings = element => reverse(toArray(element, prevSibling));\n const nextSiblings = element => toArray(element, nextSibling);\n const children$1 = element => map$3(element.dom.childNodes, SugarElement.fromDom);\n const child$1 = (element, index) => {\n const cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n const firstChild = element => child$1(element, 0);\n const lastChild = element => child$1(element, element.dom.childNodes.length - 1);\n const childNodesCount = element => element.dom.childNodes.length;\n\n const getHead = doc => {\n const b = doc.dom.head;\n if (b === null || b === undefined) {\n throw new Error('Head is not available yet');\n }\n return SugarElement.fromDom(b);\n };\n\n const isShadowRoot = dos => isDocumentFragment$1(dos) && isNonNullable(dos.dom.host);\n const getRootNode = e => SugarElement.fromDom(e.dom.getRootNode());\n const getStyleContainer = dos => isShadowRoot(dos) ? dos : getHead(documentOrOwner(dos));\n const getContentContainer = dos => isShadowRoot(dos) ? dos : SugarElement.fromDom(documentOrOwner(dos).dom.body);\n const getShadowRoot = e => {\n const r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n const getOriginalEventTarget = event => {\n if (isNonNullable(event.target)) {\n const el = SugarElement.fromDom(event.target);\n if (isElement$7(el) && isOpenShadowHost(el)) {\n if (event.composed && event.composedPath) {\n const composedPath = event.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Optional.from(event.target);\n };\n const isOpenShadowHost = element => isNonNullable(element.dom.shadowRoot);\n\n const inBody = element => {\n const dom = isText$c(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n const doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n };\n\n var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n if (is(scope, a)) {\n return Optional.some(scope);\n } else if (isFunction(isRoot) && isRoot(scope)) {\n return Optional.none();\n } else {\n return ancestor(scope, a, isRoot);\n }\n };\n\n const ancestor$4 = (scope, predicate, isRoot) => {\n let element = scope.dom;\n const stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n const el = SugarElement.fromDom(element);\n if (predicate(el)) {\n return Optional.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n const closest$4 = (scope, predicate, isRoot) => {\n const is = (s, test) => test(s);\n return ClosestOrAncestor(is, ancestor$4, scope, predicate, isRoot);\n };\n const sibling$1 = (scope, predicate) => {\n const element = scope.dom;\n if (!element.parentNode) {\n return Optional.none();\n }\n return child(SugarElement.fromDom(element.parentNode), x => !eq(scope, x) && predicate(x));\n };\n const child = (scope, predicate) => {\n const pred = node => predicate(SugarElement.fromDom(node));\n const result = find$2(scope.dom.childNodes, pred);\n return result.map(SugarElement.fromDom);\n };\n const descendant$2 = (scope, predicate) => {\n const descend = node => {\n for (let i = 0; i < node.childNodes.length; i++) {\n const child = SugarElement.fromDom(node.childNodes[i]);\n if (predicate(child)) {\n return Optional.some(child);\n }\n const res = descend(node.childNodes[i]);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope.dom);\n };\n\n const ancestor$3 = (scope, selector, isRoot) => ancestor$4(scope, e => is$1(e, selector), isRoot);\n const descendant$1 = (scope, selector) => one(selector, scope);\n const closest$3 = (scope, selector, isRoot) => {\n const is = (element, selector) => is$1(element, selector);\n return ClosestOrAncestor(is, ancestor$3, scope, selector, isRoot);\n };\n\n const closest$2 = target => closest$3(target, '[contenteditable]');\n const isEditable$2 = (element, assumeEditable = false) => {\n if (inBody(element)) {\n return element.dom.isContentEditable;\n } else {\n return closest$2(element).fold(constant(assumeEditable), editable => getRaw$1(editable) === 'true');\n }\n };\n const getRaw$1 = element => element.dom.contentEditable;\n const set$3 = (element, editable) => {\n element.dom.contentEditable = editable ? 'true' : 'false';\n };\n\n const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n const internalSet = (dom, property, value) => {\n if (!isString(value)) {\n console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n const internalRemove = (dom, property) => {\n if (isSupported(dom)) {\n dom.style.removeProperty(property);\n }\n };\n const set$2 = (element, property, value) => {\n const dom = element.dom;\n internalSet(dom, property, value);\n };\n const setAll = (element, css) => {\n const dom = element.dom;\n each$d(css, (v, k) => {\n internalSet(dom, k, v);\n });\n };\n const get$7 = (element, property) => {\n const dom = element.dom;\n const styles = window.getComputedStyle(dom);\n const r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n const getUnsafeProperty = (dom, property) => isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n const getRaw = (element, property) => {\n const dom = element.dom;\n const raw = getUnsafeProperty(dom, property);\n return Optional.from(raw).filter(r => r.length > 0);\n };\n const getAllRaw = element => {\n const css = {};\n const dom = element.dom;\n if (isSupported(dom)) {\n for (let i = 0; i < dom.style.length; i++) {\n const ruleName = dom.style.item(i);\n css[ruleName] = dom.style[ruleName];\n }\n }\n return css;\n };\n const remove$5 = (element, property) => {\n const dom = element.dom;\n internalRemove(dom, property);\n if (is$2(getOpt(element, 'style').map(trim$4), '')) {\n remove$9(element, 'style');\n }\n };\n const reflow = e => e.dom.offsetWidth;\n\n const before$3 = (marker, element) => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n const after$4 = (marker, element) => {\n const sibling = nextSibling(marker);\n sibling.fold(() => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n append$1(v, element);\n });\n }, v => {\n before$3(v, element);\n });\n };\n const prepend = (parent, element) => {\n const firstChild$1 = firstChild(parent);\n firstChild$1.fold(() => {\n append$1(parent, element);\n }, v => {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n const append$1 = (parent, element) => {\n parent.dom.appendChild(element.dom);\n };\n const wrap$2 = (element, wrapper) => {\n before$3(element, wrapper);\n append$1(wrapper, element);\n };\n\n const after$3 = (marker, elements) => {\n each$e(elements, (x, i) => {\n const e = i === 0 ? marker : elements[i - 1];\n after$4(e, x);\n });\n };\n const append = (parent, elements) => {\n each$e(elements, x => {\n append$1(parent, x);\n });\n };\n\n const empty = element => {\n element.dom.textContent = '';\n each$e(children$1(element), rogue => {\n remove$4(rogue);\n });\n };\n const remove$4 = element => {\n const dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n const unwrap = wrapper => {\n const children = children$1(wrapper);\n if (children.length > 0) {\n after$3(wrapper, children);\n }\n remove$4(wrapper);\n };\n\n const fromHtml = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n return children$1(SugarElement.fromDom(div));\n };\n const fromDom$1 = nodes => map$3(nodes, SugarElement.fromDom);\n\n const get$6 = element => element.dom.innerHTML;\n const set$1 = (element, content) => {\n const owner = owner$1(element);\n const docDom = owner.dom;\n const fragment = SugarElement.fromDom(docDom.createDocumentFragment());\n const contentElements = fromHtml(content, docDom);\n append(fragment, contentElements);\n empty(element);\n append$1(element, fragment);\n };\n const getOuter = element => {\n const container = SugarElement.fromTag('div');\n const clone = SugarElement.fromDom(element.dom.cloneNode(true));\n append$1(container, clone);\n return get$6(container);\n };\n\n const mkEvent = (target, x, y, stop, prevent, kill, raw) => ({\n target,\n x,\n y,\n stop,\n prevent,\n kill,\n raw\n });\n const fromRawEvent = rawEvent => {\n const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n const stop = () => rawEvent.stopPropagation();\n const prevent = () => rawEvent.preventDefault();\n const kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n const handle$1 = (filter, handler) => rawEvent => {\n if (filter(rawEvent)) {\n handler(fromRawEvent(rawEvent));\n }\n };\n const binder = (element, event, filter, handler, useCapture) => {\n const wrapped = handle$1(filter, handler);\n element.dom.addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n const bind$2 = (element, event, filter, handler) => binder(element, event, filter, handler, false);\n const unbind = (element, event, handler, useCapture) => {\n element.dom.removeEventListener(event, handler, useCapture);\n };\n\n const r = (left, top) => {\n const translate = (x, y) => r(left + x, top + y);\n return {\n left,\n top,\n translate\n };\n };\n const SugarPosition = r;\n\n const boxPosition = dom => {\n const box = dom.getBoundingClientRect();\n return SugarPosition(box.left, box.top);\n };\n const firstDefinedOrZero = (a, b) => {\n if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n const absolute = element => {\n const doc = element.dom.ownerDocument;\n const body = doc.body;\n const win = doc.defaultView;\n const html = doc.documentElement;\n if (body === element.dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n const scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n const scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n const clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n const clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n const viewport = element => {\n const dom = element.dom;\n const doc = dom.ownerDocument;\n const body = doc.body;\n if (body === dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return SugarPosition(0, 0);\n }\n return boxPosition(dom);\n };\n\n const get$5 = _DOC => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n const y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return SugarPosition(x, y);\n };\n const to = (x, y, _DOC) => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const win = doc.defaultView;\n if (win) {\n win.scrollTo(x, y);\n }\n };\n const intoView = (element, alignToTop) => {\n const isSafari = detect$1().browser.isSafari();\n if (isSafari && isFunction(element.dom.scrollIntoViewIfNeeded)) {\n element.dom.scrollIntoViewIfNeeded(false);\n } else {\n element.dom.scrollIntoView(alignToTop);\n }\n };\n\n const get$4 = _win => {\n const win = _win === undefined ? window : _win;\n if (detect$1().browser.isFirefox()) {\n return Optional.none();\n } else {\n return Optional.from(win.visualViewport);\n }\n };\n const bounds = (x, y, width, height) => ({\n x,\n y,\n width,\n height,\n right: x + width,\n bottom: y + height\n });\n const getBounds = _win => {\n const win = _win === undefined ? window : _win;\n const doc = win.document;\n const scroll = get$5(SugarElement.fromDom(doc));\n return get$4(win).fold(() => {\n const html = win.document.documentElement;\n const width = html.clientWidth;\n const height = html.clientHeight;\n return bounds(scroll.left, scroll.top, width, height);\n }, visualViewport => bounds(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height));\n };\n\n const children = (scope, predicate) => filter$5(children$1(scope), predicate);\n const descendants$1 = (scope, predicate) => {\n let result = [];\n each$e(children$1(scope), x => {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(descendants$1(x, predicate));\n });\n return result;\n };\n\n const descendants = (scope, selector) => all(selector, scope);\n\n const ancestor$2 = (scope, predicate, isRoot) => ancestor$4(scope, predicate, isRoot).isSome();\n const sibling = (scope, predicate) => sibling$1(scope, predicate).isSome();\n const descendant = (scope, predicate) => descendant$2(scope, predicate).isSome();\n\n class DomTreeWalker {\n constructor(startNode, rootNode) {\n this.node = startNode;\n this.rootNode = rootNode;\n this.current = this.current.bind(this);\n this.next = this.next.bind(this);\n this.prev = this.prev.bind(this);\n this.prev2 = this.prev2.bind(this);\n }\n current() {\n return this.node;\n }\n next(shallow) {\n this.node = this.findSibling(this.node, 'firstChild', 'nextSibling', shallow);\n return this.node;\n }\n prev(shallow) {\n this.node = this.findSibling(this.node, 'lastChild', 'previousSibling', shallow);\n return this.node;\n }\n prev2(shallow) {\n this.node = this.findPreviousNode(this.node, shallow);\n return this.node;\n }\n findSibling(node, startName, siblingName, shallow) {\n if (node) {\n if (!shallow && node[startName]) {\n return node[startName];\n }\n if (node !== this.rootNode) {\n let sibling = node[siblingName];\n if (sibling) {\n return sibling;\n }\n for (let parent = node.parentNode; parent && parent !== this.rootNode; parent = parent.parentNode) {\n sibling = parent[siblingName];\n if (sibling) {\n return sibling;\n }\n }\n }\n }\n return undefined;\n }\n findPreviousNode(node, shallow) {\n if (node) {\n const sibling = node.previousSibling;\n if (this.rootNode && sibling === this.rootNode) {\n return;\n }\n if (sibling) {\n if (!shallow) {\n for (let child = sibling.lastChild; child; child = child.lastChild) {\n if (!child.lastChild) {\n return child;\n }\n }\n }\n return sibling;\n }\n const parent = node.parentNode;\n if (parent && parent !== this.rootNode) {\n return parent;\n }\n }\n return undefined;\n }\n }\n\n const zeroWidth = '\\uFEFF';\n const nbsp = '\\xA0';\n const isZwsp$2 = char => char === zeroWidth;\n const removeZwsp = s => s.replace(/\\uFEFF/g, '');\n\n const whiteSpaceRegExp = /^[ \\t\\r\\n]*$/;\n const isWhitespaceText = text => whiteSpaceRegExp.test(text);\n const isZwsp$1 = text => {\n for (const c of text) {\n if (!isZwsp$2(c)) {\n return false;\n }\n }\n return true;\n };\n const isCollapsibleWhitespace$1 = c => ' \\f\\t\\x0B'.indexOf(c) !== -1;\n const isNewLineChar = c => c === '\\n' || c === '\\r';\n const isNewline = (text, idx) => idx < text.length && idx >= 0 ? isNewLineChar(text[idx]) : false;\n const normalize$4 = (text, tabSpaces = 4, isStartOfContent = true, isEndOfContent = true) => {\n const tabSpace = repeat(' ', tabSpaces);\n const normalizedText = text.replace(/\\t/g, tabSpace);\n const result = foldl(normalizedText, (acc, c) => {\n if (isCollapsibleWhitespace$1(c) || c === nbsp) {\n if (acc.pcIsSpace || acc.str === '' && isStartOfContent || acc.str.length === normalizedText.length - 1 && isEndOfContent || isNewline(normalizedText, acc.str.length + 1)) {\n return {\n pcIsSpace: false,\n str: acc.str + nbsp\n };\n } else {\n return {\n pcIsSpace: true,\n str: acc.str + ' '\n };\n }\n } else {\n return {\n pcIsSpace: isNewLineChar(c),\n str: acc.str + c\n };\n }\n }, {\n pcIsSpace: false,\n str: ''\n });\n return result.str;\n };\n\n const isNodeType = type => {\n return node => {\n return !!node && node.nodeType === type;\n };\n };\n const isRestrictedNode = node => !!node && !Object.getPrototypeOf(node);\n const isElement$6 = isNodeType(1);\n const isHTMLElement = node => isElement$6(node) && isHTMLElement$1(SugarElement.fromDom(node));\n const isSVGElement = node => isElement$6(node) && node.namespaceURI === 'http://www.w3.org/2000/svg';\n const matchNodeName = name => {\n const lowerCasedName = name.toLowerCase();\n return node => isNonNullable(node) && node.nodeName.toLowerCase() === lowerCasedName;\n };\n const matchNodeNames = names => {\n const lowerCasedNames = names.map(s => s.toLowerCase());\n return node => {\n if (node && node.nodeName) {\n const nodeName = node.nodeName.toLowerCase();\n return contains$2(lowerCasedNames, nodeName);\n }\n return false;\n };\n };\n const matchStyleValues = (name, values) => {\n const items = values.toLowerCase().split(' ');\n return node => {\n if (isElement$6(node)) {\n const win = node.ownerDocument.defaultView;\n if (win) {\n for (let i = 0; i < items.length; i++) {\n const computed = win.getComputedStyle(node, null);\n const cssValue = computed ? computed.getPropertyValue(name) : null;\n if (cssValue === items[i]) {\n return true;\n }\n }\n }\n }\n return false;\n };\n };\n const hasAttribute = attrName => {\n return node => {\n return isElement$6(node) && node.hasAttribute(attrName);\n };\n };\n const isBogus$1 = node => isElement$6(node) && node.hasAttribute('data-mce-bogus');\n const isBogusAll = node => isElement$6(node) && node.getAttribute('data-mce-bogus') === 'all';\n const isTable$2 = node => isElement$6(node) && node.tagName === 'TABLE';\n const hasContentEditableState = value => {\n return node => {\n if (isHTMLElement(node)) {\n if (node.contentEditable === value) {\n return true;\n }\n if (node.getAttribute('data-mce-contenteditable') === value) {\n return true;\n }\n }\n return false;\n };\n };\n const isTextareaOrInput = matchNodeNames([\n 'textarea',\n 'input'\n ]);\n const isText$b = isNodeType(3);\n const isCData = isNodeType(4);\n const isPi = isNodeType(7);\n const isComment = isNodeType(8);\n const isDocument$1 = isNodeType(9);\n const isDocumentFragment = isNodeType(11);\n const isBr$6 = matchNodeName('br');\n const isImg = matchNodeName('img');\n const isContentEditableTrue$3 = hasContentEditableState('true');\n const isContentEditableFalse$b = hasContentEditableState('false');\n const isEditingHost = node => isHTMLElement(node) && node.isContentEditable && isNonNullable(node.parentElement) && !node.parentElement.isContentEditable;\n const isTableCell$3 = matchNodeNames([\n 'td',\n 'th'\n ]);\n const isTableCellOrCaption = matchNodeNames([\n 'td',\n 'th',\n 'caption'\n ]);\n const isMedia$2 = matchNodeNames([\n 'video',\n 'audio',\n 'object',\n 'embed'\n ]);\n const isListItem$2 = matchNodeName('li');\n const isDetails = matchNodeName('details');\n const isSummary$1 = matchNodeName('summary');\n\n const defaultOptionValues = {\n skipBogus: true,\n includeZwsp: false,\n checkRootAsContent: false\n };\n const hasWhitespacePreserveParent = (node, rootNode, schema) => {\n const rootElement = SugarElement.fromDom(rootNode);\n const startNode = SugarElement.fromDom(node);\n const whitespaceElements = schema.getWhitespaceElements();\n const predicate = node => has$2(whitespaceElements, name(node));\n return ancestor$2(startNode, predicate, curry(eq, rootElement));\n };\n const isNamedAnchor = node => {\n return isElement$6(node) && node.nodeName === 'A' && !node.hasAttribute('href') && (node.hasAttribute('name') || node.hasAttribute('id'));\n };\n const isNonEmptyElement$1 = (node, schema) => {\n return isElement$6(node) && has$2(schema.getNonEmptyElements(), node.nodeName);\n };\n const isBookmark = hasAttribute('data-mce-bookmark');\n const hasNonEditableParent = node => parentElement(SugarElement.fromDom(node)).exists(parent => !isEditable$2(parent));\n const isWhitespace$1 = (node, rootNode, schema) => isWhitespaceText(node.data) && !hasWhitespacePreserveParent(node, rootNode, schema);\n const isText$a = (node, rootNode, schema, options) => isText$b(node) && !isWhitespace$1(node, rootNode, schema) && (!options.includeZwsp || !isZwsp$1(node.data));\n const isContentNode = (schema, node, rootNode, options) => {\n return isFunction(options.isContent) && options.isContent(node) || isNonEmptyElement$1(node, schema) || isBookmark(node) || isNamedAnchor(node) || isText$a(node, rootNode, schema, options) || isContentEditableFalse$b(node) || isContentEditableTrue$3(node) && hasNonEditableParent(node);\n };\n const isEmptyNode = (schema, targetNode, opts) => {\n const options = {\n ...defaultOptionValues,\n ...opts\n };\n if (options.checkRootAsContent) {\n if (isContentNode(schema, targetNode, targetNode, options)) {\n return false;\n }\n }\n let node = targetNode.firstChild;\n let brCount = 0;\n if (!node) {\n return true;\n }\n const walker = new DomTreeWalker(node, targetNode);\n do {\n if (options.skipBogus && isElement$6(node)) {\n const bogusValue = node.getAttribute('data-mce-bogus');\n if (bogusValue) {\n node = walker.next(bogusValue === 'all');\n continue;\n }\n }\n if (isComment(node)) {\n node = walker.next(true);\n continue;\n }\n if (isBr$6(node)) {\n brCount++;\n node = walker.next();\n continue;\n }\n if (isContentNode(schema, node, targetNode, options)) {\n return false;\n }\n node = walker.next();\n } while (node);\n return brCount <= 1;\n };\n const isEmpty$2 = (schema, elm, options) => {\n return isEmptyNode(schema, elm.dom, {\n checkRootAsContent: true,\n ...options\n });\n };\n const isContent$1 = (schema, node, options) => {\n return isContentNode(schema, node, node, {\n includeZwsp: defaultOptionValues.includeZwsp,\n ...options\n });\n };\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n const singleton = doRevoke => {\n const subject = Cell(Optional.none());\n const revoke = () => subject.get().each(doRevoke);\n const clear = () => {\n revoke();\n subject.set(Optional.none());\n };\n const isSet = () => subject.get().isSome();\n const get = () => subject.get();\n const set = s => {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear,\n isSet,\n get,\n set\n };\n };\n const repeatable = delay => {\n const intervalId = Cell(Optional.none());\n const revoke = () => intervalId.get().each(id => clearInterval(id));\n const clear = () => {\n revoke();\n intervalId.set(Optional.none());\n };\n const isSet = () => intervalId.get().isSome();\n const get = () => intervalId.get();\n const set = functionToRepeat => {\n revoke();\n intervalId.set(Optional.some(setInterval(functionToRepeat, delay)));\n };\n return {\n clear,\n isSet,\n get,\n set\n };\n };\n const value$2 = () => {\n const subject = singleton(noop);\n const on = f => subject.get().each(f);\n return {\n ...subject,\n on\n };\n };\n\n const nodeNameToNamespaceType = name => {\n const lowerCaseName = name.toLowerCase();\n if (lowerCaseName === 'svg') {\n return 'svg';\n } else if (lowerCaseName === 'math') {\n return 'math';\n } else {\n return 'html';\n }\n };\n const isNonHtmlElementRootName = name => nodeNameToNamespaceType(name) !== 'html';\n const isNonHtmlElementRoot = node => isNonHtmlElementRootName(node.nodeName);\n const toScopeType = node => nodeNameToNamespaceType(node.nodeName);\n const namespaceElements = [\n 'svg',\n 'math'\n ];\n const createNamespaceTracker = () => {\n const currentScope = value$2();\n const current = () => currentScope.get().map(toScopeType).getOr('html');\n const track = node => {\n if (isNonHtmlElementRoot(node)) {\n currentScope.set(node);\n } else if (currentScope.get().exists(scopeNode => !scopeNode.contains(node))) {\n currentScope.clear();\n }\n return current();\n };\n const reset = () => {\n currentScope.clear();\n };\n return {\n track,\n current,\n reset\n };\n };\n\n const transparentBlockAttr = 'data-mce-block';\n const elementNames = map => filter$5(keys(map), key => !/[A-Z]/.test(key));\n const makeSelectorFromSchemaMap = map => map$3(elementNames(map), name => {\n const escapedName = CSS.escape(name);\n return `${ escapedName }:` + map$3(namespaceElements, ns => `not(${ ns } ${ escapedName })`).join(':');\n }).join(',');\n const updateTransparent = (blocksSelector, transparent) => {\n if (isNonNullable(transparent.querySelector(blocksSelector))) {\n transparent.setAttribute(transparentBlockAttr, 'true');\n if (transparent.getAttribute('data-mce-selected') === 'inline-boundary') {\n transparent.removeAttribute('data-mce-selected');\n }\n return true;\n } else {\n transparent.removeAttribute(transparentBlockAttr);\n return false;\n }\n };\n const updateBlockStateOnChildren = (schema, scope) => {\n const transparentSelector = makeSelectorFromSchemaMap(schema.getTransparentElements());\n const blocksSelector = makeSelectorFromSchemaMap(schema.getBlockElements());\n return filter$5(scope.querySelectorAll(transparentSelector), transparent => updateTransparent(blocksSelector, transparent));\n };\n const trimEdge = (schema, el, leftSide) => {\n var _a;\n const childPropertyName = leftSide ? 'lastChild' : 'firstChild';\n for (let child = el[childPropertyName]; child; child = child[childPropertyName]) {\n if (isEmptyNode(schema, child, { checkRootAsContent: true })) {\n (_a = child.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(child);\n return;\n }\n }\n };\n const split$2 = (schema, parentElm, splitElm) => {\n const range = document.createRange();\n const parentNode = parentElm.parentNode;\n if (parentNode) {\n range.setStartBefore(parentElm);\n range.setEndBefore(splitElm);\n const beforeFragment = range.extractContents();\n trimEdge(schema, beforeFragment, true);\n range.setStartAfter(splitElm);\n range.setEndAfter(parentElm);\n const afterFragment = range.extractContents();\n trimEdge(schema, afterFragment, false);\n if (!isEmptyNode(schema, beforeFragment, { checkRootAsContent: true })) {\n parentNode.insertBefore(beforeFragment, parentElm);\n }\n if (!isEmptyNode(schema, splitElm, { checkRootAsContent: true })) {\n parentNode.insertBefore(splitElm, parentElm);\n }\n if (!isEmptyNode(schema, afterFragment, { checkRootAsContent: true })) {\n parentNode.insertBefore(afterFragment, parentElm);\n }\n parentNode.removeChild(parentElm);\n }\n };\n const splitInvalidChildren = (schema, scope, transparentBlocks) => {\n const blocksElements = schema.getBlockElements();\n const rootNode = SugarElement.fromDom(scope);\n const isBlock = el => name(el) in blocksElements;\n const isRoot = el => eq(el, rootNode);\n each$e(fromDom$1(transparentBlocks), transparentBlock => {\n ancestor$4(transparentBlock, isBlock, isRoot).each(parentBlock => {\n const invalidChildren = children(transparentBlock, el => isBlock(el) && !schema.isValidChild(name(parentBlock), name(el)));\n if (invalidChildren.length > 0) {\n const stateScope = parentElement(parentBlock);\n each$e(invalidChildren, child => {\n ancestor$4(child, isBlock, isRoot).each(parentBlock => {\n split$2(schema, parentBlock.dom, child.dom);\n });\n });\n stateScope.each(scope => updateBlockStateOnChildren(schema, scope.dom));\n }\n });\n });\n };\n const unwrapInvalidChildren = (schema, scope, transparentBlocks) => {\n each$e([\n ...transparentBlocks,\n ...isTransparentBlock(schema, scope) ? [scope] : []\n ], block => each$e(descendants(SugarElement.fromDom(block), block.nodeName.toLowerCase()), elm => {\n if (isTransparentInline(schema, elm.dom)) {\n unwrap(elm);\n }\n }));\n };\n const updateChildren = (schema, scope) => {\n const transparentBlocks = updateBlockStateOnChildren(schema, scope);\n splitInvalidChildren(schema, scope, transparentBlocks);\n unwrapInvalidChildren(schema, scope, transparentBlocks);\n };\n const updateElement = (schema, target) => {\n if (isTransparentElement(schema, target)) {\n const blocksSelector = makeSelectorFromSchemaMap(schema.getBlockElements());\n updateTransparent(blocksSelector, target);\n }\n };\n const updateCaret = (schema, root, caretParent) => {\n const isRoot = el => eq(el, SugarElement.fromDom(root));\n const parents = parents$1(SugarElement.fromDom(caretParent), isRoot);\n get$b(parents, parents.length - 2).filter(isElement$7).fold(() => updateChildren(schema, root), scope => updateChildren(schema, scope.dom));\n };\n const hasBlockAttr = el => el.hasAttribute(transparentBlockAttr);\n const isTransparentElementName = (schema, name) => has$2(schema.getTransparentElements(), name);\n const isTransparentElement = (schema, node) => isElement$6(node) && isTransparentElementName(schema, node.nodeName);\n const isTransparentBlock = (schema, node) => isTransparentElement(schema, node) && hasBlockAttr(node);\n const isTransparentInline = (schema, node) => isTransparentElement(schema, node) && !hasBlockAttr(node);\n const isTransparentAstBlock = (schema, node) => node.type === 1 && isTransparentElementName(schema, node.name) && isString(node.attr(transparentBlockAttr));\n\n const browser$2 = detect$1().browser;\n const firstElement = nodes => find$2(nodes, isElement$7);\n const getTableCaptionDeltaY = elm => {\n if (browser$2.isFirefox() && name(elm) === 'table') {\n return firstElement(children$1(elm)).filter(elm => {\n return name(elm) === 'caption';\n }).bind(caption => {\n return firstElement(nextSiblings(caption)).map(body => {\n const bodyTop = body.dom.offsetTop;\n const captionTop = caption.dom.offsetTop;\n const captionHeight = caption.dom.offsetHeight;\n return bodyTop <= captionTop ? -captionHeight : 0;\n });\n }).getOr(0);\n } else {\n return 0;\n }\n };\n const hasChild = (elm, child) => elm.children && contains$2(elm.children, child);\n const getPos = (body, elm, rootElm) => {\n let x = 0, y = 0;\n const doc = body.ownerDocument;\n rootElm = rootElm ? rootElm : body;\n if (elm) {\n if (rootElm === body && elm.getBoundingClientRect && get$7(SugarElement.fromDom(body), 'position') === 'static') {\n const pos = elm.getBoundingClientRect();\n x = pos.left + (doc.documentElement.scrollLeft || body.scrollLeft) - doc.documentElement.clientLeft;\n y = pos.top + (doc.documentElement.scrollTop || body.scrollTop) - doc.documentElement.clientTop;\n return {\n x,\n y\n };\n }\n let offsetParent = elm;\n while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType && !hasChild(offsetParent, rootElm)) {\n const castOffsetParent = offsetParent;\n x += castOffsetParent.offsetLeft || 0;\n y += castOffsetParent.offsetTop || 0;\n offsetParent = castOffsetParent.offsetParent;\n }\n offsetParent = elm.parentNode;\n while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType && !hasChild(offsetParent, rootElm)) {\n x -= offsetParent.scrollLeft || 0;\n y -= offsetParent.scrollTop || 0;\n offsetParent = offsetParent.parentNode;\n }\n y += getTableCaptionDeltaY(SugarElement.fromDom(elm));\n }\n return {\n x,\n y\n };\n };\n\n const StyleSheetLoader = (documentOrShadowRoot, settings = {}) => {\n let idCount = 0;\n const loadedStates = {};\n const edos = SugarElement.fromDom(documentOrShadowRoot);\n const doc = documentOrOwner(edos);\n const _setReferrerPolicy = referrerPolicy => {\n settings.referrerPolicy = referrerPolicy;\n };\n const _setContentCssCors = contentCssCors => {\n settings.contentCssCors = contentCssCors;\n };\n const addStyle = element => {\n append$1(getStyleContainer(edos), element);\n };\n const removeStyle = id => {\n const styleContainer = getStyleContainer(edos);\n descendant$1(styleContainer, '#' + id).each(remove$4);\n };\n const getOrCreateState = url => get$a(loadedStates, url).getOrThunk(() => ({\n id: 'mce-u' + idCount++,\n passed: [],\n failed: [],\n count: 0\n }));\n const load = url => new Promise((success, failure) => {\n let link;\n const urlWithSuffix = Tools._addCacheSuffix(url);\n const state = getOrCreateState(urlWithSuffix);\n loadedStates[urlWithSuffix] = state;\n state.count++;\n const resolve = (callbacks, status) => {\n each$e(callbacks, call);\n state.status = status;\n state.passed = [];\n state.failed = [];\n if (link) {\n link.onload = null;\n link.onerror = null;\n link = null;\n }\n };\n const passed = () => resolve(state.passed, 2);\n const failed = () => resolve(state.failed, 3);\n if (success) {\n state.passed.push(success);\n }\n if (failure) {\n state.failed.push(failure);\n }\n if (state.status === 1) {\n return;\n }\n if (state.status === 2) {\n passed();\n return;\n }\n if (state.status === 3) {\n failed();\n return;\n }\n state.status = 1;\n const linkElem = SugarElement.fromTag('link', doc.dom);\n setAll$1(linkElem, {\n rel: 'stylesheet',\n type: 'text/css',\n id: state.id\n });\n if (settings.contentCssCors) {\n set$4(linkElem, 'crossOrigin', 'anonymous');\n }\n if (settings.referrerPolicy) {\n set$4(linkElem, 'referrerpolicy', settings.referrerPolicy);\n }\n link = linkElem.dom;\n link.onload = passed;\n link.onerror = failed;\n addStyle(linkElem);\n set$4(linkElem, 'href', urlWithSuffix);\n });\n const loadRawCss = (key, css) => {\n const state = getOrCreateState(key);\n loadedStates[key] = state;\n state.count++;\n const styleElem = SugarElement.fromTag('style', doc.dom);\n setAll$1(styleElem, {\n 'rel': 'stylesheet',\n 'type': 'text/css',\n 'id': state.id,\n 'data-mce-key': key\n });\n styleElem.dom.innerHTML = css;\n addStyle(styleElem);\n };\n const loadAll = urls => {\n const loadedUrls = Promise.allSettled(map$3(urls, url => load(url).then(constant(url))));\n return loadedUrls.then(results => {\n const parts = partition$2(results, r => r.status === 'fulfilled');\n if (parts.fail.length > 0) {\n return Promise.reject(map$3(parts.fail, result => result.reason));\n } else {\n return map$3(parts.pass, result => result.value);\n }\n });\n };\n const unload = url => {\n const urlWithSuffix = Tools._addCacheSuffix(url);\n get$a(loadedStates, urlWithSuffix).each(state => {\n const count = --state.count;\n if (count === 0) {\n delete loadedStates[urlWithSuffix];\n removeStyle(state.id);\n }\n });\n };\n const unloadRawCss = key => {\n get$a(loadedStates, key).each(state => {\n const count = --state.count;\n if (count === 0) {\n delete loadedStates[key];\n removeStyle(state.id);\n }\n });\n };\n const unloadAll = urls => {\n each$e(urls, url => {\n unload(url);\n });\n };\n return {\n load,\n loadRawCss,\n loadAll,\n unload,\n unloadRawCss,\n unloadAll,\n _setReferrerPolicy,\n _setContentCssCors\n };\n };\n\n const create$c = () => {\n const map = new WeakMap();\n const forElement = (referenceElement, settings) => {\n const root = getRootNode(referenceElement);\n const rootDom = root.dom;\n return Optional.from(map.get(rootDom)).getOrThunk(() => {\n const sl = StyleSheetLoader(rootDom, settings);\n map.set(rootDom, sl);\n return sl;\n });\n };\n return { forElement };\n };\n const instance = create$c();\n\n const isSpan = node => node.nodeName.toLowerCase() === 'span';\n const isInlineContent = (node, schema) => isNonNullable(node) && (isContent$1(schema, node) || schema.isInline(node.nodeName.toLowerCase()));\n const surroundedByInlineContent = (node, root, schema) => {\n const prev = new DomTreeWalker(node, root).prev(false);\n const next = new DomTreeWalker(node, root).next(false);\n const prevIsInline = isUndefined(prev) || isInlineContent(prev, schema);\n const nextIsInline = isUndefined(next) || isInlineContent(next, schema);\n return prevIsInline && nextIsInline;\n };\n const isBookmarkNode$2 = node => isSpan(node) && node.getAttribute('data-mce-type') === 'bookmark';\n const isKeepTextNode = (node, root, schema) => isText$b(node) && node.data.length > 0 && surroundedByInlineContent(node, root, schema);\n const isKeepElement = node => isElement$6(node) ? node.childNodes.length > 0 : false;\n const isDocument = node => isDocumentFragment(node) || isDocument$1(node);\n const trimNode = (dom, node, schema, root) => {\n var _a;\n const rootNode = root || node;\n if (isElement$6(node) && isBookmarkNode$2(node)) {\n return node;\n }\n const children = node.childNodes;\n for (let i = children.length - 1; i >= 0; i--) {\n trimNode(dom, children[i], schema, rootNode);\n }\n if (isElement$6(node)) {\n const currentChildren = node.childNodes;\n if (currentChildren.length === 1 && isBookmarkNode$2(currentChildren[0])) {\n (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(currentChildren[0], node);\n }\n }\n if (!isDocument(node) && !isContent$1(schema, node) && !isKeepElement(node) && !isKeepTextNode(node, rootNode, schema)) {\n dom.remove(node);\n }\n return node;\n };\n\n const makeMap$3 = Tools.makeMap;\n const attrsCharsRegExp = /[&<>\\\"\\u0060\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n const textCharsRegExp = /[<>&\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n const rawCharsRegExp = /[<>&\\\"\\']/g;\n const entityRegExp = /&#([a-z0-9]+);?|&([a-z0-9]+);/gi;\n const asciiMap = {\n 128: '\\u20AC',\n 130: '\\u201A',\n 131: '\\u0192',\n 132: '\\u201E',\n 133: '\\u2026',\n 134: '\\u2020',\n 135: '\\u2021',\n 136: '\\u02c6',\n 137: '\\u2030',\n 138: '\\u0160',\n 139: '\\u2039',\n 140: '\\u0152',\n 142: '\\u017d',\n 145: '\\u2018',\n 146: '\\u2019',\n 147: '\\u201C',\n 148: '\\u201D',\n 149: '\\u2022',\n 150: '\\u2013',\n 151: '\\u2014',\n 152: '\\u02DC',\n 153: '\\u2122',\n 154: '\\u0161',\n 155: '\\u203A',\n 156: '\\u0153',\n 158: '\\u017e',\n 159: '\\u0178'\n };\n const baseEntities = {\n '\"': '"',\n '\\'': ''',\n '<': '<',\n '>': '>',\n '&': '&',\n '`': '`'\n };\n const reverseEntities = {\n '<': '<',\n '>': '>',\n '&': '&',\n '"': '\"',\n ''': `'`\n };\n const nativeDecode = text => {\n const elm = SugarElement.fromTag('div').dom;\n elm.innerHTML = text;\n return elm.textContent || elm.innerText || text;\n };\n const buildEntitiesLookup = (items, radix) => {\n const lookup = {};\n if (items) {\n const itemList = items.split(',');\n radix = radix || 10;\n for (let i = 0; i < itemList.length; i += 2) {\n const chr = String.fromCharCode(parseInt(itemList[i], radix));\n if (!baseEntities[chr]) {\n const entity = '&' + itemList[i + 1] + ';';\n lookup[chr] = entity;\n lookup[entity] = chr;\n }\n }\n return lookup;\n } else {\n return undefined;\n }\n };\n const namedEntities = buildEntitiesLookup('50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,' + '5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,' + '5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,' + '5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,' + '68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,' + '6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,' + '6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,' + '75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,' + '7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,' + '7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,' + 'sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,' + 'st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,' + 't9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,' + 'tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,' + 'u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,' + '81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,' + '8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,' + '8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,' + '8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,' + '8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,' + 'nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,' + 'rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,' + 'Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,' + '80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,' + '811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro', 32);\n const encodeRaw = (text, attr) => text.replace(attr ? attrsCharsRegExp : textCharsRegExp, chr => {\n return baseEntities[chr] || chr;\n });\n const encodeAllRaw = text => ('' + text).replace(rawCharsRegExp, chr => {\n return baseEntities[chr] || chr;\n });\n const encodeNumeric = (text, attr) => text.replace(attr ? attrsCharsRegExp : textCharsRegExp, chr => {\n if (chr.length > 1) {\n return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n }\n return baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';';\n });\n const encodeNamed = (text, attr, entities) => {\n const resolveEntities = entities || namedEntities;\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, chr => {\n return baseEntities[chr] || resolveEntities[chr] || chr;\n });\n };\n const getEncodeFunc = (name, entities) => {\n const entitiesMap = buildEntitiesLookup(entities) || namedEntities;\n const encodeNamedAndNumeric = (text, attr) => text.replace(attr ? attrsCharsRegExp : textCharsRegExp, chr => {\n if (baseEntities[chr] !== undefined) {\n return baseEntities[chr];\n }\n if (entitiesMap[chr] !== undefined) {\n return entitiesMap[chr];\n }\n if (chr.length > 1) {\n return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n }\n return '&#' + chr.charCodeAt(0) + ';';\n });\n const encodeCustomNamed = (text, attr) => {\n return encodeNamed(text, attr, entitiesMap);\n };\n const nameMap = makeMap$3(name.replace(/\\+/g, ','));\n if (nameMap.named && nameMap.numeric) {\n return encodeNamedAndNumeric;\n }\n if (nameMap.named) {\n if (entities) {\n return encodeCustomNamed;\n }\n return encodeNamed;\n }\n if (nameMap.numeric) {\n return encodeNumeric;\n }\n return encodeRaw;\n };\n const decode = text => text.replace(entityRegExp, (all, numeric) => {\n if (numeric) {\n if (numeric.charAt(0).toLowerCase() === 'x') {\n numeric = parseInt(numeric.substr(1), 16);\n } else {\n numeric = parseInt(numeric, 10);\n }\n if (numeric > 65535) {\n numeric -= 65536;\n return String.fromCharCode(55296 + (numeric >> 10), 56320 + (numeric & 1023));\n }\n return asciiMap[numeric] || String.fromCharCode(numeric);\n }\n return reverseEntities[all] || namedEntities[all] || nativeDecode(all);\n });\n const Entities = {\n encodeRaw,\n encodeAllRaw,\n encodeNumeric,\n encodeNamed,\n getEncodeFunc,\n decode\n };\n\n const split$1 = (items, delim) => {\n items = Tools.trim(items);\n return items ? items.split(delim || ' ') : [];\n };\n const patternToRegExp = str => new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$');\n const isRegExp$1 = obj => isObject(obj) && obj.source && Object.prototype.toString.call(obj) === '[object RegExp]';\n const deepCloneElementRule = obj => {\n const helper = value => {\n if (isArray$1(value)) {\n return map$3(value, helper);\n } else if (isRegExp$1(value)) {\n return new RegExp(value.source, value.flags);\n } else if (isObject(value)) {\n return map$2(value, helper);\n } else {\n return value;\n }\n };\n return helper(obj);\n };\n\n const parseCustomElementsRules = value => {\n const customElementRegExp = /^(~)?(.+)$/;\n return bind$3(split$1(value, ','), rule => {\n const matches = customElementRegExp.exec(rule);\n if (matches) {\n const inline = matches[1] === '~';\n const cloneName = inline ? 'span' : 'div';\n const name = matches[2];\n return [{\n cloneName,\n name\n }];\n } else {\n return [];\n }\n });\n };\n\n const getGlobalAttributeSet = type => {\n return Object.freeze([\n 'id',\n 'accesskey',\n 'class',\n 'dir',\n 'lang',\n 'style',\n 'tabindex',\n 'title',\n 'role',\n ...type !== 'html4' ? [\n 'contenteditable',\n 'contextmenu',\n 'draggable',\n 'dropzone',\n 'hidden',\n 'spellcheck',\n 'translate',\n 'itemprop',\n 'itemscope',\n 'itemtype'\n ] : [],\n ...type !== 'html5-strict' ? ['xml:lang'] : []\n ]);\n };\n\n const getElementSetsAsStrings = type => {\n let blockContent;\n let phrasingContent;\n blockContent = 'address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul';\n phrasingContent = 'a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd ' + 'label map noscript object q s samp script select small span strong sub sup ' + 'textarea u var #text #comment';\n if (type !== 'html4') {\n const transparentContent = 'a ins del canvas map';\n blockContent += ' article aside details dialog figure main header footer hgroup section nav ' + transparentContent;\n phrasingContent += ' audio canvas command data datalist mark meter output picture ' + 'progress time wbr video ruby bdi keygen svg';\n }\n if (type !== 'html5-strict') {\n const html4PhrasingContent = 'acronym applet basefont big font strike tt';\n phrasingContent = [\n phrasingContent,\n html4PhrasingContent\n ].join(' ');\n const html4BlockContent = 'center dir isindex noframes';\n blockContent = [\n blockContent,\n html4BlockContent\n ].join(' ');\n }\n const flowContent = [\n blockContent,\n phrasingContent\n ].join(' ');\n return {\n blockContent,\n phrasingContent,\n flowContent\n };\n };\n const getElementSets = type => {\n const {blockContent, phrasingContent, flowContent} = getElementSetsAsStrings(type);\n const toArr = value => {\n return Object.freeze(value.split(' '));\n };\n return Object.freeze({\n blockContent: toArr(blockContent),\n phrasingContent: toArr(phrasingContent),\n flowContent: toArr(flowContent)\n });\n };\n\n const cachedSets = {\n 'html4': cached(() => getElementSets('html4')),\n 'html5': cached(() => getElementSets('html5')),\n 'html5-strict': cached(() => getElementSets('html5-strict'))\n };\n const getElementsPreset = (type, name) => {\n const {blockContent, phrasingContent, flowContent} = cachedSets[type]();\n if (name === 'blocks') {\n return Optional.some(blockContent);\n } else if (name === 'phrasing') {\n return Optional.some(phrasingContent);\n } else if (name === 'flow') {\n return Optional.some(flowContent);\n } else {\n return Optional.none();\n }\n };\n\n const makeSchema = type => {\n const globalAttributes = getGlobalAttributeSet(type);\n const {phrasingContent, flowContent} = getElementSetsAsStrings(type);\n const schema = {};\n const addElement = (name, attributes, children) => {\n schema[name] = {\n attributes: mapToObject(attributes, constant({})),\n attributesOrder: attributes,\n children: mapToObject(children, constant({}))\n };\n };\n const add = (name, attributes = '', children = '') => {\n const childNames = split$1(children);\n const names = split$1(name);\n let ni = names.length;\n const allAttributes = [\n ...globalAttributes,\n ...split$1(attributes)\n ];\n while (ni--) {\n addElement(names[ni], allAttributes.slice(), childNames);\n }\n };\n const addAttrs = (name, attributes) => {\n const names = split$1(name);\n const attrs = split$1(attributes);\n let ni = names.length;\n while (ni--) {\n const schemaItem = schema[names[ni]];\n for (let i = 0, l = attrs.length; i < l; i++) {\n schemaItem.attributes[attrs[i]] = {};\n schemaItem.attributesOrder.push(attrs[i]);\n }\n }\n };\n if (type !== 'html5-strict') {\n const html4PhrasingContent = 'acronym applet basefont big font strike tt';\n each$e(split$1(html4PhrasingContent), name => {\n add(name, '', phrasingContent);\n });\n const html4BlockContent = 'center dir isindex noframes';\n each$e(split$1(html4BlockContent), name => {\n add(name, '', flowContent);\n });\n }\n add('html', 'manifest', 'head body');\n add('head', '', 'base command link meta noscript script style title');\n add('title hr noscript br');\n add('base', 'href target');\n add('link', 'href rel media hreflang type sizes hreflang');\n add('meta', 'name http-equiv content charset');\n add('style', 'media type scoped');\n add('script', 'src async defer type charset');\n add('body', 'onafterprint onbeforeprint onbeforeunload onblur onerror onfocus ' + 'onhashchange onload onmessage onoffline ononline onpagehide onpageshow ' + 'onpopstate onresize onscroll onstorage onunload', flowContent);\n add('dd div', '', flowContent);\n add('address dt caption', '', type === 'html4' ? phrasingContent : flowContent);\n add('h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn', '', phrasingContent);\n add('blockquote', 'cite', flowContent);\n add('ol', 'reversed start type', 'li');\n add('ul', '', 'li');\n add('li', 'value', flowContent);\n add('dl', '', 'dt dd');\n add('a', 'href target rel media hreflang type', type === 'html4' ? phrasingContent : flowContent);\n add('q', 'cite', phrasingContent);\n add('ins del', 'cite datetime', flowContent);\n add('img', 'src sizes srcset alt usemap ismap width height');\n add('iframe', 'src name width height', flowContent);\n add('embed', 'src type width height');\n add('object', 'data type typemustmatch name usemap form width height', [\n flowContent,\n 'param'\n ].join(' '));\n add('param', 'name value');\n add('map', 'name', [\n flowContent,\n 'area'\n ].join(' '));\n add('area', 'alt coords shape href target rel media hreflang type');\n add('table', 'border', 'caption colgroup thead tfoot tbody tr' + (type === 'html4' ? ' col' : ''));\n add('colgroup', 'span', 'col');\n add('col', 'span');\n add('tbody thead tfoot', '', 'tr');\n add('tr', '', 'td th');\n add('td', 'colspan rowspan headers', flowContent);\n add('th', 'colspan rowspan headers scope abbr', flowContent);\n add('form', 'accept-charset action autocomplete enctype method name novalidate target', flowContent);\n add('fieldset', 'disabled form name', [\n flowContent,\n 'legend'\n ].join(' '));\n add('label', 'form for', phrasingContent);\n add('input', 'accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate ' + 'formtarget height list max maxlength min multiple name pattern readonly required size src step type value width');\n add('button', 'disabled form formaction formenctype formmethod formnovalidate formtarget name type value', type === 'html4' ? flowContent : phrasingContent);\n add('select', 'disabled form multiple name required size', 'option optgroup');\n add('optgroup', 'disabled label', 'option');\n add('option', 'disabled label selected value');\n add('textarea', 'cols dirname disabled form maxlength name readonly required rows wrap');\n add('menu', 'type label', [\n flowContent,\n 'li'\n ].join(' '));\n add('noscript', '', flowContent);\n if (type !== 'html4') {\n add('wbr');\n add('ruby', '', [\n phrasingContent,\n 'rt rp'\n ].join(' '));\n add('figcaption', '', flowContent);\n add('mark rt rp bdi', '', phrasingContent);\n add('summary', '', [\n phrasingContent,\n 'h1 h2 h3 h4 h5 h6'\n ].join(' '));\n add('canvas', 'width height', flowContent);\n add('data', 'value', phrasingContent);\n add('video', 'src crossorigin poster preload autoplay mediagroup loop ' + 'muted controls width height buffered', [\n flowContent,\n 'track source'\n ].join(' '));\n add('audio', 'src crossorigin preload autoplay mediagroup loop muted controls ' + 'buffered volume', [\n flowContent,\n 'track source'\n ].join(' '));\n add('picture', '', 'img source');\n add('source', 'src srcset type media sizes');\n add('track', 'kind src srclang label default');\n add('datalist', '', [\n phrasingContent,\n 'option'\n ].join(' '));\n add('article section nav aside main header footer', '', flowContent);\n add('hgroup', '', 'h1 h2 h3 h4 h5 h6');\n add('figure', '', [\n flowContent,\n 'figcaption'\n ].join(' '));\n add('time', 'datetime', phrasingContent);\n add('dialog', 'open', flowContent);\n add('command', 'type label icon disabled checked radiogroup command');\n add('output', 'for form name', phrasingContent);\n add('progress', 'value max', phrasingContent);\n add('meter', 'value min max low high optimum', phrasingContent);\n add('details', 'open', [\n flowContent,\n 'summary'\n ].join(' '));\n add('keygen', 'autofocus challenge disabled form keytype name');\n addElement('svg', 'id tabindex lang xml:space class style x y width height viewBox preserveAspectRatio zoomAndPan transform'.split(' '), []);\n }\n if (type !== 'html5-strict') {\n addAttrs('script', 'language xml:space');\n addAttrs('style', 'xml:space');\n addAttrs('object', 'declare classid code codebase codetype archive standby align border hspace vspace');\n addAttrs('embed', 'align name hspace vspace');\n addAttrs('param', 'valuetype type');\n addAttrs('a', 'charset name rev shape coords');\n addAttrs('br', 'clear');\n addAttrs('applet', 'codebase archive code object alt name width height align hspace vspace');\n addAttrs('img', 'name longdesc align border hspace vspace');\n addAttrs('iframe', 'longdesc frameborder marginwidth marginheight scrolling align');\n addAttrs('font basefont', 'size color face');\n addAttrs('input', 'usemap align');\n addAttrs('select');\n addAttrs('textarea');\n addAttrs('h1 h2 h3 h4 h5 h6 div p legend caption', 'align');\n addAttrs('ul', 'type compact');\n addAttrs('li', 'type');\n addAttrs('ol dl menu dir', 'compact');\n addAttrs('pre', 'width xml:space');\n addAttrs('hr', 'align noshade size width');\n addAttrs('isindex', 'prompt');\n addAttrs('table', 'summary width frame rules cellspacing cellpadding align bgcolor');\n addAttrs('col', 'width align char charoff valign');\n addAttrs('colgroup', 'width align char charoff valign');\n addAttrs('thead', 'align char charoff valign');\n addAttrs('tr', 'align char charoff valign bgcolor');\n addAttrs('th', 'axis align char charoff valign nowrap bgcolor width height');\n addAttrs('form', 'accept');\n addAttrs('td', 'abbr axis scope align char charoff valign nowrap bgcolor width height');\n addAttrs('tfoot', 'align char charoff valign');\n addAttrs('tbody', 'align char charoff valign');\n addAttrs('area', 'nohref');\n addAttrs('body', 'background bgcolor text link vlink alink');\n }\n if (type !== 'html4') {\n addAttrs('input button select textarea', 'autofocus');\n addAttrs('input textarea', 'placeholder');\n addAttrs('a', 'download');\n addAttrs('link script img', 'crossorigin');\n addAttrs('img', 'loading');\n addAttrs('iframe', 'sandbox seamless allow allowfullscreen loading referrerpolicy');\n }\n if (type !== 'html4') {\n each$e([\n schema.video,\n schema.audio\n ], item => {\n delete item.children.audio;\n delete item.children.video;\n });\n }\n each$e(split$1('a form meter progress dfn'), name => {\n if (schema[name]) {\n delete schema[name].children[name];\n }\n });\n delete schema.caption.children.table;\n delete schema.script;\n return schema;\n };\n\n const prefixToOperation = prefix => prefix === '-' ? 'remove' : 'add';\n const parseValidChild = name => {\n const validChildRegExp = /^(@?)([A-Za-z0-9_\\-.\\u00b7\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u037d\\u037f-\\u1fff\\u200c-\\u200d\\u203f-\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]+)$/;\n return Optional.from(validChildRegExp.exec(name)).map(matches => ({\n preset: matches[1] === '@',\n name: matches[2]\n }));\n };\n const parseValidChildrenRules = value => {\n const childRuleRegExp = /^([+\\-]?)([A-Za-z0-9_\\-.\\u00b7\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u037d\\u037f-\\u1fff\\u200c-\\u200d\\u203f-\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]+)\\[([^\\]]+)]$/;\n return bind$3(split$1(value, ','), rule => {\n const matches = childRuleRegExp.exec(rule);\n if (matches) {\n const prefix = matches[1];\n const operation = prefix ? prefixToOperation(prefix) : 'replace';\n const name = matches[2];\n const validChildren = bind$3(split$1(matches[3], '|'), validChild => parseValidChild(validChild).toArray());\n return [{\n operation,\n name,\n validChildren\n }];\n } else {\n return [];\n }\n });\n };\n\n const parseValidElementsAttrDataIntoElement = (attrData, targetElement) => {\n const attrRuleRegExp = /^([!\\-])?(\\w+[\\\\:]:\\w+|[^=~<]+)?(?:([=~<])(.*))?$/;\n const hasPatternsRegExp = /[*?+]/;\n const {attributes, attributesOrder} = targetElement;\n return each$e(split$1(attrData, '|'), rule => {\n const matches = attrRuleRegExp.exec(rule);\n if (matches) {\n const attr = {};\n const attrType = matches[1];\n const attrName = matches[2].replace(/[\\\\:]:/g, ':');\n const attrPrefix = matches[3];\n const value = matches[4];\n if (attrType === '!') {\n targetElement.attributesRequired = targetElement.attributesRequired || [];\n targetElement.attributesRequired.push(attrName);\n attr.required = true;\n }\n if (attrType === '-') {\n delete attributes[attrName];\n attributesOrder.splice(Tools.inArray(attributesOrder, attrName), 1);\n return;\n }\n if (attrPrefix) {\n if (attrPrefix === '=') {\n targetElement.attributesDefault = targetElement.attributesDefault || [];\n targetElement.attributesDefault.push({\n name: attrName,\n value\n });\n attr.defaultValue = value;\n } else if (attrPrefix === '~') {\n targetElement.attributesForced = targetElement.attributesForced || [];\n targetElement.attributesForced.push({\n name: attrName,\n value\n });\n attr.forcedValue = value;\n } else if (attrPrefix === '<') {\n attr.validValues = Tools.makeMap(value, '?');\n }\n }\n if (hasPatternsRegExp.test(attrName)) {\n const attrPattern = attr;\n targetElement.attributePatterns = targetElement.attributePatterns || [];\n attrPattern.pattern = patternToRegExp(attrName);\n targetElement.attributePatterns.push(attrPattern);\n } else {\n if (!attributes[attrName]) {\n attributesOrder.push(attrName);\n }\n attributes[attrName] = attr;\n }\n }\n });\n };\n const cloneAttributesInto = (from, to) => {\n each$d(from.attributes, (value, key) => {\n to.attributes[key] = value;\n });\n to.attributesOrder.push(...from.attributesOrder);\n };\n const parseValidElementsRules = (globalElement, validElements) => {\n const elementRuleRegExp = /^([#+\\-])?([^\\[!\\/]+)(?:\\/([^\\[!]+))?(?:(!?)\\[([^\\]]+)])?$/;\n return bind$3(split$1(validElements, ','), rule => {\n const matches = elementRuleRegExp.exec(rule);\n if (matches) {\n const prefix = matches[1];\n const elementName = matches[2];\n const outputName = matches[3];\n const attrsPrefix = matches[4];\n const attrData = matches[5];\n const element = {\n attributes: {},\n attributesOrder: []\n };\n globalElement.each(el => cloneAttributesInto(el, element));\n if (prefix === '#') {\n element.paddEmpty = true;\n } else if (prefix === '-') {\n element.removeEmpty = true;\n }\n if (attrsPrefix === '!') {\n element.removeEmptyAttrs = true;\n }\n if (attrData) {\n parseValidElementsAttrDataIntoElement(attrData, element);\n }\n if (outputName) {\n element.outputName = elementName;\n }\n if (elementName === '@') {\n if (globalElement.isNone()) {\n globalElement = Optional.some(element);\n } else {\n return [];\n }\n }\n return [outputName ? {\n name: elementName,\n element,\n aliasName: outputName\n } : {\n name: elementName,\n element\n }];\n } else {\n return [];\n }\n });\n };\n\n const mapCache = {};\n const makeMap$2 = Tools.makeMap, each$b = Tools.each, extend$2 = Tools.extend, explode$2 = Tools.explode;\n const createMap = (defaultValue, extendWith = {}) => {\n const value = makeMap$2(defaultValue, ' ', makeMap$2(defaultValue.toUpperCase(), ' '));\n return extend$2(value, extendWith);\n };\n const getTextRootBlockElements = schema => createMap('td th li dt dd figcaption caption details summary', schema.getTextBlockElements());\n const compileElementMap = (value, mode) => {\n if (value) {\n const styles = {};\n if (isString(value)) {\n value = { '*': value };\n }\n each$b(value, (value, key) => {\n styles[key] = styles[key.toUpperCase()] = mode === 'map' ? makeMap$2(value, /[, ]/) : explode$2(value, /[, ]/);\n });\n return styles;\n } else {\n return undefined;\n }\n };\n const Schema = (settings = {}) => {\n var _a;\n const elements = {};\n const children = {};\n let patternElements = [];\n const customElementsMap = {};\n const specialElements = {};\n const createLookupTable = (option, defaultValue, extendWith) => {\n const value = settings[option];\n if (!value) {\n let newValue = mapCache[option];\n if (!newValue) {\n newValue = createMap(defaultValue, extendWith);\n mapCache[option] = newValue;\n }\n return newValue;\n } else {\n return makeMap$2(value, /[, ]/, makeMap$2(value.toUpperCase(), /[, ]/));\n }\n };\n const schemaType = (_a = settings.schema) !== null && _a !== void 0 ? _a : 'html5';\n const schemaItems = makeSchema(schemaType);\n if (settings.verify_html === false) {\n settings.valid_elements = '*[*]';\n }\n const validStyles = compileElementMap(settings.valid_styles);\n const invalidStyles = compileElementMap(settings.invalid_styles, 'map');\n const validClasses = compileElementMap(settings.valid_classes, 'map');\n const whitespaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code');\n const selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');\n const voidElementsMap = createLookupTable('void_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track');\n const boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls allowfullscreen');\n const nonEmptyOrMoveCaretBeforeOnEnter = 'td th iframe video audio object script code';\n const nonEmptyElementsMap = createLookupTable('non_empty_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' pre svg textarea summary', voidElementsMap);\n const moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' table', voidElementsMap);\n const headings = 'h1 h2 h3 h4 h5 h6';\n const textBlockElementsMap = createLookupTable('text_block_elements', headings + ' p div address pre form ' + 'blockquote center dir fieldset header footer article section hgroup aside main nav figure');\n const blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + 'th tr td li ol ul caption dl dt dd noscript menu isindex option ' + 'datalist select optgroup figcaption details summary html body multicol listing', textBlockElementsMap);\n const textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font s strike u var cite ' + 'dfn code mark q sup sub samp');\n const transparentElementsMap = createLookupTable('transparent_elements', 'a ins del canvas map');\n const wrapBlockElementsMap = createLookupTable('wrap_block_elements', 'pre ' + headings);\n each$b('script noscript iframe noframes noembed title style textarea xmp plaintext'.split(' '), name => {\n specialElements[name] = new RegExp(']*>', 'gi');\n });\n const addValidElements = validElements => {\n const globalElement = Optional.from(elements['@']);\n const hasPatternsRegExp = /[*?+]/;\n each$e(parseValidElementsRules(globalElement, validElements !== null && validElements !== void 0 ? validElements : ''), ({name, element, aliasName}) => {\n if (aliasName) {\n elements[aliasName] = element;\n }\n if (hasPatternsRegExp.test(name)) {\n const patternElement = element;\n patternElement.pattern = patternToRegExp(name);\n patternElements.push(patternElement);\n } else {\n elements[name] = element;\n }\n });\n };\n const setValidElements = validElements => {\n patternElements = [];\n each$e(keys(elements), name => {\n delete elements[name];\n });\n addValidElements(validElements);\n };\n const addCustomElement = (name, spec) => {\n var _a, _b;\n delete mapCache.text_block_elements;\n delete mapCache.block_elements;\n const inline = spec.extends ? !isBlock(spec.extends) : false;\n const cloneName = spec.extends;\n children[name] = cloneName ? children[cloneName] : {};\n customElementsMap[name] = cloneName !== null && cloneName !== void 0 ? cloneName : name;\n nonEmptyElementsMap[name.toUpperCase()] = {};\n nonEmptyElementsMap[name] = {};\n if (!inline) {\n blockElementsMap[name.toUpperCase()] = {};\n blockElementsMap[name] = {};\n }\n if (cloneName && !elements[name] && elements[cloneName]) {\n const customRule = deepCloneElementRule(elements[cloneName]);\n delete customRule.removeEmptyAttrs;\n delete customRule.removeEmpty;\n elements[name] = customRule;\n } else {\n elements[name] = {\n attributesOrder: [],\n attributes: {}\n };\n }\n if (isArray$1(spec.attributes)) {\n const processAttrName = name => {\n customRule.attributesOrder.push(name);\n customRule.attributes[name] = {};\n };\n const customRule = (_a = elements[name]) !== null && _a !== void 0 ? _a : {};\n delete customRule.attributesDefault;\n delete customRule.attributesForced;\n delete customRule.attributePatterns;\n delete customRule.attributesRequired;\n customRule.attributesOrder = [];\n customRule.attributes = {};\n each$e(spec.attributes, attrName => {\n const globalAttrs = getGlobalAttributeSet(schemaType);\n parseValidChild(attrName).each(({preset, name}) => {\n if (preset) {\n if (name === 'global') {\n each$e(globalAttrs, processAttrName);\n }\n } else {\n processAttrName(name);\n }\n });\n });\n elements[name] = customRule;\n }\n if (isBoolean(spec.padEmpty)) {\n const customRule = (_b = elements[name]) !== null && _b !== void 0 ? _b : {};\n customRule.paddEmpty = spec.padEmpty;\n elements[name] = customRule;\n }\n if (isArray$1(spec.children)) {\n const customElementChildren = {};\n const processNodeName = name => {\n customElementChildren[name] = {};\n };\n const processPreset = name => {\n getElementsPreset(schemaType, name).each(names => {\n each$e(names, processNodeName);\n });\n };\n each$e(spec.children, child => {\n parseValidChild(child).each(({preset, name}) => {\n if (preset) {\n processPreset(name);\n } else {\n processNodeName(name);\n }\n });\n });\n children[name] = customElementChildren;\n }\n if (cloneName) {\n each$d(children, (element, elmName) => {\n if (element[cloneName]) {\n children[elmName] = element = extend$2({}, children[elmName]);\n element[name] = element[cloneName];\n }\n });\n }\n };\n const addCustomElementsFromString = customElements => {\n each$e(parseCustomElementsRules(customElements !== null && customElements !== void 0 ? customElements : ''), ({name, cloneName}) => {\n addCustomElement(name, { extends: cloneName });\n });\n };\n const addCustomElements = customElements => {\n if (isObject(customElements)) {\n each$d(customElements, (spec, name) => addCustomElement(name, spec));\n } else if (isString(customElements)) {\n addCustomElementsFromString(customElements);\n }\n };\n const addValidChildren = validChildren => {\n each$e(parseValidChildrenRules(validChildren !== null && validChildren !== void 0 ? validChildren : ''), ({operation, name, validChildren}) => {\n const parent = operation === 'replace' ? { '#comment': {} } : children[name];\n const processNodeName = name => {\n if (operation === 'remove') {\n delete parent[name];\n } else {\n parent[name] = {};\n }\n };\n const processPreset = name => {\n getElementsPreset(schemaType, name).each(names => {\n each$e(names, processNodeName);\n });\n };\n each$e(validChildren, ({preset, name}) => {\n if (preset) {\n processPreset(name);\n } else {\n processNodeName(name);\n }\n });\n children[name] = parent;\n });\n };\n const getElementRule = name => {\n const element = elements[name];\n if (element) {\n return element;\n }\n let i = patternElements.length;\n while (i--) {\n const patternElement = patternElements[i];\n if (patternElement.pattern.test(name)) {\n return patternElement;\n }\n }\n return undefined;\n };\n const setup = () => {\n if (!settings.valid_elements) {\n each$b(schemaItems, (element, name) => {\n elements[name] = {\n attributes: element.attributes,\n attributesOrder: element.attributesOrder\n };\n children[name] = element.children;\n });\n each$b(split$1('strong/b em/i'), item => {\n const items = split$1(item, '/');\n elements[items[1]].outputName = items[0];\n });\n each$b(textInlineElementsMap, (_val, name) => {\n if (elements[name]) {\n if (settings.padd_empty_block_inline_children) {\n elements[name].paddInEmptyBlock = true;\n }\n elements[name].removeEmpty = true;\n }\n });\n each$b(split$1('ol ul blockquote a table tbody'), name => {\n if (elements[name]) {\n elements[name].removeEmpty = true;\n }\n });\n each$b(split$1('p h1 h2 h3 h4 h5 h6 th td pre div address caption li summary'), name => {\n if (elements[name]) {\n elements[name].paddEmpty = true;\n }\n });\n each$b(split$1('span'), name => {\n elements[name].removeEmptyAttrs = true;\n });\n } else {\n setValidElements(settings.valid_elements);\n each$b(schemaItems, (element, name) => {\n children[name] = element.children;\n });\n }\n delete elements.svg;\n addCustomElements(settings.custom_elements);\n addValidChildren(settings.valid_children);\n addValidElements(settings.extended_valid_elements);\n addValidChildren('+ol[ul|ol],+ul[ul|ol]');\n each$b({\n dd: 'dl',\n dt: 'dl',\n li: 'ul ol',\n td: 'tr',\n th: 'tr',\n tr: 'tbody thead tfoot',\n tbody: 'table',\n thead: 'table',\n tfoot: 'table',\n legend: 'fieldset',\n area: 'map',\n param: 'video audio object'\n }, (parents, item) => {\n if (elements[item]) {\n elements[item].parentsRequired = split$1(parents);\n }\n });\n if (settings.invalid_elements) {\n each$b(explode$2(settings.invalid_elements), item => {\n if (elements[item]) {\n delete elements[item];\n }\n });\n }\n if (!getElementRule('span')) {\n addValidElements('span[!data-mce-type|*]');\n }\n };\n const getValidStyles = constant(validStyles);\n const getInvalidStyles = constant(invalidStyles);\n const getValidClasses = constant(validClasses);\n const getBoolAttrs = constant(boolAttrMap);\n const getBlockElements = constant(blockElementsMap);\n const getTextBlockElements = constant(textBlockElementsMap);\n const getTextInlineElements = constant(textInlineElementsMap);\n const getVoidElements = constant(Object.seal(voidElementsMap));\n const getSelfClosingElements = constant(selfClosingElementsMap);\n const getNonEmptyElements = constant(nonEmptyElementsMap);\n const getMoveCaretBeforeOnEnterElements = constant(moveCaretBeforeOnEnterElementsMap);\n const getWhitespaceElements = constant(whitespaceElementsMap);\n const getTransparentElements = constant(transparentElementsMap);\n const getWrapBlockElements = constant(wrapBlockElementsMap);\n const getSpecialElements = constant(Object.seal(specialElements));\n const isValidChild = (name, child) => {\n const parent = children[name.toLowerCase()];\n return !!(parent && parent[child.toLowerCase()]);\n };\n const isValid = (name, attr) => {\n const rule = getElementRule(name);\n if (rule) {\n if (attr) {\n if (rule.attributes[attr]) {\n return true;\n }\n const attrPatterns = rule.attributePatterns;\n if (attrPatterns) {\n let i = attrPatterns.length;\n while (i--) {\n if (attrPatterns[i].pattern.test(attr)) {\n return true;\n }\n }\n }\n } else {\n return true;\n }\n }\n return false;\n };\n const isBlock = name => has$2(getBlockElements(), name);\n const isInline = name => !startsWith(name, '#') && isValid(name) && !isBlock(name);\n const isWrapper = name => has$2(getWrapBlockElements(), name) || isInline(name);\n const getCustomElements = constant(customElementsMap);\n setup();\n return {\n type: schemaType,\n children,\n elements,\n getValidStyles,\n getValidClasses,\n getBlockElements,\n getInvalidStyles,\n getVoidElements,\n getTextBlockElements,\n getTextInlineElements,\n getBoolAttrs,\n getElementRule,\n getSelfClosingElements,\n getNonEmptyElements,\n getMoveCaretBeforeOnEnterElements,\n getWhitespaceElements,\n getTransparentElements,\n getSpecialElements,\n isValidChild,\n isValid,\n isBlock,\n isInline,\n isWrapper,\n getCustomElements,\n addValidElements,\n setValidElements,\n addCustomElements,\n addValidChildren\n };\n };\n\n const hexColour = value => ({ value: normalizeHex(value) });\n const normalizeHex = hex => removeLeading(hex, '#').toUpperCase();\n const toHex = component => {\n const hex = component.toString(16);\n return (hex.length === 1 ? '0' + hex : hex).toUpperCase();\n };\n const fromRgba = rgbaColour => {\n const value = toHex(rgbaColour.red) + toHex(rgbaColour.green) + toHex(rgbaColour.blue);\n return hexColour(value);\n };\n\n const rgbRegex = /^\\s*rgb\\s*\\(\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*\\)\\s*$/i;\n const rgbaRegex = /^\\s*rgba\\s*\\(\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*[,\\s]\\s*((?:\\d?\\.\\d+|\\d+)%?)\\s*\\)\\s*$/i;\n const rgbaColour = (red, green, blue, alpha) => ({\n red,\n green,\n blue,\n alpha\n });\n const fromStringValues = (red, green, blue, alpha) => {\n const r = parseInt(red, 10);\n const g = parseInt(green, 10);\n const b = parseInt(blue, 10);\n const a = parseFloat(alpha);\n return rgbaColour(r, g, b, a);\n };\n const getColorFormat = colorString => {\n if (rgbRegex.test(colorString)) {\n return 'rgb';\n } else if (rgbaRegex.test(colorString)) {\n return 'rgba';\n }\n return 'other';\n };\n const fromString = rgbaString => {\n const rgbMatch = rgbRegex.exec(rgbaString);\n if (rgbMatch !== null) {\n return Optional.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], '1'));\n }\n const rgbaMatch = rgbaRegex.exec(rgbaString);\n if (rgbaMatch !== null) {\n return Optional.some(fromStringValues(rgbaMatch[1], rgbaMatch[2], rgbaMatch[3], rgbaMatch[4]));\n }\n return Optional.none();\n };\n const toString = rgba => `rgba(${ rgba.red },${ rgba.green },${ rgba.blue },${ rgba.alpha })`;\n\n const rgbaToHexString = color => fromString(color).map(fromRgba).map(h => '#' + h.value).getOr(color);\n\n const Styles = (settings = {}, schema) => {\n const urlOrStrRegExp = /(?:url(?:(?:\\(\\s*\\\"([^\\\"]+)\\\"\\s*\\))|(?:\\(\\s*\\'([^\\']+)\\'\\s*\\))|(?:\\(\\s*([^)\\s]+)\\s*\\))))|(?:\\'([^\\']+)\\')|(?:\\\"([^\\\"]+)\\\")/gi;\n const styleRegExp = /\\s*([^:]+):\\s*([^;]+);?/g;\n const trimRightRegExp = /\\s+$/;\n const encodingLookup = {};\n let validStyles;\n let invalidStyles;\n const invisibleChar = zeroWidth;\n if (schema) {\n validStyles = schema.getValidStyles();\n invalidStyles = schema.getInvalidStyles();\n }\n const encodingItems = (`\\\\\" \\\\' \\\\; \\\\: ; : ` + invisibleChar).split(' ');\n for (let i = 0; i < encodingItems.length; i++) {\n encodingLookup[encodingItems[i]] = invisibleChar + i;\n encodingLookup[invisibleChar + i] = encodingItems[i];\n }\n const self = {\n parse: css => {\n const styles = {};\n let isEncoded = false;\n const urlConverter = settings.url_converter;\n const urlConverterScope = settings.url_converter_scope || self;\n const compress = (prefix, suffix, noJoin) => {\n const top = styles[prefix + '-top' + suffix];\n if (!top) {\n return;\n }\n const right = styles[prefix + '-right' + suffix];\n if (!right) {\n return;\n }\n const bottom = styles[prefix + '-bottom' + suffix];\n if (!bottom) {\n return;\n }\n const left = styles[prefix + '-left' + suffix];\n if (!left) {\n return;\n }\n const box = [\n top,\n right,\n bottom,\n left\n ];\n let i = box.length - 1;\n while (i--) {\n if (box[i] !== box[i + 1]) {\n break;\n }\n }\n if (i > -1 && noJoin) {\n return;\n }\n styles[prefix + suffix] = i === -1 ? box[0] : box.join(' ');\n delete styles[prefix + '-top' + suffix];\n delete styles[prefix + '-right' + suffix];\n delete styles[prefix + '-bottom' + suffix];\n delete styles[prefix + '-left' + suffix];\n };\n const canCompress = key => {\n const value = styles[key];\n if (!value) {\n return;\n }\n const values = value.indexOf(',') > -1 ? [value] : value.split(' ');\n let i = values.length;\n while (i--) {\n if (values[i] !== values[0]) {\n return false;\n }\n }\n styles[key] = values[0];\n return true;\n };\n const compress2 = (target, a, b, c) => {\n if (!canCompress(a)) {\n return;\n }\n if (!canCompress(b)) {\n return;\n }\n if (!canCompress(c)) {\n return;\n }\n styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c];\n delete styles[a];\n delete styles[b];\n delete styles[c];\n };\n const encode = str => {\n isEncoded = true;\n return encodingLookup[str];\n };\n const decode = (str, keepSlashes) => {\n if (isEncoded) {\n str = str.replace(/\\uFEFF[0-9]/g, str => {\n return encodingLookup[str];\n });\n }\n if (!keepSlashes) {\n str = str.replace(/\\\\([\\'\\\";:])/g, '$1');\n }\n return str;\n };\n const decodeSingleHexSequence = escSeq => {\n return String.fromCharCode(parseInt(escSeq.slice(1), 16));\n };\n const decodeHexSequences = value => {\n return value.replace(/\\\\[0-9a-f]+/gi, decodeSingleHexSequence);\n };\n const processUrl = (match, url, url2, url3, str, str2) => {\n str = str || str2;\n if (str) {\n str = decode(str);\n return `'` + str.replace(/\\'/g, `\\\\'`) + `'`;\n }\n url = decode(url || url2 || url3 || '');\n if (!settings.allow_script_urls) {\n const scriptUrl = url.replace(/[\\s\\r\\n]+/g, '');\n if (/(java|vb)script:/i.test(scriptUrl)) {\n return '';\n }\n if (!settings.allow_svg_data_urls && /^data:image\\/svg/i.test(scriptUrl)) {\n return '';\n }\n }\n if (urlConverter) {\n url = urlConverter.call(urlConverterScope, url, 'style');\n }\n return `url('` + url.replace(/\\'/g, `\\\\'`) + `')`;\n };\n if (css) {\n css = css.replace(/[\\u0000-\\u001F]/g, '');\n css = css.replace(/\\\\[\\\"\\';:\\uFEFF]/g, encode).replace(/\\\"[^\\\"]+\\\"|\\'[^\\']+\\'/g, str => {\n return str.replace(/[;:]/g, encode);\n });\n let matches;\n while (matches = styleRegExp.exec(css)) {\n styleRegExp.lastIndex = matches.index + matches[0].length;\n let name = matches[1].replace(trimRightRegExp, '').toLowerCase();\n let value = matches[2].replace(trimRightRegExp, '');\n if (name && value) {\n name = decodeHexSequences(name);\n value = decodeHexSequences(value);\n if (name.indexOf(invisibleChar) !== -1 || name.indexOf('\"') !== -1) {\n continue;\n }\n if (!settings.allow_script_urls && (name === 'behavior' || /expression\\s*\\(|\\/\\*|\\*\\//.test(value))) {\n continue;\n }\n if (name === 'font-weight' && value === '700') {\n value = 'bold';\n } else if (name === 'color' || name === 'background-color') {\n value = value.toLowerCase();\n }\n if (getColorFormat(value) === 'rgb') {\n fromString(value).each(rgba => {\n value = rgbaToHexString(toString(rgba)).toLowerCase();\n });\n }\n value = value.replace(urlOrStrRegExp, processUrl);\n styles[name] = isEncoded ? decode(value, true) : value;\n }\n }\n compress('border', '', true);\n compress('border', '-width');\n compress('border', '-color');\n compress('border', '-style');\n compress('padding', '');\n compress('margin', '');\n compress2('border', 'border-width', 'border-style', 'border-color');\n if (styles.border === 'medium none') {\n delete styles.border;\n }\n if (styles['border-image'] === 'none') {\n delete styles['border-image'];\n }\n }\n return styles;\n },\n serialize: (styles, elementName) => {\n let css = '';\n const serializeStyles = (elemName, validStyleList) => {\n const styleList = validStyleList[elemName];\n if (styleList) {\n for (let i = 0, l = styleList.length; i < l; i++) {\n const name = styleList[i];\n const value = styles[name];\n if (value) {\n css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n }\n }\n }\n };\n const isValid = (name, elemName) => {\n if (!invalidStyles || !elemName) {\n return true;\n }\n let styleMap = invalidStyles['*'];\n if (styleMap && styleMap[name]) {\n return false;\n }\n styleMap = invalidStyles[elemName];\n return !(styleMap && styleMap[name]);\n };\n if (elementName && validStyles) {\n serializeStyles('*', validStyles);\n serializeStyles(elementName, validStyles);\n } else {\n each$d(styles, (value, name) => {\n if (value && isValid(name, elementName)) {\n css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n }\n });\n }\n return css;\n }\n };\n return self;\n };\n\n const deprecated = {\n keyLocation: true,\n layerX: true,\n layerY: true,\n returnValue: true,\n webkitMovementX: true,\n webkitMovementY: true,\n keyIdentifier: true,\n mozPressure: true\n };\n const isNativeEvent = event => event instanceof Event || isFunction(event.initEvent);\n const hasIsDefaultPrevented = event => event.isDefaultPrevented === always || event.isDefaultPrevented === never;\n const needsNormalizing = event => isNullable(event.preventDefault) || isNativeEvent(event);\n const clone$3 = (originalEvent, data) => {\n const event = data !== null && data !== void 0 ? data : {};\n for (const name in originalEvent) {\n if (!has$2(deprecated, name)) {\n event[name] = originalEvent[name];\n }\n }\n if (isNonNullable(originalEvent.composedPath)) {\n event.composedPath = () => originalEvent.composedPath();\n }\n if (isNonNullable(originalEvent.getModifierState)) {\n event.getModifierState = keyArg => originalEvent.getModifierState(keyArg);\n }\n if (isNonNullable(originalEvent.getTargetRanges)) {\n event.getTargetRanges = () => originalEvent.getTargetRanges();\n }\n return event;\n };\n const normalize$3 = (type, originalEvent, fallbackTarget, data) => {\n var _a;\n const event = clone$3(originalEvent, data);\n event.type = type;\n if (isNullable(event.target)) {\n event.target = (_a = event.srcElement) !== null && _a !== void 0 ? _a : fallbackTarget;\n }\n if (needsNormalizing(originalEvent)) {\n event.preventDefault = () => {\n event.defaultPrevented = true;\n event.isDefaultPrevented = always;\n if (isFunction(originalEvent.preventDefault)) {\n originalEvent.preventDefault();\n }\n };\n event.stopPropagation = () => {\n event.cancelBubble = true;\n event.isPropagationStopped = always;\n if (isFunction(originalEvent.stopPropagation)) {\n originalEvent.stopPropagation();\n }\n };\n event.stopImmediatePropagation = () => {\n event.isImmediatePropagationStopped = always;\n event.stopPropagation();\n };\n if (!hasIsDefaultPrevented(event)) {\n event.isDefaultPrevented = event.defaultPrevented === true ? always : never;\n event.isPropagationStopped = event.cancelBubble === true ? always : never;\n event.isImmediatePropagationStopped = never;\n }\n }\n return event;\n };\n\n const eventExpandoPrefix = 'mce-data-';\n const mouseEventRe = /^(?:mouse|contextmenu)|click/;\n const addEvent = (target, name, callback, capture) => {\n target.addEventListener(name, callback, capture || false);\n };\n const removeEvent = (target, name, callback, capture) => {\n target.removeEventListener(name, callback, capture || false);\n };\n const isMouseEvent = event => isNonNullable(event) && mouseEventRe.test(event.type);\n const fix = (originalEvent, data) => {\n const event = normalize$3(originalEvent.type, originalEvent, document, data);\n if (isMouseEvent(originalEvent) && isUndefined(originalEvent.pageX) && !isUndefined(originalEvent.clientX)) {\n const eventDoc = event.target.ownerDocument || document;\n const doc = eventDoc.documentElement;\n const body = eventDoc.body;\n const mouseEvent = event;\n mouseEvent.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\n mouseEvent.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);\n }\n return event;\n };\n const bindOnReady = (win, callback, eventUtils) => {\n const doc = win.document, event = { type: 'ready' };\n if (eventUtils.domLoaded) {\n callback(event);\n return;\n }\n const isDocReady = () => {\n return doc.readyState === 'complete' || doc.readyState === 'interactive' && doc.body;\n };\n const readyHandler = () => {\n removeEvent(win, 'DOMContentLoaded', readyHandler);\n removeEvent(win, 'load', readyHandler);\n if (!eventUtils.domLoaded) {\n eventUtils.domLoaded = true;\n callback(event);\n }\n win = null;\n };\n if (isDocReady()) {\n readyHandler();\n } else {\n addEvent(win, 'DOMContentLoaded', readyHandler);\n }\n if (!eventUtils.domLoaded) {\n addEvent(win, 'load', readyHandler);\n }\n };\n class EventUtils {\n constructor() {\n this.domLoaded = false;\n this.events = {};\n this.count = 1;\n this.expando = eventExpandoPrefix + (+new Date()).toString(32);\n this.hasFocusIn = 'onfocusin' in document.documentElement;\n this.count = 1;\n }\n bind(target, names, callback, scope) {\n const self = this;\n let callbackList;\n const win = window;\n const defaultNativeHandler = evt => {\n self.executeHandlers(fix(evt || win.event), id);\n };\n if (!target || isText$b(target) || isComment(target)) {\n return callback;\n }\n let id;\n if (!target[self.expando]) {\n id = self.count++;\n target[self.expando] = id;\n self.events[id] = {};\n } else {\n id = target[self.expando];\n }\n scope = scope || target;\n const namesList = names.split(' ');\n let i = namesList.length;\n while (i--) {\n let name = namesList[i];\n let nativeHandler = defaultNativeHandler;\n let capture = false;\n let fakeName = false;\n if (name === 'DOMContentLoaded') {\n name = 'ready';\n }\n if (self.domLoaded && name === 'ready' && target.readyState === 'complete') {\n callback.call(scope, fix({ type: name }));\n continue;\n }\n if (!self.hasFocusIn && (name === 'focusin' || name === 'focusout')) {\n capture = true;\n fakeName = name === 'focusin' ? 'focus' : 'blur';\n nativeHandler = evt => {\n const event = fix(evt || win.event);\n event.type = event.type === 'focus' ? 'focusin' : 'focusout';\n self.executeHandlers(event, id);\n };\n }\n callbackList = self.events[id][name];\n if (!callbackList) {\n self.events[id][name] = callbackList = [{\n func: callback,\n scope\n }];\n callbackList.fakeName = fakeName;\n callbackList.capture = capture;\n callbackList.nativeHandler = nativeHandler;\n if (name === 'ready') {\n bindOnReady(target, nativeHandler, self);\n } else {\n addEvent(target, fakeName || name, nativeHandler, capture);\n }\n } else {\n if (name === 'ready' && self.domLoaded) {\n callback(fix({ type: name }));\n } else {\n callbackList.push({\n func: callback,\n scope\n });\n }\n }\n }\n target = callbackList = null;\n return callback;\n }\n unbind(target, names, callback) {\n if (!target || isText$b(target) || isComment(target)) {\n return this;\n }\n const id = target[this.expando];\n if (id) {\n let eventMap = this.events[id];\n if (names) {\n const namesList = names.split(' ');\n let i = namesList.length;\n while (i--) {\n const name = namesList[i];\n const callbackList = eventMap[name];\n if (callbackList) {\n if (callback) {\n let ci = callbackList.length;\n while (ci--) {\n if (callbackList[ci].func === callback) {\n const nativeHandler = callbackList.nativeHandler;\n const fakeName = callbackList.fakeName, capture = callbackList.capture;\n const newCallbackList = callbackList.slice(0, ci).concat(callbackList.slice(ci + 1));\n newCallbackList.nativeHandler = nativeHandler;\n newCallbackList.fakeName = fakeName;\n newCallbackList.capture = capture;\n eventMap[name] = newCallbackList;\n }\n }\n }\n if (!callback || callbackList.length === 0) {\n delete eventMap[name];\n removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n }\n }\n }\n } else {\n each$d(eventMap, (callbackList, name) => {\n removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n });\n eventMap = {};\n }\n for (const name in eventMap) {\n if (has$2(eventMap, name)) {\n return this;\n }\n }\n delete this.events[id];\n try {\n delete target[this.expando];\n } catch (_a) {\n target[this.expando] = null;\n }\n }\n return this;\n }\n fire(target, name, args) {\n return this.dispatch(target, name, args);\n }\n dispatch(target, name, args) {\n if (!target || isText$b(target) || isComment(target)) {\n return this;\n }\n const event = fix({\n type: name,\n target\n }, args);\n do {\n const id = target[this.expando];\n if (id) {\n this.executeHandlers(event, id);\n }\n target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow;\n } while (target && !event.isPropagationStopped());\n return this;\n }\n clean(target) {\n if (!target || isText$b(target) || isComment(target)) {\n return this;\n }\n if (target[this.expando]) {\n this.unbind(target);\n }\n if (!target.getElementsByTagName) {\n target = target.document;\n }\n if (target && target.getElementsByTagName) {\n this.unbind(target);\n const children = target.getElementsByTagName('*');\n let i = children.length;\n while (i--) {\n target = children[i];\n if (target[this.expando]) {\n this.unbind(target);\n }\n }\n }\n return this;\n }\n destroy() {\n this.events = {};\n }\n cancel(e) {\n if (e) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n return false;\n }\n executeHandlers(evt, id) {\n const container = this.events[id];\n const callbackList = container && container[evt.type];\n if (callbackList) {\n for (let i = 0, l = callbackList.length; i < l; i++) {\n const callback = callbackList[i];\n if (callback && callback.func.call(callback.scope, evt) === false) {\n evt.preventDefault();\n }\n if (evt.isImmediatePropagationStopped()) {\n return;\n }\n }\n }\n }\n }\n EventUtils.Event = new EventUtils();\n\n const each$a = Tools.each;\n const grep = Tools.grep;\n const internalStyleName = 'data-mce-style';\n const numericalCssMap = Tools.makeMap('fill-opacity font-weight line-height opacity orphans widows z-index zoom', ' ');\n const legacySetAttribute = (elm, name, value) => {\n if (isNullable(value) || value === '') {\n remove$9(elm, name);\n } else {\n set$4(elm, name, value);\n }\n };\n const camelCaseToHyphens = name => name.replace(/[A-Z]/g, v => '-' + v.toLowerCase());\n const findNodeIndex = (node, normalized) => {\n let idx = 0;\n if (node) {\n for (let lastNodeType = node.nodeType, tempNode = node.previousSibling; tempNode; tempNode = tempNode.previousSibling) {\n const nodeType = tempNode.nodeType;\n if (normalized && isText$b(tempNode)) {\n if (nodeType === lastNodeType || !tempNode.data.length) {\n continue;\n }\n }\n idx++;\n lastNodeType = nodeType;\n }\n }\n return idx;\n };\n const updateInternalStyleAttr = (styles, elm) => {\n const rawValue = get$9(elm, 'style');\n const value = styles.serialize(styles.parse(rawValue), name(elm));\n legacySetAttribute(elm, internalStyleName, value);\n };\n const convertStyleToString = (cssValue, cssName) => {\n if (isNumber(cssValue)) {\n return has$2(numericalCssMap, cssName) ? cssValue + '' : cssValue + 'px';\n } else {\n return cssValue;\n }\n };\n const applyStyle$1 = ($elm, cssName, cssValue) => {\n const normalizedName = camelCaseToHyphens(cssName);\n if (isNullable(cssValue) || cssValue === '') {\n remove$5($elm, normalizedName);\n } else {\n set$2($elm, normalizedName, convertStyleToString(cssValue, normalizedName));\n }\n };\n const setupAttrHooks = (styles, settings, getContext) => {\n const keepValues = settings.keep_values;\n const keepUrlHook = {\n set: (elm, value, name) => {\n const sugarElm = SugarElement.fromDom(elm);\n if (isFunction(settings.url_converter) && isNonNullable(value)) {\n value = settings.url_converter.call(settings.url_converter_scope || getContext(), String(value), name, elm);\n }\n const internalName = 'data-mce-' + name;\n legacySetAttribute(sugarElm, internalName, value);\n legacySetAttribute(sugarElm, name, value);\n },\n get: (elm, name) => {\n const sugarElm = SugarElement.fromDom(elm);\n return get$9(sugarElm, 'data-mce-' + name) || get$9(sugarElm, name);\n }\n };\n const attrHooks = {\n style: {\n set: (elm, value) => {\n const sugarElm = SugarElement.fromDom(elm);\n if (keepValues) {\n legacySetAttribute(sugarElm, internalStyleName, value);\n }\n remove$9(sugarElm, 'style');\n if (isString(value)) {\n setAll(sugarElm, styles.parse(value));\n }\n },\n get: elm => {\n const sugarElm = SugarElement.fromDom(elm);\n const value = get$9(sugarElm, internalStyleName) || get$9(sugarElm, 'style');\n return styles.serialize(styles.parse(value), name(sugarElm));\n }\n }\n };\n if (keepValues) {\n attrHooks.href = attrHooks.src = keepUrlHook;\n }\n return attrHooks;\n };\n const DOMUtils = (doc, settings = {}) => {\n const addedStyles = {};\n const win = window;\n const files = {};\n let counter = 0;\n const stdMode = true;\n const boxModel = true;\n const styleSheetLoader = instance.forElement(SugarElement.fromDom(doc), {\n contentCssCors: settings.contentCssCors,\n referrerPolicy: settings.referrerPolicy\n });\n const boundEvents = [];\n const schema = settings.schema ? settings.schema : Schema({});\n const styles = Styles({\n url_converter: settings.url_converter,\n url_converter_scope: settings.url_converter_scope\n }, settings.schema);\n const events = settings.ownEvents ? new EventUtils() : EventUtils.Event;\n const blockElementsMap = schema.getBlockElements();\n const isBlock = node => {\n if (isString(node)) {\n return has$2(blockElementsMap, node);\n } else {\n return isElement$6(node) && (has$2(blockElementsMap, node.nodeName) || isTransparentBlock(schema, node));\n }\n };\n const get = elm => elm && doc && isString(elm) ? doc.getElementById(elm) : elm;\n const _get = elm => {\n const value = get(elm);\n return isNonNullable(value) ? SugarElement.fromDom(value) : null;\n };\n const getAttrib = (elm, name, defaultVal = '') => {\n let value;\n const $elm = _get(elm);\n if (isNonNullable($elm) && isElement$7($elm)) {\n const hook = attrHooks[name];\n if (hook && hook.get) {\n value = hook.get($elm.dom, name);\n } else {\n value = get$9($elm, name);\n }\n }\n return isNonNullable(value) ? value : defaultVal;\n };\n const getAttribs = elm => {\n const node = get(elm);\n return isNullable(node) ? [] : node.attributes;\n };\n const setAttrib = (elm, name, value) => {\n run(elm, e => {\n if (isElement$6(e)) {\n const $elm = SugarElement.fromDom(e);\n const val = value === '' ? null : value;\n const originalValue = get$9($elm, name);\n const hook = attrHooks[name];\n if (hook && hook.set) {\n hook.set($elm.dom, val, name);\n } else {\n legacySetAttribute($elm, name, val);\n }\n if (originalValue !== val && settings.onSetAttrib) {\n settings.onSetAttrib({\n attrElm: $elm.dom,\n attrName: name,\n attrValue: val\n });\n }\n }\n });\n };\n const clone = (node, deep) => {\n return node.cloneNode(deep);\n };\n const getRoot = () => settings.root_element || doc.body;\n const getViewPort = argWin => {\n const vp = getBounds(argWin);\n return {\n x: vp.x,\n y: vp.y,\n w: vp.width,\n h: vp.height\n };\n };\n const getPos$1 = (elm, rootElm) => getPos(doc.body, get(elm), rootElm);\n const setStyle = (elm, name, value) => {\n run(elm, e => {\n const $elm = SugarElement.fromDom(e);\n applyStyle$1($elm, name, value);\n if (settings.update_styles) {\n updateInternalStyleAttr(styles, $elm);\n }\n });\n };\n const setStyles = (elm, stylesArg) => {\n run(elm, e => {\n const $elm = SugarElement.fromDom(e);\n each$d(stylesArg, (v, n) => {\n applyStyle$1($elm, n, v);\n });\n if (settings.update_styles) {\n updateInternalStyleAttr(styles, $elm);\n }\n });\n };\n const getStyle = (elm, name, computed) => {\n const $elm = get(elm);\n if (isNullable($elm) || !isHTMLElement($elm) && !isSVGElement($elm)) {\n return undefined;\n }\n if (computed) {\n return get$7(SugarElement.fromDom($elm), camelCaseToHyphens(name));\n } else {\n name = name.replace(/-(\\D)/g, (a, b) => b.toUpperCase());\n if (name === 'float') {\n name = 'cssFloat';\n }\n return $elm.style ? $elm.style[name] : undefined;\n }\n };\n const getSize = elm => {\n const $elm = get(elm);\n if (!$elm) {\n return {\n w: 0,\n h: 0\n };\n }\n let w = getStyle($elm, 'width');\n let h = getStyle($elm, 'height');\n if (!w || w.indexOf('px') === -1) {\n w = '0';\n }\n if (!h || h.indexOf('px') === -1) {\n h = '0';\n }\n return {\n w: parseInt(w, 10) || $elm.offsetWidth || $elm.clientWidth,\n h: parseInt(h, 10) || $elm.offsetHeight || $elm.clientHeight\n };\n };\n const getRect = elm => {\n const $elm = get(elm);\n const pos = getPos$1($elm);\n const size = getSize($elm);\n return {\n x: pos.x,\n y: pos.y,\n w: size.w,\n h: size.h\n };\n };\n const is = (elm, selector) => {\n if (!elm) {\n return false;\n }\n const elms = isArray$1(elm) ? elm : [elm];\n return exists(elms, e => {\n return is$1(SugarElement.fromDom(e), selector);\n });\n };\n const getParents = (elm, selector, root, collect) => {\n const result = [];\n let node = get(elm);\n collect = collect === undefined;\n const resolvedRoot = root || (getRoot().nodeName !== 'BODY' ? getRoot().parentNode : null);\n if (isString(selector)) {\n if (selector === '*') {\n selector = isElement$6;\n } else {\n const selectorVal = selector;\n selector = node => is(node, selectorVal);\n }\n }\n while (node) {\n if (node === resolvedRoot || isNullable(node.nodeType) || isDocument$1(node) || isDocumentFragment(node)) {\n break;\n }\n if (!selector || selector(node)) {\n if (collect) {\n result.push(node);\n } else {\n return [node];\n }\n }\n node = node.parentNode;\n }\n return collect ? result : null;\n };\n const getParent = (node, selector, root) => {\n const parents = getParents(node, selector, root, false);\n return parents && parents.length > 0 ? parents[0] : null;\n };\n const _findSib = (node, selector, name) => {\n let func = selector;\n if (node) {\n if (isString(selector)) {\n func = node => {\n return is(node, selector);\n };\n }\n for (let tempNode = node[name]; tempNode; tempNode = tempNode[name]) {\n if (isFunction(func) && func(tempNode)) {\n return tempNode;\n }\n }\n }\n return null;\n };\n const getNext = (node, selector) => _findSib(node, selector, 'nextSibling');\n const getPrev = (node, selector) => _findSib(node, selector, 'previousSibling');\n const isParentNode = node => isFunction(node.querySelectorAll);\n const select = (selector, scope) => {\n var _a, _b;\n const elm = (_b = (_a = get(scope)) !== null && _a !== void 0 ? _a : settings.root_element) !== null && _b !== void 0 ? _b : doc;\n return isParentNode(elm) ? from(elm.querySelectorAll(selector)) : [];\n };\n const run = function (elm, func, scope) {\n const context = scope !== null && scope !== void 0 ? scope : this;\n if (isArray$1(elm)) {\n const result = [];\n each$a(elm, (e, i) => {\n const node = get(e);\n if (node) {\n result.push(func.call(context, node, i));\n }\n });\n return result;\n } else {\n const node = get(elm);\n return !node ? false : func.call(context, node);\n }\n };\n const setAttribs = (elm, attrs) => {\n run(elm, $elm => {\n each$d(attrs, (value, name) => {\n setAttrib($elm, name, value);\n });\n });\n };\n const setHTML = (elm, html) => {\n run(elm, e => {\n const $elm = SugarElement.fromDom(e);\n set$1($elm, html);\n });\n };\n const add = (parentElm, name, attrs, html, create) => run(parentElm, parentElm => {\n const newElm = isString(name) ? doc.createElement(name) : name;\n if (isNonNullable(attrs)) {\n setAttribs(newElm, attrs);\n }\n if (html) {\n if (!isString(html) && html.nodeType) {\n newElm.appendChild(html);\n } else if (isString(html)) {\n setHTML(newElm, html);\n }\n }\n return !create ? parentElm.appendChild(newElm) : newElm;\n });\n const create = (name, attrs, html) => add(doc.createElement(name), name, attrs, html, true);\n const decode = Entities.decode;\n const encode = Entities.encodeAllRaw;\n const createHTML = (name, attrs, html = '') => {\n let outHtml = '<' + name;\n for (const key in attrs) {\n if (hasNonNullableKey(attrs, key)) {\n outHtml += ' ' + key + '=\"' + encode(attrs[key]) + '\"';\n }\n }\n if (isEmpty$3(html) && has$2(schema.getVoidElements(), name)) {\n return outHtml + ' />';\n } else {\n return outHtml + '>' + html + '';\n }\n };\n const createFragment = html => {\n const container = doc.createElement('div');\n const frag = doc.createDocumentFragment();\n frag.appendChild(container);\n if (html) {\n container.innerHTML = html;\n }\n let node;\n while (node = container.firstChild) {\n frag.appendChild(node);\n }\n frag.removeChild(container);\n return frag;\n };\n const remove = (node, keepChildren) => {\n return run(node, n => {\n const $node = SugarElement.fromDom(n);\n if (keepChildren) {\n each$e(children$1($node), child => {\n if (isText$c(child) && child.dom.length === 0) {\n remove$4(child);\n } else {\n before$3($node, child);\n }\n });\n }\n remove$4($node);\n return $node.dom;\n });\n };\n const removeAllAttribs = e => run(e, e => {\n const attrs = e.attributes;\n for (let i = attrs.length - 1; i >= 0; i--) {\n e.removeAttributeNode(attrs.item(i));\n }\n });\n const parseStyle = cssText => styles.parse(cssText);\n const serializeStyle = (stylesArg, name) => styles.serialize(stylesArg, name);\n const addStyle = cssText => {\n if (self !== DOMUtils.DOM && doc === document) {\n if (addedStyles[cssText]) {\n return;\n }\n addedStyles[cssText] = true;\n }\n let styleElm = doc.getElementById('mceDefaultStyles');\n if (!styleElm) {\n styleElm = doc.createElement('style');\n styleElm.id = 'mceDefaultStyles';\n styleElm.type = 'text/css';\n const head = doc.head;\n if (head.firstChild) {\n head.insertBefore(styleElm, head.firstChild);\n } else {\n head.appendChild(styleElm);\n }\n }\n if (styleElm.styleSheet) {\n styleElm.styleSheet.cssText += cssText;\n } else {\n styleElm.appendChild(doc.createTextNode(cssText));\n }\n };\n const loadCSS = urls => {\n if (!urls) {\n urls = '';\n }\n each$e(urls.split(','), url => {\n files[url] = true;\n styleSheetLoader.load(url).catch(noop);\n });\n };\n const toggleClass = (elm, cls, state) => {\n run(elm, e => {\n if (isElement$6(e)) {\n const $elm = SugarElement.fromDom(e);\n const classes = cls.split(' ');\n each$e(classes, c => {\n if (isNonNullable(state)) {\n const fn = state ? add$2 : remove$6;\n fn($elm, c);\n } else {\n toggle$1($elm, c);\n }\n });\n }\n });\n };\n const addClass = (elm, cls) => {\n toggleClass(elm, cls, true);\n };\n const removeClass = (elm, cls) => {\n toggleClass(elm, cls, false);\n };\n const hasClass = (elm, cls) => {\n const $elm = _get(elm);\n const classes = cls.split(' ');\n return isNonNullable($elm) && forall(classes, c => has($elm, c));\n };\n const show = elm => {\n run(elm, e => remove$5(SugarElement.fromDom(e), 'display'));\n };\n const hide = elm => {\n run(elm, e => set$2(SugarElement.fromDom(e), 'display', 'none'));\n };\n const isHidden = elm => {\n const $elm = _get(elm);\n return isNonNullable($elm) && is$2(getRaw($elm, 'display'), 'none');\n };\n const uniqueId = prefix => (!prefix ? 'mce_' : prefix) + counter++;\n const getOuterHTML = elm => {\n const $elm = _get(elm);\n if (isNonNullable($elm)) {\n return isElement$6($elm.dom) ? $elm.dom.outerHTML : getOuter($elm);\n } else {\n return '';\n }\n };\n const setOuterHTML = (elm, html) => {\n run(elm, $elm => {\n if (isElement$6($elm)) {\n $elm.outerHTML = html;\n }\n });\n };\n const insertAfter = (node, reference) => {\n const referenceNode = get(reference);\n return run(node, node => {\n const parent = referenceNode === null || referenceNode === void 0 ? void 0 : referenceNode.parentNode;\n const nextSibling = referenceNode === null || referenceNode === void 0 ? void 0 : referenceNode.nextSibling;\n if (parent) {\n if (nextSibling) {\n parent.insertBefore(node, nextSibling);\n } else {\n parent.appendChild(node);\n }\n }\n return node;\n });\n };\n const replace = (newElm, oldElm, keepChildren) => run(oldElm, elm => {\n var _a;\n const replacee = isArray$1(oldElm) ? newElm.cloneNode(true) : newElm;\n if (keepChildren) {\n each$a(grep(elm.childNodes), node => {\n replacee.appendChild(node);\n });\n }\n (_a = elm.parentNode) === null || _a === void 0 ? void 0 : _a.replaceChild(replacee, elm);\n return elm;\n });\n const rename = (elm, name) => {\n if (elm.nodeName !== name.toUpperCase()) {\n const newElm = create(name);\n each$a(getAttribs(elm), attrNode => {\n setAttrib(newElm, attrNode.nodeName, getAttrib(elm, attrNode.nodeName));\n });\n replace(newElm, elm, true);\n return newElm;\n } else {\n return elm;\n }\n };\n const findCommonAncestor = (a, b) => {\n let ps = a;\n while (ps) {\n let pe = b;\n while (pe && ps !== pe) {\n pe = pe.parentNode;\n }\n if (ps === pe) {\n break;\n }\n ps = ps.parentNode;\n }\n if (!ps && a.ownerDocument) {\n return a.ownerDocument.documentElement;\n } else {\n return ps;\n }\n };\n const isEmpty = (node, elements, options) => {\n if (isPlainObject(elements)) {\n const isContent = node => {\n const name = node.nodeName.toLowerCase();\n return Boolean(elements[name]);\n };\n return isEmptyNode(schema, node, {\n ...options,\n isContent\n });\n } else {\n return isEmptyNode(schema, node, options);\n }\n };\n const createRng = () => doc.createRange();\n const split = (parentElm, splitElm, replacementElm) => {\n let range = createRng();\n let beforeFragment;\n let afterFragment;\n if (parentElm && splitElm && parentElm.parentNode && splitElm.parentNode) {\n const parentNode = parentElm.parentNode;\n range.setStart(parentNode, findNodeIndex(parentElm));\n range.setEnd(splitElm.parentNode, findNodeIndex(splitElm));\n beforeFragment = range.extractContents();\n range = createRng();\n range.setStart(splitElm.parentNode, findNodeIndex(splitElm) + 1);\n range.setEnd(parentNode, findNodeIndex(parentElm) + 1);\n afterFragment = range.extractContents();\n parentNode.insertBefore(trimNode(self, beforeFragment, schema), parentElm);\n if (replacementElm) {\n parentNode.insertBefore(replacementElm, parentElm);\n } else {\n parentNode.insertBefore(splitElm, parentElm);\n }\n parentNode.insertBefore(trimNode(self, afterFragment, schema), parentElm);\n remove(parentElm);\n return replacementElm || splitElm;\n } else {\n return undefined;\n }\n };\n const bind = (target, name, func, scope) => {\n if (isArray$1(target)) {\n let i = target.length;\n const rv = [];\n while (i--) {\n rv[i] = bind(target[i], name, func, scope);\n }\n return rv;\n } else {\n if (settings.collect && (target === doc || target === win)) {\n boundEvents.push([\n target,\n name,\n func,\n scope\n ]);\n }\n return events.bind(target, name, func, scope || self);\n }\n };\n const unbind = (target, name, func) => {\n if (isArray$1(target)) {\n let i = target.length;\n const rv = [];\n while (i--) {\n rv[i] = unbind(target[i], name, func);\n }\n return rv;\n } else {\n if (boundEvents.length > 0 && (target === doc || target === win)) {\n let i = boundEvents.length;\n while (i--) {\n const [boundTarget, boundName, boundFunc] = boundEvents[i];\n if (target === boundTarget && (!name || name === boundName) && (!func || func === boundFunc)) {\n events.unbind(boundTarget, boundName, boundFunc);\n }\n }\n }\n return events.unbind(target, name, func);\n }\n };\n const dispatch = (target, name, evt) => events.dispatch(target, name, evt);\n const fire = (target, name, evt) => events.dispatch(target, name, evt);\n const getContentEditable = node => {\n if (node && isHTMLElement(node)) {\n const contentEditable = node.getAttribute('data-mce-contenteditable');\n if (contentEditable && contentEditable !== 'inherit') {\n return contentEditable;\n }\n return node.contentEditable !== 'inherit' ? node.contentEditable : null;\n } else {\n return null;\n }\n };\n const getContentEditableParent = node => {\n const root = getRoot();\n let state = null;\n for (let tempNode = node; tempNode && tempNode !== root; tempNode = tempNode.parentNode) {\n state = getContentEditable(tempNode);\n if (state !== null) {\n break;\n }\n }\n return state;\n };\n const isEditable = node => {\n if (isNonNullable(node)) {\n const scope = isElement$6(node) ? node : node.parentElement;\n return isNonNullable(scope) && isHTMLElement(scope) && isEditable$2(SugarElement.fromDom(scope));\n } else {\n return false;\n }\n };\n const destroy = () => {\n if (boundEvents.length > 0) {\n let i = boundEvents.length;\n while (i--) {\n const [boundTarget, boundName, boundFunc] = boundEvents[i];\n events.unbind(boundTarget, boundName, boundFunc);\n }\n }\n each$d(files, (_, url) => {\n styleSheetLoader.unload(url);\n delete files[url];\n });\n };\n const isChildOf = (node, parent) => {\n return node === parent || parent.contains(node);\n };\n const dumpRng = r => 'startContainer: ' + r.startContainer.nodeName + ', startOffset: ' + r.startOffset + ', endContainer: ' + r.endContainer.nodeName + ', endOffset: ' + r.endOffset;\n const self = {\n doc,\n settings,\n win,\n files,\n stdMode,\n boxModel,\n styleSheetLoader,\n boundEvents,\n styles,\n schema,\n events,\n isBlock: isBlock,\n root: null,\n clone,\n getRoot,\n getViewPort,\n getRect,\n getSize,\n getParent,\n getParents: getParents,\n get,\n getNext,\n getPrev,\n select,\n is,\n add,\n create,\n createHTML,\n createFragment,\n remove,\n setStyle,\n getStyle: getStyle,\n setStyles,\n removeAllAttribs,\n setAttrib,\n setAttribs,\n getAttrib,\n getPos: getPos$1,\n parseStyle,\n serializeStyle,\n addStyle,\n loadCSS,\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n show,\n hide,\n isHidden,\n uniqueId,\n setHTML,\n getOuterHTML,\n setOuterHTML,\n decode,\n encode,\n insertAfter,\n replace,\n rename,\n findCommonAncestor,\n run,\n getAttribs,\n isEmpty,\n createRng,\n nodeIndex: findNodeIndex,\n split,\n bind: bind,\n unbind: unbind,\n fire,\n dispatch,\n getContentEditable,\n getContentEditableParent,\n isEditable,\n destroy,\n isChildOf,\n dumpRng\n };\n const attrHooks = setupAttrHooks(styles, settings, constant(self));\n return self;\n };\n DOMUtils.DOM = DOMUtils(document);\n DOMUtils.nodeIndex = findNodeIndex;\n\n const DOM$b = DOMUtils.DOM;\n const QUEUED = 0;\n const LOADING = 1;\n const LOADED = 2;\n const FAILED = 3;\n class ScriptLoader {\n constructor(settings = {}) {\n this.states = {};\n this.queue = [];\n this.scriptLoadedCallbacks = {};\n this.queueLoadedCallbacks = [];\n this.loading = false;\n this.settings = settings;\n }\n _setReferrerPolicy(referrerPolicy) {\n this.settings.referrerPolicy = referrerPolicy;\n }\n loadScript(url) {\n return new Promise((resolve, reject) => {\n const dom = DOM$b;\n let elm;\n const cleanup = () => {\n dom.remove(id);\n if (elm) {\n elm.onerror = elm.onload = elm = null;\n }\n };\n const done = () => {\n cleanup();\n resolve();\n };\n const error = () => {\n cleanup();\n reject('Failed to load script: ' + url);\n };\n const id = dom.uniqueId();\n elm = document.createElement('script');\n elm.id = id;\n elm.type = 'text/javascript';\n elm.src = Tools._addCacheSuffix(url);\n if (this.settings.referrerPolicy) {\n dom.setAttrib(elm, 'referrerpolicy', this.settings.referrerPolicy);\n }\n elm.onload = done;\n elm.onerror = error;\n (document.getElementsByTagName('head')[0] || document.body).appendChild(elm);\n });\n }\n isDone(url) {\n return this.states[url] === LOADED;\n }\n markDone(url) {\n this.states[url] = LOADED;\n }\n add(url) {\n const self = this;\n self.queue.push(url);\n const state = self.states[url];\n if (state === undefined) {\n self.states[url] = QUEUED;\n }\n return new Promise((resolve, reject) => {\n if (!self.scriptLoadedCallbacks[url]) {\n self.scriptLoadedCallbacks[url] = [];\n }\n self.scriptLoadedCallbacks[url].push({\n resolve,\n reject\n });\n });\n }\n load(url) {\n return this.add(url);\n }\n remove(url) {\n delete this.states[url];\n delete this.scriptLoadedCallbacks[url];\n }\n loadQueue() {\n const queue = this.queue;\n this.queue = [];\n return this.loadScripts(queue);\n }\n loadScripts(scripts) {\n const self = this;\n const execCallbacks = (name, url) => {\n get$a(self.scriptLoadedCallbacks, url).each(callbacks => {\n each$e(callbacks, callback => callback[name](url));\n });\n delete self.scriptLoadedCallbacks[url];\n };\n const processResults = results => {\n const failures = filter$5(results, result => result.status === 'rejected');\n if (failures.length > 0) {\n return Promise.reject(bind$3(failures, ({reason}) => isArray$1(reason) ? reason : [reason]));\n } else {\n return Promise.resolve();\n }\n };\n const load = urls => Promise.allSettled(map$3(urls, url => {\n if (self.states[url] === LOADED) {\n execCallbacks('resolve', url);\n return Promise.resolve();\n } else if (self.states[url] === FAILED) {\n execCallbacks('reject', url);\n return Promise.reject(url);\n } else {\n self.states[url] = LOADING;\n return self.loadScript(url).then(() => {\n self.states[url] = LOADED;\n execCallbacks('resolve', url);\n const queue = self.queue;\n if (queue.length > 0) {\n self.queue = [];\n return load(queue).then(processResults);\n } else {\n return Promise.resolve();\n }\n }, () => {\n self.states[url] = FAILED;\n execCallbacks('reject', url);\n return Promise.reject(url);\n });\n }\n }));\n const processQueue = urls => {\n self.loading = true;\n return load(urls).then(results => {\n self.loading = false;\n const nextQueuedItem = self.queueLoadedCallbacks.shift();\n Optional.from(nextQueuedItem).each(call);\n return processResults(results);\n });\n };\n const uniqueScripts = stringArray(scripts);\n if (self.loading) {\n return new Promise((resolve, reject) => {\n self.queueLoadedCallbacks.push(() => {\n processQueue(uniqueScripts).then(resolve, reject);\n });\n });\n } else {\n return processQueue(uniqueScripts);\n }\n }\n }\n ScriptLoader.ScriptLoader = new ScriptLoader();\n\n const isDuplicated = (items, item) => {\n const firstIndex = items.indexOf(item);\n return firstIndex !== -1 && items.indexOf(item, firstIndex + 1) > firstIndex;\n };\n const isRaw = str => isObject(str) && has$2(str, 'raw');\n const isTokenised = str => isArray$1(str) && str.length > 1;\n const data = {};\n const currentCode = Cell('en');\n const getLanguageData = () => get$a(data, currentCode.get());\n const getData$1 = () => map$2(data, value => ({ ...value }));\n const setCode = newCode => {\n if (newCode) {\n currentCode.set(newCode);\n }\n };\n const getCode = () => currentCode.get();\n const add$1 = (code, items) => {\n let langData = data[code];\n if (!langData) {\n data[code] = langData = {};\n }\n const lcNames = map$3(keys(items), name => name.toLowerCase());\n each$d(items, (translation, name) => {\n const lcName = name.toLowerCase();\n if (lcName !== name && isDuplicated(lcNames, lcName)) {\n if (!has$2(items, lcName)) {\n langData[lcName] = translation;\n }\n langData[name] = translation;\n } else {\n langData[lcName] = translation;\n }\n });\n };\n const translate = text => {\n const langData = getLanguageData().getOr({});\n const toString = obj => {\n if (isFunction(obj)) {\n return Object.prototype.toString.call(obj);\n }\n return !isEmpty(obj) ? '' + obj : '';\n };\n const isEmpty = text => text === '' || text === null || text === undefined;\n const getLangData = text => {\n const textStr = toString(text);\n return has$2(langData, textStr) ? toString(langData[textStr]) : get$a(langData, textStr.toLowerCase()).map(toString).getOr(textStr);\n };\n const removeContext = str => str.replace(/{context:\\w+}$/, '');\n if (isEmpty(text)) {\n return '';\n }\n if (isRaw(text)) {\n return toString(text.raw);\n }\n if (isTokenised(text)) {\n const values = text.slice(1);\n const substitued = getLangData(text[0]).replace(/\\{([0-9]+)\\}/g, ($1, $2) => has$2(values, $2) ? toString(values[$2]) : $1);\n return removeContext(substitued);\n }\n return removeContext(getLangData(text));\n };\n const isRtl$1 = () => getLanguageData().bind(items => get$a(items, '_dir')).exists(dir => dir === 'rtl');\n const hasCode = code => has$2(data, code);\n const I18n = {\n getData: getData$1,\n setCode,\n getCode,\n add: add$1,\n translate,\n isRtl: isRtl$1,\n hasCode\n };\n\n const AddOnManager = () => {\n const items = [];\n const urls = {};\n const lookup = {};\n const _listeners = [];\n const runListeners = (name, state) => {\n const matchedListeners = filter$5(_listeners, listener => listener.name === name && listener.state === state);\n each$e(matchedListeners, listener => listener.resolve());\n };\n const isLoaded = name => has$2(urls, name);\n const isAdded = name => has$2(lookup, name);\n const get = name => {\n if (lookup[name]) {\n return lookup[name].instance;\n }\n return undefined;\n };\n const loadLanguagePack = (name, languages) => {\n const language = I18n.getCode();\n const wrappedLanguages = ',' + (languages || '') + ',';\n if (!language || languages && wrappedLanguages.indexOf(',' + language + ',') === -1) {\n return;\n }\n ScriptLoader.ScriptLoader.add(urls[name] + '/langs/' + language + '.js');\n };\n const requireLangPack = (name, languages) => {\n if (AddOnManager.languageLoad !== false) {\n if (isLoaded(name)) {\n loadLanguagePack(name, languages);\n } else {\n waitFor(name, 'loaded').then(() => loadLanguagePack(name, languages));\n }\n }\n };\n const add = (id, addOn) => {\n items.push(addOn);\n lookup[id] = { instance: addOn };\n runListeners(id, 'added');\n return addOn;\n };\n const remove = name => {\n delete urls[name];\n delete lookup[name];\n };\n const createUrl = (baseUrl, dep) => {\n if (isString(dep)) {\n return isString(baseUrl) ? {\n prefix: '',\n resource: dep,\n suffix: ''\n } : {\n prefix: baseUrl.prefix,\n resource: dep,\n suffix: baseUrl.suffix\n };\n } else {\n return dep;\n }\n };\n const load = (name, addOnUrl) => {\n if (urls[name]) {\n return Promise.resolve();\n }\n let urlString = isString(addOnUrl) ? addOnUrl : addOnUrl.prefix + addOnUrl.resource + addOnUrl.suffix;\n if (urlString.indexOf('/') !== 0 && urlString.indexOf('://') === -1) {\n urlString = AddOnManager.baseURL + '/' + urlString;\n }\n urls[name] = urlString.substring(0, urlString.lastIndexOf('/'));\n const done = () => {\n runListeners(name, 'loaded');\n return Promise.resolve();\n };\n if (lookup[name]) {\n return done();\n } else {\n return ScriptLoader.ScriptLoader.add(urlString).then(done);\n }\n };\n const waitFor = (name, state = 'added') => {\n if (state === 'added' && isAdded(name)) {\n return Promise.resolve();\n } else if (state === 'loaded' && isLoaded(name)) {\n return Promise.resolve();\n } else {\n return new Promise(resolve => {\n _listeners.push({\n name,\n state,\n resolve\n });\n });\n }\n };\n return {\n items,\n urls,\n lookup,\n get,\n requireLangPack,\n add,\n remove,\n createUrl,\n load,\n waitFor\n };\n };\n AddOnManager.languageLoad = true;\n AddOnManager.baseURL = '';\n AddOnManager.PluginManager = AddOnManager();\n AddOnManager.ThemeManager = AddOnManager();\n AddOnManager.ModelManager = AddOnManager();\n\n const first$1 = (fn, rate) => {\n let timer = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const throttle = (...args) => {\n if (isNull(timer)) {\n timer = setTimeout(() => {\n timer = null;\n fn.apply(null, args);\n }, rate);\n }\n };\n return {\n cancel,\n throttle\n };\n };\n const last = (fn, rate) => {\n let timer = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const throttle = (...args) => {\n cancel();\n timer = setTimeout(() => {\n timer = null;\n fn.apply(null, args);\n }, rate);\n };\n return {\n cancel,\n throttle\n };\n };\n\n const ancestor$1 = (scope, selector, isRoot) => ancestor$3(scope, selector, isRoot).isSome();\n\n const annotation = constant('mce-annotation');\n const dataAnnotation = constant('data-mce-annotation');\n const dataAnnotationId = constant('data-mce-annotation-uid');\n const dataAnnotationActive = constant('data-mce-annotation-active');\n const dataAnnotationClasses = constant('data-mce-annotation-classes');\n const dataAnnotationAttributes = constant('data-mce-annotation-attrs');\n\n const isRoot$1 = root => node => eq(node, root);\n const identify = (editor, annotationName) => {\n const rng = editor.selection.getRng();\n const start = SugarElement.fromDom(rng.startContainer);\n const root = SugarElement.fromDom(editor.getBody());\n const selector = annotationName.fold(() => '.' + annotation(), an => `[${ dataAnnotation() }=\"${ an }\"]`);\n const newStart = child$1(start, rng.startOffset).getOr(start);\n const closest = closest$3(newStart, selector, isRoot$1(root));\n return closest.bind(c => getOpt(c, `${ dataAnnotationId() }`).bind(uid => getOpt(c, `${ dataAnnotation() }`).map(name => {\n const elements = findMarkers(editor, uid);\n return {\n uid,\n name,\n elements\n };\n })));\n };\n const isAnnotation = elem => isElement$7(elem) && has(elem, annotation());\n const isBogusElement = (elem, root) => has$1(elem, 'data-mce-bogus') || ancestor$1(elem, '[data-mce-bogus=\"all\"]', isRoot$1(root));\n const findMarkers = (editor, uid) => {\n const body = SugarElement.fromDom(editor.getBody());\n const descendants$1 = descendants(body, `[${ dataAnnotationId() }=\"${ uid }\"]`);\n return filter$5(descendants$1, descendant => !isBogusElement(descendant, body));\n };\n const findAll = (editor, name) => {\n const body = SugarElement.fromDom(editor.getBody());\n const markers = descendants(body, `[${ dataAnnotation() }=\"${ name }\"]`);\n const directory = {};\n each$e(markers, m => {\n if (!isBogusElement(m, body)) {\n const uid = get$9(m, dataAnnotationId());\n const nodesAlready = get$a(directory, uid).getOr([]);\n directory[uid] = nodesAlready.concat([m]);\n }\n });\n return directory;\n };\n\n const setup$y = (editor, registry) => {\n const changeCallbacks = Cell({});\n const initData = () => ({\n listeners: [],\n previous: value$2()\n });\n const withCallbacks = (name, f) => {\n updateCallbacks(name, data => {\n f(data);\n return data;\n });\n };\n const updateCallbacks = (name, f) => {\n const callbackMap = changeCallbacks.get();\n const data = get$a(callbackMap, name).getOrThunk(initData);\n const outputData = f(data);\n callbackMap[name] = outputData;\n changeCallbacks.set(callbackMap);\n };\n const fireCallbacks = (name, uid, elements) => {\n withCallbacks(name, data => {\n each$e(data.listeners, f => f(true, name, {\n uid,\n nodes: map$3(elements, elem => elem.dom)\n }));\n });\n };\n const fireNoAnnotation = name => {\n withCallbacks(name, data => {\n each$e(data.listeners, f => f(false, name));\n });\n };\n const toggleActiveAttr = (uid, state) => {\n each$e(findMarkers(editor, uid), elem => {\n if (state) {\n set$4(elem, dataAnnotationActive(), 'true');\n } else {\n remove$9(elem, dataAnnotationActive());\n }\n });\n };\n const onNodeChange = last(() => {\n const annotations = sort(registry.getNames());\n each$e(annotations, name => {\n updateCallbacks(name, data => {\n const prev = data.previous.get();\n identify(editor, Optional.some(name)).fold(() => {\n prev.each(uid => {\n fireNoAnnotation(name);\n data.previous.clear();\n toggleActiveAttr(uid, false);\n });\n }, ({uid, name, elements}) => {\n if (!is$2(prev, uid)) {\n prev.each(uid => toggleActiveAttr(uid, false));\n fireCallbacks(name, uid, elements);\n data.previous.set(uid);\n toggleActiveAttr(uid, true);\n }\n });\n return {\n previous: data.previous,\n listeners: data.listeners\n };\n });\n });\n }, 30);\n editor.on('remove', () => {\n onNodeChange.cancel();\n });\n editor.on('NodeChange', () => {\n onNodeChange.throttle();\n });\n const addListener = (name, f) => {\n updateCallbacks(name, data => ({\n previous: data.previous,\n listeners: data.listeners.concat([f])\n }));\n };\n return { addListener };\n };\n\n const setup$x = (editor, registry) => {\n const dataAnnotation$1 = dataAnnotation();\n const identifyParserNode = node => Optional.from(node.attr(dataAnnotation$1)).bind(registry.lookup);\n const removeDirectAnnotation = node => {\n var _a, _b;\n node.attr(dataAnnotationId(), null);\n node.attr(dataAnnotation(), null);\n node.attr(dataAnnotationActive(), null);\n const customAttrNames = Optional.from(node.attr(dataAnnotationAttributes())).map(names => names.split(',')).getOr([]);\n const customClasses = Optional.from(node.attr(dataAnnotationClasses())).map(names => names.split(',')).getOr([]);\n each$e(customAttrNames, name => node.attr(name, null));\n const classList = (_b = (_a = node.attr('class')) === null || _a === void 0 ? void 0 : _a.split(' ')) !== null && _b !== void 0 ? _b : [];\n const newClassList = difference(classList, [annotation()].concat(customClasses));\n node.attr('class', newClassList.length > 0 ? newClassList.join(' ') : null);\n node.attr(dataAnnotationClasses(), null);\n node.attr(dataAnnotationAttributes(), null);\n };\n editor.serializer.addTempAttr(dataAnnotationActive());\n editor.serializer.addAttributeFilter(dataAnnotation$1, nodes => {\n for (const node of nodes) {\n identifyParserNode(node).each(settings => {\n if (settings.persistent === false) {\n if (node.name === 'span') {\n node.unwrap();\n } else {\n removeDirectAnnotation(node);\n }\n }\n });\n }\n });\n };\n\n const create$b = () => {\n const annotations = {};\n const register = (name, settings) => {\n annotations[name] = {\n name,\n settings\n };\n };\n const lookup = name => get$a(annotations, name).map(a => a.settings);\n const getNames = () => keys(annotations);\n return {\n register,\n lookup,\n getNames\n };\n };\n\n const clamp$2 = (value, min, max) => Math.min(Math.max(value, min), max);\n const random = () => window.crypto.getRandomValues(new Uint32Array(1))[0] / 4294967295;\n\n let unique = 0;\n const generate$1 = prefix => {\n const date = new Date();\n const time = date.getTime();\n const random$1 = Math.floor(random() * 1000000000);\n unique++;\n return prefix + '_' + random$1 + unique + String(time);\n };\n\n const add = (element, classes) => {\n each$e(classes, x => {\n add$2(element, x);\n });\n };\n const remove$3 = (element, classes) => {\n each$e(classes, x => {\n remove$6(element, x);\n });\n };\n\n const clone$2 = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n const shallow$1 = original => clone$2(original, false);\n const deep$1 = original => clone$2(original, true);\n const shallowAs = (original, tag) => {\n const nu = SugarElement.fromTag(tag);\n const attributes = clone$4(original);\n setAll$1(nu, attributes);\n return nu;\n };\n const mutate = (original, tag) => {\n const nu = shallowAs(original, tag);\n after$4(original, nu);\n const children = children$1(original);\n append(nu, children);\n remove$4(original);\n return nu;\n };\n\n const TextWalker = (startNode, rootNode, isBoundary = never) => {\n const walker = new DomTreeWalker(startNode, rootNode);\n const walk = direction => {\n let next;\n do {\n next = walker[direction]();\n } while (next && !isText$b(next) && !isBoundary(next));\n return Optional.from(next).filter(isText$b);\n };\n return {\n current: () => Optional.from(walker.current()).filter(isText$b),\n next: () => walk('next'),\n prev: () => walk('prev'),\n prev2: () => walk('prev2')\n };\n };\n\n const TextSeeker = (dom, isBoundary) => {\n const isBlockBoundary = isBoundary ? isBoundary : node => dom.isBlock(node) || isBr$6(node) || isContentEditableFalse$b(node);\n const walk = (node, offset, walker, process) => {\n if (isText$b(node)) {\n const newOffset = process(node, offset, node.data);\n if (newOffset !== -1) {\n return Optional.some({\n container: node,\n offset: newOffset\n });\n }\n }\n return walker().bind(next => walk(next.container, next.offset, walker, process));\n };\n const backwards = (node, offset, process, root) => {\n const walker = TextWalker(node, root !== null && root !== void 0 ? root : dom.getRoot(), isBlockBoundary);\n return walk(node, offset, () => walker.prev().map(prev => ({\n container: prev,\n offset: prev.length\n })), process).getOrNull();\n };\n const forwards = (node, offset, process, root) => {\n const walker = TextWalker(node, root !== null && root !== void 0 ? root : dom.getRoot(), isBlockBoundary);\n return walk(node, offset, () => walker.next().map(next => ({\n container: next,\n offset: 0\n })), process).getOrNull();\n };\n return {\n backwards,\n forwards\n };\n };\n\n const NodeValue = (is, name) => {\n const get = element => {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n const set = (element, value) => {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom.nodeValue = value;\n };\n return {\n get,\n getOption,\n set\n };\n };\n\n const api$1 = NodeValue(isText$c, 'text');\n const get$3 = element => api$1.get(element);\n const getOption = element => api$1.getOption(element);\n const set = (element, value) => api$1.set(element, value);\n\n const tableCells = [\n 'td',\n 'th'\n ];\n const tableSections = [\n 'thead',\n 'tbody',\n 'tfoot'\n ];\n const textBlocks = [\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'p',\n 'div',\n 'address',\n 'pre',\n 'form',\n 'blockquote',\n 'center',\n 'dir',\n 'fieldset',\n 'header',\n 'footer',\n 'article',\n 'section',\n 'hgroup',\n 'aside',\n 'nav',\n 'figure'\n ];\n const listItems$1 = [\n 'li',\n 'dd',\n 'dt'\n ];\n const lists = [\n 'ul',\n 'ol',\n 'dl'\n ];\n const wsElements = [\n 'pre',\n 'script',\n 'textarea',\n 'style'\n ];\n const lazyLookup = items => {\n let lookup;\n return node => {\n lookup = lookup ? lookup : mapToObject(items, always);\n return has$2(lookup, name(node));\n };\n };\n const isTable$1 = node => name(node) === 'table';\n const isBr$5 = node => isElement$7(node) && name(node) === 'br';\n const isTextBlock$2 = lazyLookup(textBlocks);\n const isList = lazyLookup(lists);\n const isListItem$1 = lazyLookup(listItems$1);\n const isTableSection = lazyLookup(tableSections);\n const isTableCell$2 = lazyLookup(tableCells);\n const isWsPreserveElement = lazyLookup(wsElements);\n\n const getLastChildren$1 = elm => {\n const children = [];\n let rawNode = elm.dom;\n while (rawNode) {\n children.push(SugarElement.fromDom(rawNode));\n rawNode = rawNode.lastChild;\n }\n return children;\n };\n const removeTrailingBr = elm => {\n const allBrs = descendants(elm, 'br');\n const brs = filter$5(getLastChildren$1(elm).slice(-1), isBr$5);\n if (allBrs.length === brs.length) {\n each$e(brs, remove$4);\n }\n };\n const createPaddingBr = () => {\n const br = SugarElement.fromTag('br');\n set$4(br, 'data-mce-bogus', '1');\n return br;\n };\n const fillWithPaddingBr = elm => {\n empty(elm);\n append$1(elm, createPaddingBr());\n };\n const trimBlockTrailingBr = (elm, schema) => {\n lastChild(elm).each(lastChild => {\n prevSibling(lastChild).each(lastChildPrevSibling => {\n if (schema.isBlock(name(elm)) && isBr$5(lastChild) && schema.isBlock(name(lastChildPrevSibling))) {\n remove$4(lastChild);\n }\n });\n });\n };\n\n const ZWSP$1 = zeroWidth;\n const isZwsp = isZwsp$2;\n const trim$2 = removeZwsp;\n const insert$5 = editor => editor.insertContent(ZWSP$1, { preserve_zwsp: true });\n\n const isElement$5 = isElement$6;\n const isText$9 = isText$b;\n const isCaretContainerBlock$1 = node => {\n if (isText$9(node)) {\n node = node.parentNode;\n }\n return isElement$5(node) && node.hasAttribute('data-mce-caret');\n };\n const isCaretContainerInline = node => isText$9(node) && isZwsp(node.data);\n const isCaretContainer$2 = node => isCaretContainerBlock$1(node) || isCaretContainerInline(node);\n const hasContent = node => node.firstChild !== node.lastChild || !isBr$6(node.firstChild);\n const insertInline$1 = (node, before) => {\n var _a;\n const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n const textNode = doc.createTextNode(ZWSP$1);\n const parentNode = node.parentNode;\n if (!before) {\n const sibling = node.nextSibling;\n if (isText$9(sibling)) {\n if (isCaretContainer$2(sibling)) {\n return sibling;\n }\n if (startsWithCaretContainer$1(sibling)) {\n sibling.splitText(1);\n return sibling;\n }\n }\n if (node.nextSibling) {\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(textNode, node.nextSibling);\n } else {\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.appendChild(textNode);\n }\n } else {\n const sibling = node.previousSibling;\n if (isText$9(sibling)) {\n if (isCaretContainer$2(sibling)) {\n return sibling;\n }\n if (endsWithCaretContainer$1(sibling)) {\n return sibling.splitText(sibling.data.length - 1);\n }\n }\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(textNode, node);\n }\n return textNode;\n };\n const isBeforeInline = pos => {\n const container = pos.container();\n if (!isText$b(container)) {\n return false;\n }\n return container.data.charAt(pos.offset()) === ZWSP$1 || pos.isAtStart() && isCaretContainerInline(container.previousSibling);\n };\n const isAfterInline = pos => {\n const container = pos.container();\n if (!isText$b(container)) {\n return false;\n }\n return container.data.charAt(pos.offset() - 1) === ZWSP$1 || pos.isAtEnd() && isCaretContainerInline(container.nextSibling);\n };\n const insertBlock = (blockName, node, before) => {\n var _a;\n const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n const blockNode = doc.createElement(blockName);\n blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after');\n blockNode.setAttribute('data-mce-bogus', 'all');\n blockNode.appendChild(createPaddingBr().dom);\n const parentNode = node.parentNode;\n if (!before) {\n if (node.nextSibling) {\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(blockNode, node.nextSibling);\n } else {\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.appendChild(blockNode);\n }\n } else {\n parentNode === null || parentNode === void 0 ? void 0 : parentNode.insertBefore(blockNode, node);\n }\n return blockNode;\n };\n const startsWithCaretContainer$1 = node => isText$9(node) && node.data[0] === ZWSP$1;\n const endsWithCaretContainer$1 = node => isText$9(node) && node.data[node.data.length - 1] === ZWSP$1;\n const trimBogusBr = elm => {\n var _a;\n const brs = elm.getElementsByTagName('br');\n const lastBr = brs[brs.length - 1];\n if (isBogus$1(lastBr)) {\n (_a = lastBr.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(lastBr);\n }\n };\n const showCaretContainerBlock = caretContainer => {\n if (caretContainer && caretContainer.hasAttribute('data-mce-caret')) {\n trimBogusBr(caretContainer);\n caretContainer.removeAttribute('data-mce-caret');\n caretContainer.removeAttribute('data-mce-bogus');\n caretContainer.removeAttribute('style');\n caretContainer.removeAttribute('data-mce-style');\n caretContainer.removeAttribute('_moz_abspos');\n return caretContainer;\n }\n return null;\n };\n const isRangeInCaretContainerBlock = range => isCaretContainerBlock$1(range.startContainer);\n\n const round$2 = Math.round;\n const clone$1 = rect => {\n if (!rect) {\n return {\n left: 0,\n top: 0,\n bottom: 0,\n right: 0,\n width: 0,\n height: 0\n };\n }\n return {\n left: round$2(rect.left),\n top: round$2(rect.top),\n bottom: round$2(rect.bottom),\n right: round$2(rect.right),\n width: round$2(rect.width),\n height: round$2(rect.height)\n };\n };\n const collapse = (rect, toStart) => {\n rect = clone$1(rect);\n if (toStart) {\n rect.right = rect.left;\n } else {\n rect.left = rect.left + rect.width;\n rect.right = rect.left;\n }\n rect.width = 0;\n return rect;\n };\n const isEqual = (rect1, rect2) => rect1.left === rect2.left && rect1.top === rect2.top && rect1.bottom === rect2.bottom && rect1.right === rect2.right;\n const isValidOverflow = (overflowY, rect1, rect2) => overflowY >= 0 && overflowY <= Math.min(rect1.height, rect2.height) / 2;\n const isAbove$1 = (rect1, rect2) => {\n const halfHeight = Math.min(rect2.height / 2, rect1.height / 2);\n if (rect1.bottom - halfHeight < rect2.top) {\n return true;\n }\n if (rect1.top > rect2.bottom) {\n return false;\n }\n return isValidOverflow(rect2.top - rect1.bottom, rect1, rect2);\n };\n const isBelow$1 = (rect1, rect2) => {\n if (rect1.top > rect2.bottom) {\n return true;\n }\n if (rect1.bottom < rect2.top) {\n return false;\n }\n return isValidOverflow(rect2.bottom - rect1.top, rect1, rect2);\n };\n const containsXY = (rect, clientX, clientY) => clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom;\n const boundingClientRectFromRects = rects => {\n return foldl(rects, (acc, rect) => {\n return acc.fold(() => Optional.some(rect), prevRect => {\n const left = Math.min(rect.left, prevRect.left);\n const top = Math.min(rect.top, prevRect.top);\n const right = Math.max(rect.right, prevRect.right);\n const bottom = Math.max(rect.bottom, prevRect.bottom);\n return Optional.some({\n top,\n right,\n bottom,\n left,\n width: right - left,\n height: bottom - top\n });\n });\n }, Optional.none());\n };\n const distanceToRectEdgeFromXY = (rect, x, y) => {\n const cx = Math.max(Math.min(x, rect.left + rect.width), rect.left);\n const cy = Math.max(Math.min(y, rect.top + rect.height), rect.top);\n return Math.sqrt((x - cx) * (x - cx) + (y - cy) * (y - cy));\n };\n const overlapY = (r1, r2) => Math.max(0, Math.min(r1.bottom, r2.bottom) - Math.max(r1.top, r2.top));\n\n const getSelectedNode = range => {\n const startContainer = range.startContainer, startOffset = range.startOffset;\n if (startContainer === range.endContainer && startContainer.hasChildNodes() && range.endOffset === startOffset + 1) {\n return startContainer.childNodes[startOffset];\n }\n return null;\n };\n const getNode$1 = (container, offset) => {\n if (isElement$6(container) && container.hasChildNodes()) {\n const childNodes = container.childNodes;\n const safeOffset = clamp$2(offset, 0, childNodes.length - 1);\n return childNodes[safeOffset];\n } else {\n return container;\n }\n };\n const getNodeUnsafe = (container, offset) => {\n if (offset < 0 && isElement$6(container) && container.hasChildNodes()) {\n return undefined;\n } else {\n return getNode$1(container, offset);\n }\n };\n\n const extendingChars = new RegExp('[\\u0300-\\u036f\\u0483-\\u0487\\u0488-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u0610-\\u061a' + '\\u064b-\\u065f\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7-\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0' + '\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u08e3-\\u0902\\u093a\\u093c' + '\\u0941-\\u0948\\u094d\\u0951-\\u0957\\u0962-\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2-\\u09e3' + '\\u0a01-\\u0a02\\u0a3c\\u0a41-\\u0a42\\u0a47-\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70-\\u0a71\\u0a75\\u0a81-\\u0a82\\u0abc' + '\\u0ac1-\\u0ac5\\u0ac7-\\u0ac8\\u0acd\\u0ae2-\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57' + '\\u0b62-\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c00\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55-\\u0c56' + '\\u0c62-\\u0c63\\u0c81\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc-\\u0ccd\\u0cd5-\\u0cd6\\u0ce2-\\u0ce3\\u0d01\\u0d3e\\u0d41-\\u0d44' + '\\u0d4d\\u0d57\\u0d62-\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9' + '\\u0ebb-\\u0ebc\\u0ec8-\\u0ecd\\u0f18-\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97' + '\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039-\\u103a\\u103d-\\u103e\\u1058-\\u1059\\u105e-\\u1060\\u1071-\\u1074' + '\\u1082\\u1085-\\u1086\\u108d\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752-\\u1753\\u1772-\\u1773\\u17b4-\\u17b5' + '\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927-\\u1928\\u1932\\u1939-\\u193b\\u1a17-\\u1a18' + '\\u1a1b\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1ab0-\\u1abd\\u1ABE\\u1b00-\\u1b03\\u1b34' + '\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80-\\u1b81\\u1ba2-\\u1ba5\\u1ba8-\\u1ba9\\u1bab-\\u1bad\\u1be6\\u1be8-\\u1be9' + '\\u1bed\\u1bef-\\u1bf1\\u1c2c-\\u1c33\\u1c36-\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1cf4\\u1cf8-\\u1cf9' + '\\u1dc0-\\u1df5\\u1dfc-\\u1dff\\u200c-\\u200d\\u20d0-\\u20dc\\u20DD-\\u20E0\\u20e1\\u20E2-\\u20E4\\u20e5-\\u20f0\\u2cef-\\u2cf1' + '\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302d\\u302e-\\u302f\\u3099-\\u309a\\ua66f\\uA670-\\uA672\\ua674-\\ua67d\\ua69e-\\ua69f\\ua6f0-\\ua6f1' + '\\ua802\\ua806\\ua80b\\ua825-\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc' + '\\ua9e5\\uaa29-\\uaa2e\\uaa31-\\uaa32\\uaa35-\\uaa36\\uaa43\\uaa4c\\uaa7c\\uaab0\\uaab2-\\uaab4\\uaab7-\\uaab8\\uaabe-\\uaabf\\uaac1' + '\\uaaec-\\uaaed\\uaaf6\\uabe5\\uabe8\\uabed\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\uff9e-\\uff9f]');\n const isExtendingChar = ch => isString(ch) && ch.charCodeAt(0) >= 768 && extendingChars.test(ch);\n\n const or = (...args) => {\n return x => {\n for (let i = 0; i < args.length; i++) {\n if (args[i](x)) {\n return true;\n }\n }\n return false;\n };\n };\n const and = (...args) => {\n return x => {\n for (let i = 0; i < args.length; i++) {\n if (!args[i](x)) {\n return false;\n }\n }\n return true;\n };\n };\n\n const isContentEditableTrue$2 = isContentEditableTrue$3;\n const isContentEditableFalse$a = isContentEditableFalse$b;\n const isBr$4 = isBr$6;\n const isText$8 = isText$b;\n const isInvalidTextElement = matchNodeNames([\n 'script',\n 'style',\n 'textarea'\n ]);\n const isAtomicInline = matchNodeNames([\n 'img',\n 'input',\n 'textarea',\n 'hr',\n 'iframe',\n 'video',\n 'audio',\n 'object',\n 'embed'\n ]);\n const isTable = matchNodeNames(['table']);\n const isCaretContainer$1 = isCaretContainer$2;\n const isCaretCandidate$3 = node => {\n if (isCaretContainer$1(node)) {\n return false;\n }\n if (isText$8(node)) {\n return !isInvalidTextElement(node.parentNode);\n }\n return isAtomicInline(node) || isBr$4(node) || isTable(node) || isNonUiContentEditableFalse(node);\n };\n const isUnselectable = node => isElement$6(node) && node.getAttribute('unselectable') === 'true';\n const isNonUiContentEditableFalse = node => !isUnselectable(node) && isContentEditableFalse$a(node);\n const isInEditable = (node, root) => {\n for (let tempNode = node.parentNode; tempNode && tempNode !== root; tempNode = tempNode.parentNode) {\n if (isNonUiContentEditableFalse(tempNode)) {\n return false;\n }\n if (isContentEditableTrue$2(tempNode)) {\n return true;\n }\n }\n return true;\n };\n const isAtomicContentEditableFalse = node => {\n if (!isNonUiContentEditableFalse(node)) {\n return false;\n }\n return !foldl(from(node.getElementsByTagName('*')), (result, elm) => {\n return result || isContentEditableTrue$2(elm);\n }, false);\n };\n const isAtomic$1 = node => isAtomicInline(node) || isAtomicContentEditableFalse(node);\n const isEditableCaretCandidate$1 = (node, root) => isCaretCandidate$3(node) && isInEditable(node, root);\n\n const isElement$4 = isElement$6;\n const isCaretCandidate$2 = isCaretCandidate$3;\n const isBlock$2 = matchStyleValues('display', 'block table');\n const isFloated = matchStyleValues('float', 'left right');\n const isValidElementCaretCandidate = and(isElement$4, isCaretCandidate$2, not(isFloated));\n const isNotPre = not(matchStyleValues('white-space', 'pre pre-line pre-wrap'));\n const isText$7 = isText$b;\n const isBr$3 = isBr$6;\n const nodeIndex$1 = DOMUtils.nodeIndex;\n const resolveIndex$1 = getNodeUnsafe;\n const createRange$1 = doc => doc ? doc.createRange() : DOMUtils.DOM.createRng();\n const isWhiteSpace$1 = chr => isString(chr) && /[\\r\\n\\t ]/.test(chr);\n const isRange = rng => !!rng.setStart && !!rng.setEnd;\n const isHiddenWhiteSpaceRange = range => {\n const container = range.startContainer;\n const offset = range.startOffset;\n if (isWhiteSpace$1(range.toString()) && isNotPre(container.parentNode) && isText$b(container)) {\n const text = container.data;\n if (isWhiteSpace$1(text[offset - 1]) || isWhiteSpace$1(text[offset + 1])) {\n return true;\n }\n }\n return false;\n };\n const getBrClientRect = brNode => {\n const doc = brNode.ownerDocument;\n const rng = createRange$1(doc);\n const nbsp$1 = doc.createTextNode(nbsp);\n const parentNode = brNode.parentNode;\n parentNode.insertBefore(nbsp$1, brNode);\n rng.setStart(nbsp$1, 0);\n rng.setEnd(nbsp$1, 1);\n const clientRect = clone$1(rng.getBoundingClientRect());\n parentNode.removeChild(nbsp$1);\n return clientRect;\n };\n const getBoundingClientRectWebKitText = rng => {\n const sc = rng.startContainer;\n const ec = rng.endContainer;\n const so = rng.startOffset;\n const eo = rng.endOffset;\n if (sc === ec && isText$b(ec) && so === 0 && eo === 1) {\n const newRng = rng.cloneRange();\n newRng.setEndAfter(ec);\n return getBoundingClientRect$1(newRng);\n } else {\n return null;\n }\n };\n const isZeroRect = r => r.left === 0 && r.right === 0 && r.top === 0 && r.bottom === 0;\n const getBoundingClientRect$1 = item => {\n var _a;\n let clientRect;\n const clientRects = item.getClientRects();\n if (clientRects.length > 0) {\n clientRect = clone$1(clientRects[0]);\n } else {\n clientRect = clone$1(item.getBoundingClientRect());\n }\n if (!isRange(item) && isBr$3(item) && isZeroRect(clientRect)) {\n return getBrClientRect(item);\n }\n if (isZeroRect(clientRect) && isRange(item)) {\n return (_a = getBoundingClientRectWebKitText(item)) !== null && _a !== void 0 ? _a : clientRect;\n }\n return clientRect;\n };\n const collapseAndInflateWidth = (clientRect, toStart) => {\n const newClientRect = collapse(clientRect, toStart);\n newClientRect.width = 1;\n newClientRect.right = newClientRect.left + 1;\n return newClientRect;\n };\n const getCaretPositionClientRects = caretPosition => {\n const clientRects = [];\n const addUniqueAndValidRect = clientRect => {\n if (clientRect.height === 0) {\n return;\n }\n if (clientRects.length > 0) {\n if (isEqual(clientRect, clientRects[clientRects.length - 1])) {\n return;\n }\n }\n clientRects.push(clientRect);\n };\n const addCharacterOffset = (container, offset) => {\n const range = createRange$1(container.ownerDocument);\n if (offset < container.data.length) {\n if (isExtendingChar(container.data[offset])) {\n return;\n }\n if (isExtendingChar(container.data[offset - 1])) {\n range.setStart(container, offset);\n range.setEnd(container, offset + 1);\n if (!isHiddenWhiteSpaceRange(range)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(range), false));\n return;\n }\n }\n }\n if (offset > 0) {\n range.setStart(container, offset - 1);\n range.setEnd(container, offset);\n if (!isHiddenWhiteSpaceRange(range)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(range), false));\n }\n }\n if (offset < container.data.length) {\n range.setStart(container, offset);\n range.setEnd(container, offset + 1);\n if (!isHiddenWhiteSpaceRange(range)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(range), true));\n }\n }\n };\n const container = caretPosition.container();\n const offset = caretPosition.offset();\n if (isText$7(container)) {\n addCharacterOffset(container, offset);\n return clientRects;\n }\n if (isElement$4(container)) {\n if (caretPosition.isAtEnd()) {\n const node = resolveIndex$1(container, offset);\n if (isText$7(node)) {\n addCharacterOffset(node, node.data.length);\n }\n if (isValidElementCaretCandidate(node) && !isBr$3(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), false));\n }\n } else {\n const node = resolveIndex$1(container, offset);\n if (isText$7(node)) {\n addCharacterOffset(node, 0);\n }\n if (isValidElementCaretCandidate(node) && caretPosition.isAtEnd()) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), false));\n return clientRects;\n }\n const beforeNode = resolveIndex$1(caretPosition.container(), caretPosition.offset() - 1);\n if (isValidElementCaretCandidate(beforeNode) && !isBr$3(beforeNode)) {\n if (isBlock$2(beforeNode) || isBlock$2(node) || !isValidElementCaretCandidate(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(beforeNode), false));\n }\n }\n if (isValidElementCaretCandidate(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), true));\n }\n }\n }\n return clientRects;\n };\n const CaretPosition = (container, offset, clientRects) => {\n const isAtStart = () => {\n if (isText$7(container)) {\n return offset === 0;\n }\n return offset === 0;\n };\n const isAtEnd = () => {\n if (isText$7(container)) {\n return offset >= container.data.length;\n }\n return offset >= container.childNodes.length;\n };\n const toRange = () => {\n const range = createRange$1(container.ownerDocument);\n range.setStart(container, offset);\n range.setEnd(container, offset);\n return range;\n };\n const getClientRects = () => {\n if (!clientRects) {\n clientRects = getCaretPositionClientRects(CaretPosition(container, offset));\n }\n return clientRects;\n };\n const isVisible = () => getClientRects().length > 0;\n const isEqual = caretPosition => caretPosition && container === caretPosition.container() && offset === caretPosition.offset();\n const getNode = before => resolveIndex$1(container, before ? offset - 1 : offset);\n return {\n container: constant(container),\n offset: constant(offset),\n toRange,\n getClientRects,\n isVisible,\n isAtStart,\n isAtEnd,\n isEqual,\n getNode\n };\n };\n CaretPosition.fromRangeStart = range => CaretPosition(range.startContainer, range.startOffset);\n CaretPosition.fromRangeEnd = range => CaretPosition(range.endContainer, range.endOffset);\n CaretPosition.after = node => CaretPosition(node.parentNode, nodeIndex$1(node) + 1);\n CaretPosition.before = node => CaretPosition(node.parentNode, nodeIndex$1(node));\n CaretPosition.isAbove = (pos1, pos2) => lift2(head(pos2.getClientRects()), last$2(pos1.getClientRects()), isAbove$1).getOr(false);\n CaretPosition.isBelow = (pos1, pos2) => lift2(last$2(pos2.getClientRects()), head(pos1.getClientRects()), isBelow$1).getOr(false);\n CaretPosition.isAtStart = pos => pos ? pos.isAtStart() : false;\n CaretPosition.isAtEnd = pos => pos ? pos.isAtEnd() : false;\n CaretPosition.isTextPosition = pos => pos ? isText$b(pos.container()) : false;\n CaretPosition.isElementPosition = pos => !CaretPosition.isTextPosition(pos);\n\n const trimEmptyTextNode$1 = (dom, node) => {\n if (isText$b(node) && node.data.length === 0) {\n dom.remove(node);\n }\n };\n const insertNode = (dom, rng, node) => {\n rng.insertNode(node);\n trimEmptyTextNode$1(dom, node.previousSibling);\n trimEmptyTextNode$1(dom, node.nextSibling);\n };\n const insertFragment = (dom, rng, frag) => {\n const firstChild = Optional.from(frag.firstChild);\n const lastChild = Optional.from(frag.lastChild);\n rng.insertNode(frag);\n firstChild.each(child => trimEmptyTextNode$1(dom, child.previousSibling));\n lastChild.each(child => trimEmptyTextNode$1(dom, child.nextSibling));\n };\n const rangeInsertNode = (dom, rng, node) => {\n if (isDocumentFragment(node)) {\n insertFragment(dom, rng, node);\n } else {\n insertNode(dom, rng, node);\n }\n };\n\n const isText$6 = isText$b;\n const isBogus = isBogus$1;\n const nodeIndex = DOMUtils.nodeIndex;\n const normalizedParent = node => {\n const parentNode = node.parentNode;\n if (isBogus(parentNode)) {\n return normalizedParent(parentNode);\n }\n return parentNode;\n };\n const getChildNodes = node => {\n if (!node) {\n return [];\n }\n return reduce(node.childNodes, (result, node) => {\n if (isBogus(node) && node.nodeName !== 'BR') {\n result = result.concat(getChildNodes(node));\n } else {\n result.push(node);\n }\n return result;\n }, []);\n };\n const normalizedTextOffset = (node, offset) => {\n let tempNode = node;\n while (tempNode = tempNode.previousSibling) {\n if (!isText$6(tempNode)) {\n break;\n }\n offset += tempNode.data.length;\n }\n return offset;\n };\n const equal = a => b => a === b;\n const normalizedNodeIndex = node => {\n let nodes, index;\n nodes = getChildNodes(normalizedParent(node));\n index = findIndex$1(nodes, equal(node), node);\n nodes = nodes.slice(0, index + 1);\n const numTextFragments = reduce(nodes, (result, node, i) => {\n if (isText$6(node) && isText$6(nodes[i - 1])) {\n result++;\n }\n return result;\n }, 0);\n nodes = filter$3(nodes, matchNodeNames([node.nodeName]));\n index = findIndex$1(nodes, equal(node), node);\n return index - numTextFragments;\n };\n const createPathItem = node => {\n const name = isText$6(node) ? 'text()' : node.nodeName.toLowerCase();\n return name + '[' + normalizedNodeIndex(node) + ']';\n };\n const parentsUntil$1 = (root, node, predicate) => {\n const parents = [];\n for (let tempNode = node.parentNode; tempNode && tempNode !== root; tempNode = tempNode.parentNode) {\n if (predicate && predicate(tempNode)) {\n break;\n }\n parents.push(tempNode);\n }\n return parents;\n };\n const create$a = (root, caretPosition) => {\n let path = [];\n let container = caretPosition.container();\n let offset = caretPosition.offset();\n let outputOffset;\n if (isText$6(container)) {\n outputOffset = normalizedTextOffset(container, offset);\n } else {\n const childNodes = container.childNodes;\n if (offset >= childNodes.length) {\n outputOffset = 'after';\n offset = childNodes.length - 1;\n } else {\n outputOffset = 'before';\n }\n container = childNodes[offset];\n }\n path.push(createPathItem(container));\n let parents = parentsUntil$1(root, container);\n parents = filter$3(parents, not(isBogus$1));\n path = path.concat(map$1(parents, node => {\n return createPathItem(node);\n }));\n return path.reverse().join('/') + ',' + outputOffset;\n };\n const resolvePathItem = (node, name, index) => {\n let nodes = getChildNodes(node);\n nodes = filter$3(nodes, (node, index) => {\n return !isText$6(node) || !isText$6(nodes[index - 1]);\n });\n nodes = filter$3(nodes, matchNodeNames([name]));\n return nodes[index];\n };\n const findTextPosition = (container, offset) => {\n let node = container;\n let targetOffset = 0;\n while (isText$6(node)) {\n const dataLen = node.data.length;\n if (offset >= targetOffset && offset <= targetOffset + dataLen) {\n container = node;\n offset = offset - targetOffset;\n break;\n }\n if (!isText$6(node.nextSibling)) {\n container = node;\n offset = dataLen;\n break;\n }\n targetOffset += dataLen;\n node = node.nextSibling;\n }\n if (isText$6(container) && offset > container.data.length) {\n offset = container.data.length;\n }\n return CaretPosition(container, offset);\n };\n const resolve$1 = (root, path) => {\n if (!path) {\n return null;\n }\n const parts = path.split(',');\n const paths = parts[0].split('/');\n const offset = parts.length > 1 ? parts[1] : 'before';\n const container = reduce(paths, (result, value) => {\n const match = /([\\w\\-\\(\\)]+)\\[([0-9]+)\\]/.exec(value);\n if (!match) {\n return null;\n }\n if (match[1] === 'text()') {\n match[1] = '#text';\n }\n return resolvePathItem(result, match[1], parseInt(match[2], 10));\n }, root);\n if (!container) {\n return null;\n }\n if (!isText$6(container) && container.parentNode) {\n let nodeOffset;\n if (offset === 'after') {\n nodeOffset = nodeIndex(container) + 1;\n } else {\n nodeOffset = nodeIndex(container);\n }\n return CaretPosition(container.parentNode, nodeOffset);\n }\n return findTextPosition(container, parseInt(offset, 10));\n };\n\n const isContentEditableFalse$9 = isContentEditableFalse$b;\n const getNormalizedTextOffset$1 = (trim, container, offset) => {\n let trimmedOffset = trim(container.data.slice(0, offset)).length;\n for (let node = container.previousSibling; node && isText$b(node); node = node.previousSibling) {\n trimmedOffset += trim(node.data).length;\n }\n return trimmedOffset;\n };\n const getPoint = (dom, trim, normalized, rng, start) => {\n const container = start ? rng.startContainer : rng.endContainer;\n let offset = start ? rng.startOffset : rng.endOffset;\n const point = [];\n const root = dom.getRoot();\n if (isText$b(container)) {\n point.push(normalized ? getNormalizedTextOffset$1(trim, container, offset) : offset);\n } else {\n let after = 0;\n const childNodes = container.childNodes;\n if (offset >= childNodes.length && childNodes.length) {\n after = 1;\n offset = Math.max(0, childNodes.length - 1);\n }\n point.push(dom.nodeIndex(childNodes[offset], normalized) + after);\n }\n for (let node = container; node && node !== root; node = node.parentNode) {\n point.push(dom.nodeIndex(node, normalized));\n }\n return point;\n };\n const getLocation = (trim, selection, normalized, rng) => {\n const dom = selection.dom;\n const start = getPoint(dom, trim, normalized, rng, true);\n const forward = selection.isForward();\n const fakeCaret = isRangeInCaretContainerBlock(rng) ? { isFakeCaret: true } : {};\n if (!selection.isCollapsed()) {\n const end = getPoint(dom, trim, normalized, rng, false);\n return {\n start,\n end,\n forward,\n ...fakeCaret\n };\n } else {\n return {\n start,\n forward,\n ...fakeCaret\n };\n }\n };\n const findIndex = (dom, name, element) => {\n let count = 0;\n Tools.each(dom.select(name), node => {\n if (node.getAttribute('data-mce-bogus') === 'all') {\n return;\n } else if (node === element) {\n return false;\n } else {\n count++;\n return;\n }\n });\n return count;\n };\n const moveEndPoint$1 = (rng, start) => {\n let container = start ? rng.startContainer : rng.endContainer;\n let offset = start ? rng.startOffset : rng.endOffset;\n if (isElement$6(container) && container.nodeName === 'TR') {\n const childNodes = container.childNodes;\n container = childNodes[Math.min(start ? offset : offset - 1, childNodes.length - 1)];\n if (container) {\n offset = start ? 0 : container.childNodes.length;\n if (start) {\n rng.setStart(container, offset);\n } else {\n rng.setEnd(container, offset);\n }\n }\n }\n };\n const normalizeTableCellSelection = rng => {\n moveEndPoint$1(rng, true);\n moveEndPoint$1(rng, false);\n return rng;\n };\n const findSibling = (node, offset) => {\n if (isElement$6(node)) {\n node = getNode$1(node, offset);\n if (isContentEditableFalse$9(node)) {\n return node;\n }\n }\n if (isCaretContainer$2(node)) {\n if (isText$b(node) && isCaretContainerBlock$1(node)) {\n node = node.parentNode;\n }\n let sibling = node.previousSibling;\n if (isContentEditableFalse$9(sibling)) {\n return sibling;\n }\n sibling = node.nextSibling;\n if (isContentEditableFalse$9(sibling)) {\n return sibling;\n }\n }\n return undefined;\n };\n const findAdjacentContentEditableFalseElm = rng => {\n return findSibling(rng.startContainer, rng.startOffset) || findSibling(rng.endContainer, rng.endOffset);\n };\n const getOffsetBookmark = (trim, normalized, selection) => {\n const element = selection.getNode();\n const rng = selection.getRng();\n if (element.nodeName === 'IMG' || isContentEditableFalse$9(element)) {\n const name = element.nodeName;\n return {\n name,\n index: findIndex(selection.dom, name, element)\n };\n }\n const sibling = findAdjacentContentEditableFalseElm(rng);\n if (sibling) {\n const name = sibling.tagName;\n return {\n name,\n index: findIndex(selection.dom, name, sibling)\n };\n }\n return getLocation(trim, selection, normalized, rng);\n };\n const getCaretBookmark = selection => {\n const rng = selection.getRng();\n return {\n start: create$a(selection.dom.getRoot(), CaretPosition.fromRangeStart(rng)),\n end: create$a(selection.dom.getRoot(), CaretPosition.fromRangeEnd(rng)),\n forward: selection.isForward()\n };\n };\n const getRangeBookmark = selection => {\n return {\n rng: selection.getRng(),\n forward: selection.isForward()\n };\n };\n const createBookmarkSpan = (dom, id, filled) => {\n const args = {\n 'data-mce-type': 'bookmark',\n id,\n 'style': 'overflow:hidden;line-height:0px'\n };\n return filled ? dom.create('span', args, '') : dom.create('span', args);\n };\n const getPersistentBookmark = (selection, filled) => {\n const dom = selection.dom;\n let rng = selection.getRng();\n const id = dom.uniqueId();\n const collapsed = selection.isCollapsed();\n const element = selection.getNode();\n const name = element.nodeName;\n const forward = selection.isForward();\n if (name === 'IMG') {\n return {\n name,\n index: findIndex(dom, name, element)\n };\n }\n const rng2 = normalizeTableCellSelection(rng.cloneRange());\n if (!collapsed) {\n rng2.collapse(false);\n const endBookmarkNode = createBookmarkSpan(dom, id + '_end', filled);\n rangeInsertNode(dom, rng2, endBookmarkNode);\n }\n rng = normalizeTableCellSelection(rng);\n rng.collapse(true);\n const startBookmarkNode = createBookmarkSpan(dom, id + '_start', filled);\n rangeInsertNode(dom, rng, startBookmarkNode);\n selection.moveToBookmark({\n id,\n keep: true,\n forward\n });\n return {\n id,\n forward\n };\n };\n const getBookmark$3 = (selection, type, normalized = false) => {\n if (type === 2) {\n return getOffsetBookmark(trim$2, normalized, selection);\n } else if (type === 3) {\n return getCaretBookmark(selection);\n } else if (type) {\n return getRangeBookmark(selection);\n } else {\n return getPersistentBookmark(selection, false);\n }\n };\n const getUndoBookmark = curry(getOffsetBookmark, identity, true);\n\n const value$1 = value => {\n const applyHelper = fn => fn(value);\n const constHelper = constant(value);\n const outputHelper = () => output;\n const output = {\n tag: true,\n inner: value,\n fold: (_onError, onValue) => onValue(value),\n isValue: always,\n isError: never,\n map: mapper => Result.value(mapper(value)),\n mapError: outputHelper,\n bind: applyHelper,\n exists: applyHelper,\n forall: applyHelper,\n getOr: constHelper,\n or: outputHelper,\n getOrThunk: constHelper,\n orThunk: outputHelper,\n getOrDie: constHelper,\n each: fn => {\n fn(value);\n },\n toOptional: () => Optional.some(value)\n };\n return output;\n };\n const error = error => {\n const outputHelper = () => output;\n const output = {\n tag: false,\n inner: error,\n fold: (onError, _onValue) => onError(error),\n isValue: never,\n isError: always,\n map: outputHelper,\n mapError: mapper => Result.error(mapper(error)),\n bind: outputHelper,\n exists: never,\n forall: always,\n getOr: identity,\n or: identity,\n getOrThunk: apply$1,\n orThunk: apply$1,\n getOrDie: die(String(error)),\n each: noop,\n toOptional: Optional.none\n };\n return output;\n };\n const fromOption = (optional, err) => optional.fold(() => error(err), value$1);\n const Result = {\n value: value$1,\n error,\n fromOption\n };\n\n const generate = cases => {\n if (!isArray$1(cases)) {\n throw new Error('cases must be an array');\n }\n if (cases.length === 0) {\n throw new Error('there must be at least one case');\n }\n const constructors = [];\n const adt = {};\n each$e(cases, (acase, count) => {\n const keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n const key = keys$1[0];\n const value = acase[key];\n if (adt[key] !== undefined) {\n throw new Error('duplicate key detected:' + key);\n } else if (key === 'cata') {\n throw new Error('cannot have a case named cata (sorry)');\n } else if (!isArray$1(value)) {\n throw new Error('case arguments must be an array');\n }\n constructors.push(key);\n adt[key] = (...args) => {\n const argLength = args.length;\n if (argLength !== value.length) {\n throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n }\n const match = branches => {\n const branchKeys = keys(branches);\n if (constructors.length !== branchKeys.length) {\n throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n }\n const allReqd = forall(constructors, reqKey => {\n return contains$2(branchKeys, reqKey);\n });\n if (!allReqd) {\n throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n }\n return branches[key].apply(null, args);\n };\n return {\n fold: (...foldArgs) => {\n if (foldArgs.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n }\n const target = foldArgs[count];\n return target.apply(null, args);\n },\n match,\n log: label => {\n console.log(label, {\n constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n const Adt = { generate };\n\n Adt.generate([\n {\n bothErrors: [\n 'error1',\n 'error2'\n ]\n },\n {\n firstError: [\n 'error1',\n 'value2'\n ]\n },\n {\n secondError: [\n 'value1',\n 'error2'\n ]\n },\n {\n bothValues: [\n 'value1',\n 'value2'\n ]\n }\n ]);\n const partition$1 = results => {\n const errors = [];\n const values = [];\n each$e(results, result => {\n result.fold(err => {\n errors.push(err);\n }, value => {\n values.push(value);\n });\n });\n return {\n errors,\n values\n };\n };\n\n const isInlinePattern = pattern => pattern.type === 'inline-command' || pattern.type === 'inline-format';\n const isBlockPattern = pattern => pattern.type === 'block-command' || pattern.type === 'block-format';\n const hasBlockTrigger = (pattern, trigger) => (pattern.type === 'block-command' || pattern.type === 'block-format') && pattern.trigger === trigger;\n const normalizePattern = pattern => {\n var _a;\n const err = message => Result.error({\n message,\n pattern\n });\n const formatOrCmd = (name, onFormat, onCommand) => {\n if (pattern.format !== undefined) {\n let formats;\n if (isArray$1(pattern.format)) {\n if (!forall(pattern.format, isString)) {\n return err(name + ' pattern has non-string items in the `format` array');\n }\n formats = pattern.format;\n } else if (isString(pattern.format)) {\n formats = [pattern.format];\n } else {\n return err(name + ' pattern has non-string `format` parameter');\n }\n return Result.value(onFormat(formats));\n } else if (pattern.cmd !== undefined) {\n if (!isString(pattern.cmd)) {\n return err(name + ' pattern has non-string `cmd` parameter');\n }\n return Result.value(onCommand(pattern.cmd, pattern.value));\n } else {\n return err(name + ' pattern is missing both `format` and `cmd` parameters');\n }\n };\n if (!isObject(pattern)) {\n return err('Raw pattern is not an object');\n }\n if (!isString(pattern.start)) {\n return err('Raw pattern is missing `start` parameter');\n }\n if (pattern.end !== undefined) {\n if (!isString(pattern.end)) {\n return err('Inline pattern has non-string `end` parameter');\n }\n if (pattern.start.length === 0 && pattern.end.length === 0) {\n return err('Inline pattern has empty `start` and `end` parameters');\n }\n let start = pattern.start;\n let end = pattern.end;\n if (end.length === 0) {\n end = start;\n start = '';\n }\n return formatOrCmd('Inline', format => ({\n type: 'inline-format',\n start,\n end,\n format\n }), (cmd, value) => ({\n type: 'inline-command',\n start,\n end,\n cmd,\n value\n }));\n } else if (pattern.replacement !== undefined) {\n if (!isString(pattern.replacement)) {\n return err('Replacement pattern has non-string `replacement` parameter');\n }\n if (pattern.start.length === 0) {\n return err('Replacement pattern has empty `start` parameter');\n }\n return Result.value({\n type: 'inline-command',\n start: '',\n end: pattern.start,\n cmd: 'mceInsertContent',\n value: pattern.replacement\n });\n } else {\n const trigger = (_a = pattern.trigger) !== null && _a !== void 0 ? _a : 'space';\n if (pattern.start.length === 0) {\n return err('Block pattern has empty `start` parameter');\n }\n return formatOrCmd('Block', formats => ({\n type: 'block-format',\n start: pattern.start,\n format: formats[0],\n trigger\n }), (command, commandValue) => ({\n type: 'block-command',\n start: pattern.start,\n cmd: command,\n value: commandValue,\n trigger\n }));\n }\n };\n const getBlockPatterns = patterns => filter$5(patterns, isBlockPattern);\n const getInlinePatterns = patterns => filter$5(patterns, isInlinePattern);\n const createPatternSet = (patterns, dynamicPatternsLookup) => ({\n inlinePatterns: getInlinePatterns(patterns),\n blockPatterns: getBlockPatterns(patterns),\n dynamicPatternsLookup\n });\n const filterByTrigger = (patterns, trigger) => {\n return {\n ...patterns,\n blockPatterns: filter$5(patterns.blockPatterns, pattern => hasBlockTrigger(pattern, trigger))\n };\n };\n const fromRawPatterns = patterns => {\n const normalized = partition$1(map$3(patterns, normalizePattern));\n each$e(normalized.errors, err => console.error(err.message, err.pattern));\n return normalized.values;\n };\n const fromRawPatternsLookup = lookupFn => {\n return ctx => {\n const rawPatterns = lookupFn(ctx);\n return fromRawPatterns(rawPatterns);\n };\n };\n\n const firePreProcess = (editor, args) => editor.dispatch('PreProcess', args);\n const firePostProcess = (editor, args) => editor.dispatch('PostProcess', args);\n const fireRemove = editor => {\n editor.dispatch('remove');\n };\n const fireDetach = editor => {\n editor.dispatch('detach');\n };\n const fireSwitchMode = (editor, mode) => {\n editor.dispatch('SwitchMode', { mode });\n };\n const fireObjectResizeStart = (editor, target, width, height, origin) => {\n editor.dispatch('ObjectResizeStart', {\n target,\n width,\n height,\n origin\n });\n };\n const fireObjectResized = (editor, target, width, height, origin) => {\n editor.dispatch('ObjectResized', {\n target,\n width,\n height,\n origin\n });\n };\n const firePreInit = editor => {\n editor.dispatch('PreInit');\n };\n const firePostRender = editor => {\n editor.dispatch('PostRender');\n };\n const fireInit = editor => {\n editor.dispatch('Init');\n };\n const firePlaceholderToggle = (editor, state) => {\n editor.dispatch('PlaceholderToggle', { state });\n };\n const fireError = (editor, errorType, error) => {\n editor.dispatch(errorType, error);\n };\n const fireFormatApply = (editor, format, node, vars) => {\n editor.dispatch('FormatApply', {\n format,\n node,\n vars\n });\n };\n const fireFormatRemove = (editor, format, node, vars) => {\n editor.dispatch('FormatRemove', {\n format,\n node,\n vars\n });\n };\n const fireBeforeSetContent = (editor, args) => editor.dispatch('BeforeSetContent', args);\n const fireSetContent = (editor, args) => editor.dispatch('SetContent', args);\n const fireBeforeGetContent = (editor, args) => editor.dispatch('BeforeGetContent', args);\n const fireGetContent = (editor, args) => editor.dispatch('GetContent', args);\n const fireAutocompleterStart = (editor, args) => {\n editor.dispatch('AutocompleterStart', args);\n };\n const fireAutocompleterUpdate = (editor, args) => {\n editor.dispatch('AutocompleterUpdate', args);\n };\n const fireAutocompleterUpdateActiveRange = (editor, args) => {\n editor.dispatch('AutocompleterUpdateActiveRange', args);\n };\n const fireAutocompleterEnd = editor => {\n editor.dispatch('AutocompleterEnd');\n };\n const firePastePreProcess = (editor, html, internal) => editor.dispatch('PastePreProcess', {\n content: html,\n internal\n });\n const firePastePostProcess = (editor, node, internal) => editor.dispatch('PastePostProcess', {\n node,\n internal\n });\n const firePastePlainTextToggle = (editor, state) => editor.dispatch('PastePlainTextToggle', { state });\n const fireEditableRootStateChange = (editor, state) => editor.dispatch('EditableRootStateChange', { state });\n const fireDisabledStateChange = (editor, state) => editor.dispatch('DisabledStateChange', { state });\n\n const deviceDetection$1 = detect$1().deviceType;\n const isTouch = deviceDetection$1.isTouch();\n const DOM$a = DOMUtils.DOM;\n const getHash = value => {\n const items = value.indexOf('=') > 0 ? value.split(/[;,](?![^=;,]*(?:[;,]|$))/) : value.split(',');\n return foldl(items, (output, item) => {\n const arr = item.split('=');\n const key = arr[0];\n const val = arr.length > 1 ? arr[1] : key;\n output[trim$4(key)] = trim$4(val);\n return output;\n }, {});\n };\n const isRegExp = x => is$4(x, RegExp);\n const option = name => editor => editor.options.get(name);\n const stringOrObjectProcessor = value => isString(value) || isObject(value);\n const bodyOptionProcessor = (editor, defaultValue = '') => value => {\n const valid = isString(value);\n if (valid) {\n if (value.indexOf('=') !== -1) {\n const bodyObj = getHash(value);\n return {\n value: get$a(bodyObj, editor.id).getOr(defaultValue),\n valid\n };\n } else {\n return {\n value,\n valid\n };\n }\n } else {\n return {\n valid: false,\n message: 'Must be a string.'\n };\n }\n };\n const register$7 = editor => {\n const registerOption = editor.options.register;\n registerOption('id', {\n processor: 'string',\n default: editor.id\n });\n registerOption('selector', { processor: 'string' });\n registerOption('target', { processor: 'object' });\n registerOption('suffix', { processor: 'string' });\n registerOption('cache_suffix', { processor: 'string' });\n registerOption('base_url', { processor: 'string' });\n registerOption('referrer_policy', {\n processor: 'string',\n default: ''\n });\n registerOption('language_load', {\n processor: 'boolean',\n default: true\n });\n registerOption('inline', {\n processor: 'boolean',\n default: false\n });\n registerOption('iframe_attrs', {\n processor: 'object',\n default: {}\n });\n registerOption('doctype', {\n processor: 'string',\n default: ''\n });\n registerOption('document_base_url', {\n processor: 'string',\n default: editor.documentBaseUrl\n });\n registerOption('body_id', {\n processor: bodyOptionProcessor(editor, 'tinymce'),\n default: 'tinymce'\n });\n registerOption('body_class', {\n processor: bodyOptionProcessor(editor),\n default: ''\n });\n registerOption('content_security_policy', {\n processor: 'string',\n default: ''\n });\n registerOption('br_in_pre', {\n processor: 'boolean',\n default: true\n });\n registerOption('forced_root_block', {\n processor: value => {\n const valid = isString(value) && isNotEmpty(value);\n if (valid) {\n return {\n value,\n valid\n };\n } else {\n return {\n valid: false,\n message: 'Must be a non-empty string.'\n };\n }\n },\n default: 'p'\n });\n registerOption('forced_root_block_attrs', {\n processor: 'object',\n default: {}\n });\n registerOption('newline_behavior', {\n processor: value => {\n const valid = contains$2([\n 'block',\n 'linebreak',\n 'invert',\n 'default'\n ], value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be one of: block, linebreak, invert or default.'\n };\n },\n default: 'default'\n });\n registerOption('br_newline_selector', {\n processor: 'string',\n default: '.mce-toc h2,figcaption,caption'\n });\n registerOption('no_newline_selector', {\n processor: 'string',\n default: ''\n });\n registerOption('keep_styles', {\n processor: 'boolean',\n default: true\n });\n registerOption('end_container_on_empty_block', {\n processor: value => {\n if (isBoolean(value)) {\n return {\n valid: true,\n value\n };\n } else if (isString(value)) {\n return {\n valid: true,\n value\n };\n } else {\n return {\n valid: false,\n message: 'Must be boolean or a string'\n };\n }\n },\n default: 'blockquote'\n });\n registerOption('font_size_style_values', {\n processor: 'string',\n default: 'xx-small,x-small,small,medium,large,x-large,xx-large'\n });\n registerOption('font_size_legacy_values', {\n processor: 'string',\n default: 'xx-small,small,medium,large,x-large,xx-large,300%'\n });\n registerOption('font_size_classes', {\n processor: 'string',\n default: ''\n });\n registerOption('automatic_uploads', {\n processor: 'boolean',\n default: true\n });\n registerOption('images_reuse_filename', {\n processor: 'boolean',\n default: false\n });\n registerOption('images_replace_blob_uris', {\n processor: 'boolean',\n default: true\n });\n registerOption('icons', {\n processor: 'string',\n default: ''\n });\n registerOption('icons_url', {\n processor: 'string',\n default: ''\n });\n registerOption('images_upload_url', {\n processor: 'string',\n default: ''\n });\n registerOption('images_upload_base_path', {\n processor: 'string',\n default: ''\n });\n registerOption('images_upload_credentials', {\n processor: 'boolean',\n default: false\n });\n registerOption('images_upload_handler', { processor: 'function' });\n registerOption('language', {\n processor: 'string',\n default: 'en'\n });\n registerOption('language_url', {\n processor: 'string',\n default: ''\n });\n registerOption('entity_encoding', {\n processor: 'string',\n default: 'named'\n });\n registerOption('indent', {\n processor: 'boolean',\n default: true\n });\n registerOption('indent_before', {\n processor: 'string',\n default: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,details,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist'\n });\n registerOption('indent_after', {\n processor: 'string',\n default: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,details,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist'\n });\n registerOption('indent_use_margin', {\n processor: 'boolean',\n default: false\n });\n registerOption('indentation', {\n processor: 'string',\n default: '40px'\n });\n registerOption('content_css', {\n processor: value => {\n const valid = value === false || isString(value) || isArrayOf(value, isString);\n if (valid) {\n if (isString(value)) {\n return {\n value: map$3(value.split(','), trim$4),\n valid\n };\n } else if (isArray$1(value)) {\n return {\n value,\n valid\n };\n } else if (value === false) {\n return {\n value: [],\n valid\n };\n } else {\n return {\n value,\n valid\n };\n }\n } else {\n return {\n valid: false,\n message: 'Must be false, a string or an array of strings.'\n };\n }\n },\n default: isInline$1(editor) ? [] : ['default']\n });\n registerOption('content_style', { processor: 'string' });\n registerOption('content_css_cors', {\n processor: 'boolean',\n default: false\n });\n registerOption('font_css', {\n processor: value => {\n const valid = isString(value) || isArrayOf(value, isString);\n if (valid) {\n const newValue = isArray$1(value) ? value : map$3(value.split(','), trim$4);\n return {\n value: newValue,\n valid\n };\n } else {\n return {\n valid: false,\n message: 'Must be a string or an array of strings.'\n };\n }\n },\n default: []\n });\n registerOption('inline_boundaries', {\n processor: 'boolean',\n default: true\n });\n registerOption('inline_boundaries_selector', {\n processor: 'string',\n default: 'a[href],code,span.mce-annotation'\n });\n registerOption('object_resizing', {\n processor: value => {\n const valid = isBoolean(value) || isString(value);\n if (valid) {\n if (value === false || deviceDetection$1.isiPhone() || deviceDetection$1.isiPad()) {\n return {\n value: '',\n valid\n };\n } else {\n return {\n value: value === true ? 'table,img,figure.image,div,video,iframe' : value,\n valid\n };\n }\n } else {\n return {\n valid: false,\n message: 'Must be boolean or a string'\n };\n }\n },\n default: !isTouch\n });\n registerOption('resize_img_proportional', {\n processor: 'boolean',\n default: true\n });\n registerOption('event_root', { processor: 'string' });\n registerOption('service_message', { processor: 'string' });\n registerOption('theme', {\n processor: value => value === false || isString(value) || isFunction(value),\n default: 'silver'\n });\n registerOption('theme_url', { processor: 'string' });\n registerOption('formats', { processor: 'object' });\n registerOption('format_empty_lines', {\n processor: 'boolean',\n default: false\n });\n registerOption('format_noneditable_selector', {\n processor: 'string',\n default: ''\n });\n registerOption('preview_styles', {\n processor: value => {\n const valid = value === false || isString(value);\n if (valid) {\n return {\n value: value === false ? '' : value,\n valid\n };\n } else {\n return {\n valid: false,\n message: 'Must be false or a string'\n };\n }\n },\n default: 'font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow'\n });\n registerOption('custom_ui_selector', {\n processor: 'string',\n default: ''\n });\n registerOption('hidden_input', {\n processor: 'boolean',\n default: true\n });\n registerOption('submit_patch', {\n processor: 'boolean',\n default: true\n });\n registerOption('encoding', { processor: 'string' });\n registerOption('add_form_submit_trigger', {\n processor: 'boolean',\n default: true\n });\n registerOption('add_unload_trigger', {\n processor: 'boolean',\n default: true\n });\n registerOption('custom_undo_redo_levels', {\n processor: 'number',\n default: 0\n });\n registerOption('disable_nodechange', {\n processor: 'boolean',\n default: false\n });\n registerOption('disabled', {\n processor: value => {\n if (isBoolean(value)) {\n if (editor.initialized && isDisabled$1(editor) !== value) {\n Promise.resolve().then(() => {\n fireDisabledStateChange(editor, value);\n });\n }\n return {\n valid: true,\n value\n };\n }\n return {\n valid: false,\n message: 'The value must be a boolean.'\n };\n },\n default: false\n });\n registerOption('readonly', {\n processor: 'boolean',\n default: false\n });\n registerOption('editable_root', {\n processor: 'boolean',\n default: true\n });\n registerOption('plugins', {\n processor: 'string[]',\n default: []\n });\n registerOption('external_plugins', { processor: 'object' });\n registerOption('forced_plugins', { processor: 'string[]' });\n registerOption('model', {\n processor: 'string',\n default: editor.hasPlugin('rtc') ? 'plugin' : 'dom'\n });\n registerOption('model_url', { processor: 'string' });\n registerOption('block_unsupported_drop', {\n processor: 'boolean',\n default: true\n });\n registerOption('visual', {\n processor: 'boolean',\n default: true\n });\n registerOption('visual_table_class', {\n processor: 'string',\n default: 'mce-item-table'\n });\n registerOption('visual_anchor_class', {\n processor: 'string',\n default: 'mce-item-anchor'\n });\n registerOption('iframe_aria_text', {\n processor: 'string',\n default: 'Rich Text Area'.concat(editor.hasPlugin('help') ? '. Press ALT-0 for help.' : '')\n });\n registerOption('setup', { processor: 'function' });\n registerOption('init_instance_callback', { processor: 'function' });\n registerOption('url_converter', {\n processor: 'function',\n default: editor.convertURL\n });\n registerOption('url_converter_scope', {\n processor: 'object',\n default: editor\n });\n registerOption('urlconverter_callback', { processor: 'function' });\n registerOption('allow_conditional_comments', {\n processor: 'boolean',\n default: false\n });\n registerOption('allow_html_data_urls', {\n processor: 'boolean',\n default: false\n });\n registerOption('allow_svg_data_urls', { processor: 'boolean' });\n registerOption('allow_html_in_named_anchor', {\n processor: 'boolean',\n default: false\n });\n registerOption('allow_script_urls', {\n processor: 'boolean',\n default: false\n });\n registerOption('allow_unsafe_link_target', {\n processor: 'boolean',\n default: false\n });\n registerOption('allow_mathml_annotation_encodings', {\n processor: value => {\n const valid = isArrayOf(value, isString);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be an array of strings.'\n };\n },\n default: []\n });\n registerOption('convert_fonts_to_spans', {\n processor: 'boolean',\n default: true,\n deprecated: true\n });\n registerOption('fix_list_elements', {\n processor: 'boolean',\n default: false\n });\n registerOption('preserve_cdata', {\n processor: 'boolean',\n default: false\n });\n registerOption('remove_trailing_brs', {\n processor: 'boolean',\n default: true\n });\n registerOption('pad_empty_with_br', {\n processor: 'boolean',\n default: false\n });\n registerOption('inline_styles', {\n processor: 'boolean',\n default: true,\n deprecated: true\n });\n registerOption('element_format', {\n processor: 'string',\n default: 'html'\n });\n registerOption('entities', { processor: 'string' });\n registerOption('schema', {\n processor: 'string',\n default: 'html5'\n });\n registerOption('convert_urls', {\n processor: 'boolean',\n default: true\n });\n registerOption('relative_urls', {\n processor: 'boolean',\n default: true\n });\n registerOption('remove_script_host', {\n processor: 'boolean',\n default: true\n });\n registerOption('custom_elements', { processor: stringOrObjectProcessor });\n registerOption('extended_valid_elements', { processor: 'string' });\n registerOption('invalid_elements', { processor: 'string' });\n registerOption('invalid_styles', { processor: stringOrObjectProcessor });\n registerOption('valid_children', { processor: 'string' });\n registerOption('valid_classes', { processor: stringOrObjectProcessor });\n registerOption('valid_elements', { processor: 'string' });\n registerOption('valid_styles', { processor: stringOrObjectProcessor });\n registerOption('verify_html', {\n processor: 'boolean',\n default: true\n });\n registerOption('auto_focus', { processor: value => isString(value) || value === true });\n registerOption('browser_spellcheck', {\n processor: 'boolean',\n default: false\n });\n registerOption('protect', { processor: 'array' });\n registerOption('images_file_types', {\n processor: 'string',\n default: 'jpeg,jpg,jpe,jfi,jif,jfif,png,gif,bmp,webp'\n });\n registerOption('deprecation_warnings', {\n processor: 'boolean',\n default: true\n });\n registerOption('a11y_advanced_options', {\n processor: 'boolean',\n default: false\n });\n registerOption('api_key', { processor: 'string' });\n registerOption('license_key', { processor: 'string' });\n registerOption('paste_block_drop', {\n processor: 'boolean',\n default: false\n });\n registerOption('paste_data_images', {\n processor: 'boolean',\n default: true\n });\n registerOption('paste_preprocess', { processor: 'function' });\n registerOption('paste_postprocess', { processor: 'function' });\n registerOption('paste_webkit_styles', {\n processor: 'string',\n default: 'none'\n });\n registerOption('paste_remove_styles_if_webkit', {\n processor: 'boolean',\n default: true\n });\n registerOption('paste_merge_formats', {\n processor: 'boolean',\n default: true\n });\n registerOption('smart_paste', {\n processor: 'boolean',\n default: true\n });\n registerOption('paste_as_text', {\n processor: 'boolean',\n default: false\n });\n registerOption('paste_tab_spaces', {\n processor: 'number',\n default: 4\n });\n registerOption('text_patterns', {\n processor: value => {\n if (isArrayOf(value, isObject) || value === false) {\n const patterns = value === false ? [] : value;\n return {\n value: fromRawPatterns(patterns),\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be an array of objects or false.'\n };\n }\n },\n default: [\n {\n start: '*',\n end: '*',\n format: 'italic'\n },\n {\n start: '**',\n end: '**',\n format: 'bold'\n },\n {\n start: '#',\n format: 'h1',\n trigger: 'space'\n },\n {\n start: '##',\n format: 'h2',\n trigger: 'space'\n },\n {\n start: '###',\n format: 'h3',\n trigger: 'space'\n },\n {\n start: '####',\n format: 'h4',\n trigger: 'space'\n },\n {\n start: '#####',\n format: 'h5',\n trigger: 'space'\n },\n {\n start: '######',\n format: 'h6',\n trigger: 'space'\n },\n {\n start: '1.',\n cmd: 'InsertOrderedList',\n trigger: 'space'\n },\n {\n start: '*',\n cmd: 'InsertUnorderedList',\n trigger: 'space'\n },\n {\n start: '-',\n cmd: 'InsertUnorderedList',\n trigger: 'space'\n },\n {\n start: '>',\n cmd: 'mceBlockQuote',\n trigger: 'space'\n },\n {\n start: '---',\n cmd: 'InsertHorizontalRule',\n trigger: 'space'\n }\n ]\n });\n registerOption('text_patterns_lookup', {\n processor: value => {\n if (isFunction(value)) {\n return {\n value: fromRawPatternsLookup(value),\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be a single function'\n };\n }\n },\n default: _ctx => []\n });\n registerOption('noneditable_class', {\n processor: 'string',\n default: 'mceNonEditable'\n });\n registerOption('editable_class', {\n processor: 'string',\n default: 'mceEditable'\n });\n registerOption('noneditable_regexp', {\n processor: value => {\n if (isArrayOf(value, isRegExp)) {\n return {\n value,\n valid: true\n };\n } else if (isRegExp(value)) {\n return {\n value: [value],\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be a RegExp or an array of RegExp.'\n };\n }\n },\n default: []\n });\n registerOption('table_tab_navigation', {\n processor: 'boolean',\n default: true\n });\n registerOption('highlight_on_focus', {\n processor: 'boolean',\n default: true\n });\n registerOption('xss_sanitization', {\n processor: 'boolean',\n default: true\n });\n registerOption('details_initial_state', {\n processor: value => {\n const valid = contains$2([\n 'inherited',\n 'collapsed',\n 'expanded'\n ], value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be one of: inherited, collapsed, or expanded.'\n };\n },\n default: 'inherited'\n });\n registerOption('details_serialized_state', {\n processor: value => {\n const valid = contains$2([\n 'inherited',\n 'collapsed',\n 'expanded'\n ], value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be one of: inherited, collapsed, or expanded.'\n };\n },\n default: 'inherited'\n });\n registerOption('init_content_sync', {\n processor: 'boolean',\n default: false\n });\n registerOption('newdocument_content', {\n processor: 'string',\n default: ''\n });\n registerOption('sandbox_iframes', {\n processor: 'boolean',\n default: true\n });\n registerOption('sandbox_iframes_exclusions', {\n processor: 'string[]',\n default: [\n 'youtube.com',\n 'youtu.be',\n 'vimeo.com',\n 'player.vimeo.com',\n 'dailymotion.com',\n 'embed.music.apple.com',\n 'open.spotify.com',\n 'giphy.com',\n 'dai.ly',\n 'codepen.io'\n ]\n });\n registerOption('convert_unsafe_embeds', {\n processor: 'boolean',\n default: true\n });\n editor.on('ScriptsLoaded', () => {\n registerOption('directionality', {\n processor: 'string',\n default: I18n.isRtl() ? 'rtl' : undefined\n });\n registerOption('placeholder', {\n processor: 'string',\n default: DOM$a.getAttrib(editor.getElement(), 'placeholder')\n });\n });\n };\n const getIframeAttrs = option('iframe_attrs');\n const getDocType = option('doctype');\n const getDocumentBaseUrl = option('document_base_url');\n const getBodyId = option('body_id');\n const getBodyClass = option('body_class');\n const getContentSecurityPolicy = option('content_security_policy');\n const shouldPutBrInPre$1 = option('br_in_pre');\n const getForcedRootBlock = option('forced_root_block');\n const getForcedRootBlockAttrs = option('forced_root_block_attrs');\n const getNewlineBehavior = option('newline_behavior');\n const getBrNewLineSelector = option('br_newline_selector');\n const getNoNewLineSelector = option('no_newline_selector');\n const shouldKeepStyles = option('keep_styles');\n const shouldEndContainerOnEmptyBlock = option('end_container_on_empty_block');\n const isAutomaticUploadsEnabled = option('automatic_uploads');\n const shouldReuseFileName = option('images_reuse_filename');\n const shouldReplaceBlobUris = option('images_replace_blob_uris');\n const getIconPackName = option('icons');\n const getIconsUrl = option('icons_url');\n const getImageUploadUrl = option('images_upload_url');\n const getImageUploadBasePath = option('images_upload_base_path');\n const getImagesUploadCredentials = option('images_upload_credentials');\n const getImagesUploadHandler = option('images_upload_handler');\n const shouldUseContentCssCors = option('content_css_cors');\n const getReferrerPolicy = option('referrer_policy');\n const getLanguageCode = option('language');\n const getLanguageUrl = option('language_url');\n const shouldIndentUseMargin = option('indent_use_margin');\n const getIndentation = option('indentation');\n const getContentCss = option('content_css');\n const getContentStyle = option('content_style');\n const getFontCss = option('font_css');\n const getDirectionality = option('directionality');\n const getInlineBoundarySelector = option('inline_boundaries_selector');\n const getObjectResizing = option('object_resizing');\n const getResizeImgProportional = option('resize_img_proportional');\n const getPlaceholder = option('placeholder');\n const getEventRoot = option('event_root');\n const getServiceMessage = option('service_message');\n const getTheme = option('theme');\n const getThemeUrl = option('theme_url');\n const getModel = option('model');\n const getModelUrl = option('model_url');\n const isInlineBoundariesEnabled = option('inline_boundaries');\n const getFormats = option('formats');\n const getPreviewStyles = option('preview_styles');\n const canFormatEmptyLines = option('format_empty_lines');\n const getFormatNoneditableSelector = option('format_noneditable_selector');\n const getCustomUiSelector = option('custom_ui_selector');\n const isInline$1 = option('inline');\n const hasHiddenInput = option('hidden_input');\n const shouldPatchSubmit = option('submit_patch');\n const shouldAddFormSubmitTrigger = option('add_form_submit_trigger');\n const shouldAddUnloadTrigger = option('add_unload_trigger');\n const getCustomUndoRedoLevels = option('custom_undo_redo_levels');\n const shouldDisableNodeChange = option('disable_nodechange');\n const isReadOnly$1 = option('readonly');\n const hasEditableRoot$1 = option('editable_root');\n const hasContentCssCors = option('content_css_cors');\n const getPlugins = option('plugins');\n const getExternalPlugins$1 = option('external_plugins');\n const shouldBlockUnsupportedDrop = option('block_unsupported_drop');\n const isVisualAidsEnabled = option('visual');\n const getVisualAidsTableClass = option('visual_table_class');\n const getVisualAidsAnchorClass = option('visual_anchor_class');\n const getIframeAriaText = option('iframe_aria_text');\n const getSetupCallback = option('setup');\n const getInitInstanceCallback = option('init_instance_callback');\n const getUrlConverterCallback = option('urlconverter_callback');\n const getAutoFocus = option('auto_focus');\n const shouldBrowserSpellcheck = option('browser_spellcheck');\n const getProtect = option('protect');\n const shouldPasteBlockDrop = option('paste_block_drop');\n const shouldPasteDataImages = option('paste_data_images');\n const getPastePreProcess = option('paste_preprocess');\n const getPastePostProcess = option('paste_postprocess');\n const getNewDocumentContent = option('newdocument_content');\n const getPasteWebkitStyles = option('paste_webkit_styles');\n const shouldPasteRemoveWebKitStyles = option('paste_remove_styles_if_webkit');\n const shouldPasteMergeFormats = option('paste_merge_formats');\n const isSmartPasteEnabled = option('smart_paste');\n const isPasteAsTextEnabled = option('paste_as_text');\n const getPasteTabSpaces = option('paste_tab_spaces');\n const shouldAllowHtmlDataUrls = option('allow_html_data_urls');\n const getTextPatterns = option('text_patterns');\n const getTextPatternsLookup = option('text_patterns_lookup');\n const getNonEditableClass = option('noneditable_class');\n const getEditableClass = option('editable_class');\n const getNonEditableRegExps = option('noneditable_regexp');\n const shouldPreserveCData = option('preserve_cdata');\n const shouldHighlightOnFocus = option('highlight_on_focus');\n const shouldSanitizeXss = option('xss_sanitization');\n const shouldUseDocumentWrite = option('init_content_sync');\n const hasTextPatternsLookup = editor => editor.options.isSet('text_patterns_lookup');\n const getFontStyleValues = editor => Tools.explode(editor.options.get('font_size_style_values'));\n const getFontSizeClasses = editor => Tools.explode(editor.options.get('font_size_classes'));\n const isEncodingXml = editor => editor.options.get('encoding') === 'xml';\n const getAllowedImageFileTypes = editor => Tools.explode(editor.options.get('images_file_types'));\n const hasTableTabNavigation = option('table_tab_navigation');\n const getDetailsInitialState = option('details_initial_state');\n const getDetailsSerializedState = option('details_serialized_state');\n const shouldSandboxIframes = option('sandbox_iframes');\n const getSandboxIframesExclusions = editor => editor.options.get('sandbox_iframes_exclusions');\n const shouldConvertUnsafeEmbeds = option('convert_unsafe_embeds');\n const getLicenseKey = option('license_key');\n const getApiKey = option('api_key');\n const isDisabled$1 = option('disabled');\n\n const isElement$3 = isElement$6;\n const isText$5 = isText$b;\n const removeNode$1 = node => {\n const parentNode = node.parentNode;\n if (parentNode) {\n parentNode.removeChild(node);\n }\n };\n const trimCount = text => {\n const trimmedText = trim$2(text);\n return {\n count: text.length - trimmedText.length,\n text: trimmedText\n };\n };\n const deleteZwspChars = caretContainer => {\n let idx;\n while ((idx = caretContainer.data.lastIndexOf(ZWSP$1)) !== -1) {\n caretContainer.deleteData(idx, 1);\n }\n };\n const removeUnchanged = (caretContainer, pos) => {\n remove$2(caretContainer);\n return pos;\n };\n const removeTextAndReposition = (caretContainer, pos) => {\n const before = trimCount(caretContainer.data.substr(0, pos.offset()));\n const after = trimCount(caretContainer.data.substr(pos.offset()));\n const text = before.text + after.text;\n if (text.length > 0) {\n deleteZwspChars(caretContainer);\n return CaretPosition(caretContainer, pos.offset() - before.count);\n } else {\n return pos;\n }\n };\n const removeElementAndReposition = (caretContainer, pos) => {\n const parentNode = pos.container();\n const newPosition = indexOf$1(from(parentNode.childNodes), caretContainer).map(index => {\n return index < pos.offset() ? CaretPosition(parentNode, pos.offset() - 1) : pos;\n }).getOr(pos);\n remove$2(caretContainer);\n return newPosition;\n };\n const removeTextCaretContainer = (caretContainer, pos) => isText$5(caretContainer) && pos.container() === caretContainer ? removeTextAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n const removeElementCaretContainer = (caretContainer, pos) => pos.container() === caretContainer.parentNode ? removeElementAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n const removeAndReposition = (container, pos) => CaretPosition.isTextPosition(pos) ? removeTextCaretContainer(container, pos) : removeElementCaretContainer(container, pos);\n const remove$2 = caretContainerNode => {\n if (isElement$3(caretContainerNode) && isCaretContainer$2(caretContainerNode)) {\n if (hasContent(caretContainerNode)) {\n caretContainerNode.removeAttribute('data-mce-caret');\n } else {\n removeNode$1(caretContainerNode);\n }\n }\n if (isText$5(caretContainerNode)) {\n deleteZwspChars(caretContainerNode);\n if (caretContainerNode.data.length === 0) {\n removeNode$1(caretContainerNode);\n }\n }\n };\n\n const isContentEditableFalse$8 = isContentEditableFalse$b;\n const isMedia$1 = isMedia$2;\n const isTableCell$1 = isTableCell$3;\n const inlineFakeCaretSelector = '*[contentEditable=false],video,audio,embed,object';\n const getAbsoluteClientRect = (root, element, before) => {\n const clientRect = collapse(element.getBoundingClientRect(), before);\n let scrollX;\n let scrollY;\n if (root.tagName === 'BODY') {\n const docElm = root.ownerDocument.documentElement;\n scrollX = root.scrollLeft || docElm.scrollLeft;\n scrollY = root.scrollTop || docElm.scrollTop;\n } else {\n const rootRect = root.getBoundingClientRect();\n scrollX = root.scrollLeft - rootRect.left;\n scrollY = root.scrollTop - rootRect.top;\n }\n clientRect.left += scrollX;\n clientRect.right += scrollX;\n clientRect.top += scrollY;\n clientRect.bottom += scrollY;\n clientRect.width = 1;\n let margin = element.offsetWidth - element.clientWidth;\n if (margin > 0) {\n if (before) {\n margin *= -1;\n }\n clientRect.left += margin;\n clientRect.right += margin;\n }\n return clientRect;\n };\n const trimInlineCaretContainers = root => {\n var _a, _b;\n const fakeCaretTargetNodes = descendants(SugarElement.fromDom(root), inlineFakeCaretSelector);\n for (let i = 0; i < fakeCaretTargetNodes.length; i++) {\n const node = fakeCaretTargetNodes[i].dom;\n let sibling = node.previousSibling;\n if (endsWithCaretContainer$1(sibling)) {\n const data = sibling.data;\n if (data.length === 1) {\n (_a = sibling.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(sibling);\n } else {\n sibling.deleteData(data.length - 1, 1);\n }\n }\n sibling = node.nextSibling;\n if (startsWithCaretContainer$1(sibling)) {\n const data = sibling.data;\n if (data.length === 1) {\n (_b = sibling.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(sibling);\n } else {\n sibling.deleteData(0, 1);\n }\n }\n }\n };\n const FakeCaret = (editor, root, isBlock, hasFocus) => {\n const lastVisualCaret = value$2();\n let cursorInterval;\n let caretContainerNode;\n const caretBlock = getForcedRootBlock(editor);\n const dom = editor.dom;\n const show = (before, element) => {\n let rng;\n hide();\n if (isTableCell$1(element)) {\n return null;\n }\n if (isBlock(element)) {\n const caretContainer = insertBlock(caretBlock, element, before);\n const clientRect = getAbsoluteClientRect(root, element, before);\n dom.setStyle(caretContainer, 'top', clientRect.top);\n dom.setStyle(caretContainer, 'caret-color', 'transparent');\n caretContainerNode = caretContainer;\n const caret = dom.create('div', {\n 'class': 'mce-visual-caret',\n 'data-mce-bogus': 'all'\n });\n dom.setStyles(caret, { ...clientRect });\n dom.add(root, caret);\n lastVisualCaret.set({\n caret,\n element,\n before\n });\n if (before) {\n dom.addClass(caret, 'mce-visual-caret-before');\n }\n startBlink();\n rng = element.ownerDocument.createRange();\n rng.setStart(caretContainer, 0);\n rng.setEnd(caretContainer, 0);\n } else {\n caretContainerNode = insertInline$1(element, before);\n rng = element.ownerDocument.createRange();\n if (isInlineFakeCaretTarget(caretContainerNode.nextSibling)) {\n rng.setStart(caretContainerNode, 0);\n rng.setEnd(caretContainerNode, 0);\n } else {\n rng.setStart(caretContainerNode, 1);\n rng.setEnd(caretContainerNode, 1);\n }\n return rng;\n }\n return rng;\n };\n const hide = () => {\n trimInlineCaretContainers(root);\n if (caretContainerNode) {\n remove$2(caretContainerNode);\n caretContainerNode = null;\n }\n lastVisualCaret.on(caretState => {\n dom.remove(caretState.caret);\n lastVisualCaret.clear();\n });\n if (cursorInterval) {\n clearInterval(cursorInterval);\n cursorInterval = undefined;\n }\n };\n const startBlink = () => {\n cursorInterval = setInterval(() => {\n lastVisualCaret.on(caretState => {\n if (hasFocus()) {\n dom.toggleClass(caretState.caret, 'mce-visual-caret-hidden');\n } else {\n dom.addClass(caretState.caret, 'mce-visual-caret-hidden');\n }\n });\n }, 500);\n };\n const reposition = () => {\n lastVisualCaret.on(caretState => {\n const clientRect = getAbsoluteClientRect(root, caretState.element, caretState.before);\n dom.setStyles(caretState.caret, { ...clientRect });\n });\n };\n const destroy = () => clearInterval(cursorInterval);\n const getCss = () => '.mce-visual-caret {' + 'position: absolute;' + 'background-color: black;' + 'background-color: currentcolor;' + '}' + '.mce-visual-caret-hidden {' + 'display: none;' + '}' + '*[data-mce-caret] {' + 'position: absolute;' + 'left: -1000px;' + 'right: auto;' + 'top: 0;' + 'margin: 0;' + 'padding: 0;' + '}';\n return {\n show,\n hide,\n getCss,\n reposition,\n destroy\n };\n };\n const isFakeCaretTableBrowser = () => Env.browser.isFirefox();\n const isInlineFakeCaretTarget = node => isContentEditableFalse$8(node) || isMedia$1(node);\n const isFakeCaretTarget = node => {\n const isTarget = isInlineFakeCaretTarget(node) || isTable$2(node) && isFakeCaretTableBrowser();\n return isTarget && parentElement(SugarElement.fromDom(node)).exists(isEditable$2);\n };\n\n const isContentEditableTrue$1 = isContentEditableTrue$3;\n const isContentEditableFalse$7 = isContentEditableFalse$b;\n const isMedia = isMedia$2;\n const isBlockLike = matchStyleValues('display', 'block table table-cell table-row table-caption list-item');\n const isCaretContainer = isCaretContainer$2;\n const isCaretContainerBlock = isCaretContainerBlock$1;\n const isElement$2 = isElement$6;\n const isText$4 = isText$b;\n const isCaretCandidate$1 = isCaretCandidate$3;\n const isForwards = direction => direction === 1;\n const isBackwards = direction => direction === -1;\n const skipCaretContainers = (walk, shallow) => {\n let node;\n while (node = walk(shallow)) {\n if (!isCaretContainerBlock(node)) {\n return node;\n }\n }\n return null;\n };\n const findNode = (node, direction, predicateFn, rootNode, shallow) => {\n const walker = new DomTreeWalker(node, rootNode);\n const isCefOrCaretContainer = isContentEditableFalse$7(node) || isCaretContainerBlock(node);\n let tempNode;\n if (isBackwards(direction)) {\n if (isCefOrCaretContainer) {\n tempNode = skipCaretContainers(walker.prev.bind(walker), true);\n if (predicateFn(tempNode)) {\n return tempNode;\n }\n }\n while (tempNode = skipCaretContainers(walker.prev.bind(walker), shallow)) {\n if (predicateFn(tempNode)) {\n return tempNode;\n }\n }\n }\n if (isForwards(direction)) {\n if (isCefOrCaretContainer) {\n tempNode = skipCaretContainers(walker.next.bind(walker), true);\n if (predicateFn(tempNode)) {\n return tempNode;\n }\n }\n while (tempNode = skipCaretContainers(walker.next.bind(walker), shallow)) {\n if (predicateFn(tempNode)) {\n return tempNode;\n }\n }\n }\n return null;\n };\n const getEditingHost = (node, rootNode) => {\n const isCETrue = node => isContentEditableTrue$1(node.dom);\n const isRoot = node => node.dom === rootNode;\n return ancestor$4(SugarElement.fromDom(node), isCETrue, isRoot).map(elm => elm.dom).getOr(rootNode);\n };\n const getParentBlock$3 = (node, rootNode) => {\n while (node && node !== rootNode) {\n if (isBlockLike(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n const isInSameBlock = (caretPosition1, caretPosition2, rootNode) => getParentBlock$3(caretPosition1.container(), rootNode) === getParentBlock$3(caretPosition2.container(), rootNode);\n const getChildNodeAtRelativeOffset = (relativeOffset, caretPosition) => {\n if (!caretPosition) {\n return Optional.none();\n }\n const container = caretPosition.container();\n const offset = caretPosition.offset();\n if (!isElement$2(container)) {\n return Optional.none();\n }\n return Optional.from(container.childNodes[offset + relativeOffset]);\n };\n const beforeAfter = (before, node) => {\n var _a;\n const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n const range = doc.createRange();\n if (before) {\n range.setStartBefore(node);\n range.setEndBefore(node);\n } else {\n range.setStartAfter(node);\n range.setEndAfter(node);\n }\n return range;\n };\n const isNodesInSameBlock = (root, node1, node2) => getParentBlock$3(node1, root) === getParentBlock$3(node2, root);\n const lean = (left, root, node) => {\n const siblingName = left ? 'previousSibling' : 'nextSibling';\n let tempNode = node;\n while (tempNode && tempNode !== root) {\n let sibling = tempNode[siblingName];\n if (sibling && isCaretContainer(sibling)) {\n sibling = sibling[siblingName];\n }\n if (isContentEditableFalse$7(sibling) || isMedia(sibling)) {\n if (isNodesInSameBlock(root, sibling, tempNode)) {\n return sibling;\n }\n break;\n }\n if (isCaretCandidate$1(sibling)) {\n break;\n }\n tempNode = tempNode.parentNode;\n }\n return null;\n };\n const before$2 = curry(beforeAfter, true);\n const after$2 = curry(beforeAfter, false);\n const normalizeRange = (direction, root, range) => {\n let node;\n const leanLeft = curry(lean, true, root);\n const leanRight = curry(lean, false, root);\n const container = range.startContainer;\n const offset = range.startOffset;\n if (isCaretContainerBlock$1(container)) {\n const block = isText$4(container) ? container.parentNode : container;\n const location = block.getAttribute('data-mce-caret');\n if (location === 'before') {\n node = block.nextSibling;\n if (isFakeCaretTarget(node)) {\n return before$2(node);\n }\n }\n if (location === 'after') {\n node = block.previousSibling;\n if (isFakeCaretTarget(node)) {\n return after$2(node);\n }\n }\n }\n if (!range.collapsed) {\n return range;\n }\n if (isText$b(container)) {\n if (isCaretContainer(container)) {\n if (direction === 1) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n node = leanLeft(container);\n if (node) {\n return after$2(node);\n }\n }\n if (direction === -1) {\n node = leanLeft(container);\n if (node) {\n return after$2(node);\n }\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n }\n return range;\n }\n if (endsWithCaretContainer$1(container) && offset >= container.data.length - 1) {\n if (direction === 1) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n }\n return range;\n }\n if (startsWithCaretContainer$1(container) && offset <= 1) {\n if (direction === -1) {\n node = leanLeft(container);\n if (node) {\n return after$2(node);\n }\n }\n return range;\n }\n if (offset === container.data.length) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n return range;\n }\n if (offset === 0) {\n node = leanLeft(container);\n if (node) {\n return after$2(node);\n }\n return range;\n }\n }\n return range;\n };\n const getRelativeCefElm = (forward, caretPosition) => getChildNodeAtRelativeOffset(forward ? 0 : -1, caretPosition).filter(isContentEditableFalse$7);\n const getNormalizedRangeEndPoint = (direction, root, range) => {\n const normalizedRange = normalizeRange(direction, root, range);\n return direction === -1 ? CaretPosition.fromRangeStart(normalizedRange) : CaretPosition.fromRangeEnd(normalizedRange);\n };\n const getElementFromPosition = pos => Optional.from(pos.getNode()).map(SugarElement.fromDom);\n const getElementFromPrevPosition = pos => Optional.from(pos.getNode(true)).map(SugarElement.fromDom);\n const getVisualCaretPosition = (walkFn, caretPosition) => {\n let pos = caretPosition;\n while (pos = walkFn(pos)) {\n if (pos.isVisible()) {\n return pos;\n }\n }\n return pos;\n };\n const isMoveInsideSameBlock = (from, to) => {\n const inSameBlock = isInSameBlock(from, to);\n if (!inSameBlock && isBr$6(from.getNode())) {\n return true;\n }\n return inSameBlock;\n };\n\n const isContentEditableFalse$6 = isContentEditableFalse$b;\n const isText$3 = isText$b;\n const isElement$1 = isElement$6;\n const isBr$2 = isBr$6;\n const isCaretCandidate = isCaretCandidate$3;\n const isAtomic = isAtomic$1;\n const isEditableCaretCandidate = isEditableCaretCandidate$1;\n const getParents$3 = (node, root) => {\n const parents = [];\n let tempNode = node;\n while (tempNode && tempNode !== root) {\n parents.push(tempNode);\n tempNode = tempNode.parentNode;\n }\n return parents;\n };\n const nodeAtIndex = (container, offset) => {\n if (container.hasChildNodes() && offset < container.childNodes.length) {\n return container.childNodes[offset];\n }\n return null;\n };\n const getCaretCandidatePosition = (direction, node) => {\n if (isForwards(direction)) {\n if (isCaretCandidate(node.previousSibling) && !isText$3(node.previousSibling)) {\n return CaretPosition.before(node);\n }\n if (isText$3(node)) {\n return CaretPosition(node, 0);\n }\n }\n if (isBackwards(direction)) {\n if (isCaretCandidate(node.nextSibling) && !isText$3(node.nextSibling)) {\n return CaretPosition.after(node);\n }\n if (isText$3(node)) {\n return CaretPosition(node, node.data.length);\n }\n }\n if (isBackwards(direction)) {\n if (isBr$2(node)) {\n return CaretPosition.before(node);\n }\n return CaretPosition.after(node);\n }\n return CaretPosition.before(node);\n };\n const moveForwardFromBr = (root, nextNode) => {\n const nextSibling = nextNode.nextSibling;\n if (nextSibling && isCaretCandidate(nextSibling)) {\n if (isText$3(nextSibling)) {\n return CaretPosition(nextSibling, 0);\n } else {\n return CaretPosition.before(nextSibling);\n }\n } else {\n return findCaretPosition$1(1, CaretPosition.after(nextNode), root);\n }\n };\n const findCaretPosition$1 = (direction, startPos, root) => {\n let node;\n let nextNode;\n let innerNode;\n let caretPosition;\n if (!isElement$1(root) || !startPos) {\n return null;\n }\n if (startPos.isEqual(CaretPosition.after(root)) && root.lastChild) {\n caretPosition = CaretPosition.after(root.lastChild);\n if (isBackwards(direction) && isCaretCandidate(root.lastChild) && isElement$1(root.lastChild)) {\n return isBr$2(root.lastChild) ? CaretPosition.before(root.lastChild) : caretPosition;\n }\n } else {\n caretPosition = startPos;\n }\n const container = caretPosition.container();\n let offset = caretPosition.offset();\n if (isText$3(container)) {\n if (isBackwards(direction) && offset > 0) {\n return CaretPosition(container, --offset);\n }\n if (isForwards(direction) && offset < container.length) {\n return CaretPosition(container, ++offset);\n }\n node = container;\n } else {\n if (isBackwards(direction) && offset > 0) {\n nextNode = nodeAtIndex(container, offset - 1);\n if (isCaretCandidate(nextNode)) {\n if (!isAtomic(nextNode)) {\n innerNode = findNode(nextNode, direction, isEditableCaretCandidate, nextNode);\n if (innerNode) {\n if (isText$3(innerNode)) {\n return CaretPosition(innerNode, innerNode.data.length);\n }\n return CaretPosition.after(innerNode);\n }\n }\n if (isText$3(nextNode)) {\n return CaretPosition(nextNode, nextNode.data.length);\n }\n return CaretPosition.before(nextNode);\n }\n }\n if (isForwards(direction) && offset < container.childNodes.length) {\n nextNode = nodeAtIndex(container, offset);\n if (isCaretCandidate(nextNode)) {\n if (isBr$2(nextNode)) {\n return moveForwardFromBr(root, nextNode);\n }\n if (!isAtomic(nextNode)) {\n innerNode = findNode(nextNode, direction, isEditableCaretCandidate, nextNode);\n if (innerNode) {\n if (isText$3(innerNode)) {\n return CaretPosition(innerNode, 0);\n }\n return CaretPosition.before(innerNode);\n }\n }\n if (isText$3(nextNode)) {\n return CaretPosition(nextNode, 0);\n }\n return CaretPosition.after(nextNode);\n }\n }\n node = nextNode ? nextNode : caretPosition.getNode();\n }\n if (node && (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart())) {\n node = findNode(node, direction, always, root, true);\n if (isEditableCaretCandidate(node, root)) {\n return getCaretCandidatePosition(direction, node);\n }\n }\n nextNode = node ? findNode(node, direction, isEditableCaretCandidate, root) : node;\n const rootContentEditableFalseElm = last$1(filter$5(getParents$3(container, root), isContentEditableFalse$6));\n if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) {\n if (isForwards(direction)) {\n caretPosition = CaretPosition.after(rootContentEditableFalseElm);\n } else {\n caretPosition = CaretPosition.before(rootContentEditableFalseElm);\n }\n return caretPosition;\n }\n if (nextNode) {\n return getCaretCandidatePosition(direction, nextNode);\n }\n return null;\n };\n const CaretWalker = root => ({\n next: caretPosition => {\n return findCaretPosition$1(1, caretPosition, root);\n },\n prev: caretPosition => {\n return findCaretPosition$1(-1, caretPosition, root);\n }\n });\n\n const walkToPositionIn = (forward, root, start) => {\n const position = forward ? CaretPosition.before(start) : CaretPosition.after(start);\n return fromPosition(forward, root, position);\n };\n const afterElement = node => isBr$6(node) ? CaretPosition.before(node) : CaretPosition.after(node);\n const isBeforeOrStart = position => {\n if (CaretPosition.isTextPosition(position)) {\n return position.offset() === 0;\n } else {\n return isCaretCandidate$3(position.getNode());\n }\n };\n const isAfterOrEnd = position => {\n if (CaretPosition.isTextPosition(position)) {\n const container = position.container();\n return position.offset() === container.data.length;\n } else {\n return isCaretCandidate$3(position.getNode(true));\n }\n };\n const isBeforeAfterSameElement = (from, to) => !CaretPosition.isTextPosition(from) && !CaretPosition.isTextPosition(to) && from.getNode() === to.getNode(true);\n const isAtBr = position => !CaretPosition.isTextPosition(position) && isBr$6(position.getNode());\n const shouldSkipPosition = (forward, from, to) => {\n if (forward) {\n return !isBeforeAfterSameElement(from, to) && !isAtBr(from) && isAfterOrEnd(from) && isBeforeOrStart(to);\n } else {\n return !isBeforeAfterSameElement(to, from) && isBeforeOrStart(from) && isAfterOrEnd(to);\n }\n };\n const fromPosition = (forward, root, pos) => {\n const walker = CaretWalker(root);\n return Optional.from(forward ? walker.next(pos) : walker.prev(pos));\n };\n const navigate = (forward, root, from) => fromPosition(forward, root, from).bind(to => {\n if (isInSameBlock(from, to, root) && shouldSkipPosition(forward, from, to)) {\n return fromPosition(forward, root, to);\n } else {\n return Optional.some(to);\n }\n });\n const navigateIgnore = (forward, root, from, ignoreFilter) => navigate(forward, root, from).bind(pos => ignoreFilter(pos) ? navigateIgnore(forward, root, pos, ignoreFilter) : Optional.some(pos));\n const positionIn = (forward, element) => {\n const startNode = forward ? element.firstChild : element.lastChild;\n if (isText$b(startNode)) {\n return Optional.some(CaretPosition(startNode, forward ? 0 : startNode.data.length));\n } else if (startNode) {\n if (isCaretCandidate$3(startNode)) {\n return Optional.some(forward ? CaretPosition.before(startNode) : afterElement(startNode));\n } else {\n return walkToPositionIn(forward, element, startNode);\n }\n } else {\n return Optional.none();\n }\n };\n const nextPosition = curry(fromPosition, true);\n const prevPosition = curry(fromPosition, false);\n const firstPositionIn = curry(positionIn, true);\n const lastPositionIn = curry(positionIn, false);\n\n const CARET_ID = '_mce_caret';\n const isCaretNode = node => isElement$6(node) && node.id === CARET_ID;\n const getParentCaretContainer = (body, node) => {\n let currentNode = node;\n while (currentNode && currentNode !== body) {\n if (isCaretNode(currentNode)) {\n return currentNode;\n }\n currentNode = currentNode.parentNode;\n }\n return null;\n };\n\n const isStringPathBookmark = bookmark => isString(bookmark.start);\n const isRangeBookmark = bookmark => has$2(bookmark, 'rng');\n const isIdBookmark = bookmark => has$2(bookmark, 'id');\n const isIndexBookmark = bookmark => has$2(bookmark, 'name');\n const isPathBookmark = bookmark => Tools.isArray(bookmark.start);\n\n const isForwardBookmark = bookmark => !isIndexBookmark(bookmark) && isBoolean(bookmark.forward) ? bookmark.forward : true;\n const addBogus = (dom, node) => {\n if (isElement$6(node) && dom.isBlock(node) && !node.innerHTML) {\n node.innerHTML = '
';\n }\n return node;\n };\n const resolveCaretPositionBookmark = (dom, bookmark) => {\n const startPos = Optional.from(resolve$1(dom.getRoot(), bookmark.start));\n const endPos = Optional.from(resolve$1(dom.getRoot(), bookmark.end));\n return lift2(startPos, endPos, (start, end) => {\n const range = dom.createRng();\n range.setStart(start.container(), start.offset());\n range.setEnd(end.container(), end.offset());\n return {\n range,\n forward: isForwardBookmark(bookmark)\n };\n });\n };\n const insertZwsp = (node, rng) => {\n var _a;\n const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n const textNode = doc.createTextNode(ZWSP$1);\n node.appendChild(textNode);\n rng.setStart(textNode, 0);\n rng.setEnd(textNode, 0);\n };\n const isEmpty$1 = node => !node.hasChildNodes();\n const tryFindRangePosition = (node, rng) => lastPositionIn(node).fold(never, pos => {\n rng.setStart(pos.container(), pos.offset());\n rng.setEnd(pos.container(), pos.offset());\n return true;\n });\n const padEmptyCaretContainer = (root, node, rng) => {\n if (isEmpty$1(node) && getParentCaretContainer(root, node)) {\n insertZwsp(node, rng);\n return true;\n } else {\n return false;\n }\n };\n const setEndPoint = (dom, start, bookmark, rng) => {\n const point = bookmark[start ? 'start' : 'end'];\n const root = dom.getRoot();\n if (point) {\n let node = root;\n let offset = point[0];\n for (let i = point.length - 1; node && i >= 1; i--) {\n const children = node.childNodes;\n if (padEmptyCaretContainer(root, node, rng)) {\n return true;\n }\n if (point[i] > children.length - 1) {\n if (padEmptyCaretContainer(root, node, rng)) {\n return true;\n }\n return tryFindRangePosition(node, rng);\n }\n node = children[point[i]];\n }\n if (isText$b(node)) {\n offset = Math.min(point[0], node.data.length);\n }\n if (isElement$6(node)) {\n offset = Math.min(point[0], node.childNodes.length);\n }\n if (start) {\n rng.setStart(node, offset);\n } else {\n rng.setEnd(node, offset);\n }\n }\n return true;\n };\n const isValidTextNode = node => isText$b(node) && node.data.length > 0;\n const restoreEndPoint = (dom, suffix, bookmark) => {\n const marker = dom.get(bookmark.id + '_' + suffix);\n const markerParent = marker === null || marker === void 0 ? void 0 : marker.parentNode;\n const keep = bookmark.keep;\n if (marker && markerParent) {\n let container;\n let offset;\n if (suffix === 'start') {\n if (!keep) {\n container = markerParent;\n offset = dom.nodeIndex(marker);\n } else {\n if (marker.hasChildNodes()) {\n container = marker.firstChild;\n offset = 1;\n } else if (isValidTextNode(marker.nextSibling)) {\n container = marker.nextSibling;\n offset = 0;\n } else if (isValidTextNode(marker.previousSibling)) {\n container = marker.previousSibling;\n offset = marker.previousSibling.data.length;\n } else {\n container = markerParent;\n offset = dom.nodeIndex(marker) + 1;\n }\n }\n } else {\n if (!keep) {\n container = markerParent;\n offset = dom.nodeIndex(marker);\n } else {\n if (marker.hasChildNodes()) {\n container = marker.firstChild;\n offset = 1;\n } else if (isValidTextNode(marker.previousSibling)) {\n container = marker.previousSibling;\n offset = marker.previousSibling.data.length;\n } else {\n container = markerParent;\n offset = dom.nodeIndex(marker);\n }\n }\n }\n if (!keep) {\n const prev = marker.previousSibling;\n const next = marker.nextSibling;\n Tools.each(Tools.grep(marker.childNodes), node => {\n if (isText$b(node)) {\n node.data = node.data.replace(/\\uFEFF/g, '');\n }\n });\n let otherMarker;\n while (otherMarker = dom.get(bookmark.id + '_' + suffix)) {\n dom.remove(otherMarker, true);\n }\n if (isText$b(next) && isText$b(prev) && !Env.browser.isOpera()) {\n const idx = prev.data.length;\n prev.appendData(next.data);\n dom.remove(next);\n container = prev;\n offset = idx;\n }\n }\n return Optional.some(CaretPosition(container, offset));\n } else {\n return Optional.none();\n }\n };\n const resolvePaths = (dom, bookmark) => {\n const range = dom.createRng();\n if (setEndPoint(dom, true, bookmark, range) && setEndPoint(dom, false, bookmark, range)) {\n return Optional.some({\n range,\n forward: isForwardBookmark(bookmark)\n });\n } else {\n return Optional.none();\n }\n };\n const resolveId = (dom, bookmark) => {\n const startPos = restoreEndPoint(dom, 'start', bookmark);\n const endPos = restoreEndPoint(dom, 'end', bookmark);\n return lift2(startPos, endPos.or(startPos), (spos, epos) => {\n const range = dom.createRng();\n range.setStart(addBogus(dom, spos.container()), spos.offset());\n range.setEnd(addBogus(dom, epos.container()), epos.offset());\n return {\n range,\n forward: isForwardBookmark(bookmark)\n };\n });\n };\n const resolveIndex = (dom, bookmark) => Optional.from(dom.select(bookmark.name)[bookmark.index]).map(elm => {\n const range = dom.createRng();\n range.selectNode(elm);\n return {\n range,\n forward: true\n };\n });\n const resolve = (selection, bookmark) => {\n const dom = selection.dom;\n if (bookmark) {\n if (isPathBookmark(bookmark)) {\n return resolvePaths(dom, bookmark);\n } else if (isStringPathBookmark(bookmark)) {\n return resolveCaretPositionBookmark(dom, bookmark);\n } else if (isIdBookmark(bookmark)) {\n return resolveId(dom, bookmark);\n } else if (isIndexBookmark(bookmark)) {\n return resolveIndex(dom, bookmark);\n } else if (isRangeBookmark(bookmark)) {\n return Optional.some({\n range: bookmark.rng,\n forward: isForwardBookmark(bookmark)\n });\n }\n }\n return Optional.none();\n };\n\n const getBookmark$2 = (selection, type, normalized) => {\n return getBookmark$3(selection, type, normalized);\n };\n const moveToBookmark = (selection, bookmark) => {\n resolve(selection, bookmark).each(({range, forward}) => {\n selection.setRng(range, forward);\n });\n };\n const isBookmarkNode$1 = node => {\n return isElement$6(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\n };\n\n const is = expected => actual => expected === actual;\n const isNbsp = is(nbsp);\n const isWhiteSpace = chr => chr !== '' && ' \\f\\n\\r\\t\\x0B'.indexOf(chr) !== -1;\n const isContent = chr => !isWhiteSpace(chr) && !isNbsp(chr) && !isZwsp$2(chr);\n\n const getRanges$1 = selection => {\n const ranges = [];\n if (selection) {\n for (let i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n }\n return ranges;\n };\n const getSelectedNodes = ranges => {\n return bind$3(ranges, range => {\n const node = getSelectedNode(range);\n return node ? [SugarElement.fromDom(node)] : [];\n });\n };\n const hasMultipleRanges = selection => {\n return getRanges$1(selection).length > 1;\n };\n\n const getCellsFromRanges = ranges => filter$5(getSelectedNodes(ranges), isTableCell$2);\n const getCellsFromElement = elm => descendants(elm, 'td[data-mce-selected],th[data-mce-selected]');\n const getCellsFromElementOrRanges = (ranges, element) => {\n const selectedCells = getCellsFromElement(element);\n return selectedCells.length > 0 ? selectedCells : getCellsFromRanges(ranges);\n };\n const getCellsFromEditor = editor => getCellsFromElementOrRanges(getRanges$1(editor.selection.getSel()), SugarElement.fromDom(editor.getBody()));\n const getClosestTable = (cell, isRoot) => ancestor$3(cell, 'table', isRoot);\n\n const getStartNode = rng => {\n const sc = rng.startContainer, so = rng.startOffset;\n if (isText$b(sc)) {\n return so === 0 ? Optional.some(SugarElement.fromDom(sc)) : Optional.none();\n } else {\n return Optional.from(sc.childNodes[so]).map(SugarElement.fromDom);\n }\n };\n const getEndNode = rng => {\n const ec = rng.endContainer, eo = rng.endOffset;\n if (isText$b(ec)) {\n return eo === ec.data.length ? Optional.some(SugarElement.fromDom(ec)) : Optional.none();\n } else {\n return Optional.from(ec.childNodes[eo - 1]).map(SugarElement.fromDom);\n }\n };\n const getFirstChildren = node => {\n return firstChild(node).fold(constant([node]), child => {\n return [node].concat(getFirstChildren(child));\n });\n };\n const getLastChildren = node => {\n return lastChild(node).fold(constant([node]), child => {\n if (name(child) === 'br') {\n return prevSibling(child).map(sibling => {\n return [node].concat(getLastChildren(sibling));\n }).getOr([]);\n } else {\n return [node].concat(getLastChildren(child));\n }\n });\n };\n const hasAllContentsSelected = (elm, rng) => {\n return lift2(getStartNode(rng), getEndNode(rng), (startNode, endNode) => {\n const start = find$2(getFirstChildren(elm), curry(eq, startNode));\n const end = find$2(getLastChildren(elm), curry(eq, endNode));\n return start.isSome() && end.isSome();\n }).getOr(false);\n };\n const moveEndPoint = (dom, rng, node, start) => {\n const root = node;\n const walker = new DomTreeWalker(node, root);\n const moveCaretBeforeOnEnterElementsMap = filter$4(dom.schema.getMoveCaretBeforeOnEnterElements(), (_, name) => !contains$2([\n 'td',\n 'th',\n 'table'\n ], name.toLowerCase()));\n let currentNode = node;\n do {\n if (isText$b(currentNode) && Tools.trim(currentNode.data).length !== 0) {\n if (start) {\n rng.setStart(currentNode, 0);\n } else {\n rng.setEnd(currentNode, currentNode.data.length);\n }\n return;\n }\n if (moveCaretBeforeOnEnterElementsMap[currentNode.nodeName]) {\n if (start) {\n rng.setStartBefore(currentNode);\n } else {\n if (currentNode.nodeName === 'BR') {\n rng.setEndBefore(currentNode);\n } else {\n rng.setEndAfter(currentNode);\n }\n }\n return;\n }\n } while (currentNode = start ? walker.next() : walker.prev());\n if (root.nodeName === 'BODY') {\n if (start) {\n rng.setStart(root, 0);\n } else {\n rng.setEnd(root, root.childNodes.length);\n }\n }\n };\n const hasAnyRanges = editor => {\n const sel = editor.selection.getSel();\n return isNonNullable(sel) && sel.rangeCount > 0;\n };\n const runOnRanges = (editor, executor) => {\n const fakeSelectionNodes = getCellsFromEditor(editor);\n if (fakeSelectionNodes.length > 0) {\n each$e(fakeSelectionNodes, elem => {\n const node = elem.dom;\n const fakeNodeRng = editor.dom.createRng();\n fakeNodeRng.setStartBefore(node);\n fakeNodeRng.setEndAfter(node);\n executor(fakeNodeRng, true);\n });\n } else {\n executor(editor.selection.getRng(), false);\n }\n };\n const preserve = (selection, fillBookmark, executor) => {\n const bookmark = getPersistentBookmark(selection, fillBookmark);\n executor(bookmark);\n selection.moveToBookmark(bookmark);\n };\n\n const isNode = node => isNumber(node === null || node === void 0 ? void 0 : node.nodeType);\n const isElementNode$1 = node => isElement$6(node) && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus$1(node);\n const isElementDirectlySelected = (dom, node) => {\n if (isElementNode$1(node) && !/^(TD|TH)$/.test(node.nodeName)) {\n const selectedAttr = dom.getAttrib(node, 'data-mce-selected');\n const value = parseInt(selectedAttr, 10);\n return !isNaN(value) && value > 0;\n } else {\n return false;\n }\n };\n const preserveSelection = (editor, action, shouldMoveStart) => {\n const {selection, dom} = editor;\n const selectedNodeBeforeAction = selection.getNode();\n const isSelectedBeforeNodeNoneditable = isContentEditableFalse$b(selectedNodeBeforeAction);\n preserve(selection, true, () => {\n action();\n });\n const isBeforeNodeStillNoneditable = isSelectedBeforeNodeNoneditable && isContentEditableFalse$b(selectedNodeBeforeAction);\n if (isBeforeNodeStillNoneditable && dom.isChildOf(selectedNodeBeforeAction, editor.getBody())) {\n editor.selection.select(selectedNodeBeforeAction);\n } else if (shouldMoveStart(selection.getStart())) {\n moveStartToNearestText(dom, selection);\n }\n };\n const moveStartToNearestText = (dom, selection) => {\n var _a, _b;\n const rng = selection.getRng();\n const {startContainer, startOffset} = rng;\n const selectedNode = selection.getNode();\n if (isElementDirectlySelected(dom, selectedNode)) {\n return;\n }\n if (isElement$6(startContainer)) {\n const nodes = startContainer.childNodes;\n const root = dom.getRoot();\n let walker;\n if (startOffset < nodes.length) {\n const startNode = nodes[startOffset];\n walker = new DomTreeWalker(startNode, (_a = dom.getParent(startNode, dom.isBlock)) !== null && _a !== void 0 ? _a : root);\n } else {\n const startNode = nodes[nodes.length - 1];\n walker = new DomTreeWalker(startNode, (_b = dom.getParent(startNode, dom.isBlock)) !== null && _b !== void 0 ? _b : root);\n walker.next(true);\n }\n for (let node = walker.current(); node; node = walker.next()) {\n if (dom.getContentEditable(node) === 'false') {\n return;\n } else if (isText$b(node) && !isWhiteSpaceNode$1(node)) {\n rng.setStart(node, 0);\n selection.setRng(rng);\n return;\n }\n }\n }\n };\n const getNonWhiteSpaceSibling = (node, next, inc) => {\n if (node) {\n const nextName = next ? 'nextSibling' : 'previousSibling';\n for (node = inc ? node : node[nextName]; node; node = node[nextName]) {\n if (isElement$6(node) || !isWhiteSpaceNode$1(node)) {\n return node;\n }\n }\n }\n return undefined;\n };\n const isTextBlock$1 = (schema, node) => !!schema.getTextBlockElements()[node.nodeName.toLowerCase()] || isTransparentBlock(schema, node);\n const isValid = (ed, parent, child) => {\n return ed.schema.isValidChild(parent, child);\n };\n const isWhiteSpaceNode$1 = (node, allowSpaces = false) => {\n if (isNonNullable(node) && isText$b(node)) {\n const data = allowSpaces ? node.data.replace(/ /g, '\\xA0') : node.data;\n return isWhitespaceText(data);\n } else {\n return false;\n }\n };\n const isEmptyTextNode$1 = node => {\n return isNonNullable(node) && isText$b(node) && node.length === 0;\n };\n const isWrapNoneditableTarget = (editor, node) => {\n const baseDataSelector = '[data-mce-cef-wrappable]';\n const formatNoneditableSelector = getFormatNoneditableSelector(editor);\n const selector = isEmpty$3(formatNoneditableSelector) ? baseDataSelector : `${ baseDataSelector },${ formatNoneditableSelector }`;\n return is$1(SugarElement.fromDom(node), selector);\n };\n const isWrappableNoneditable = (editor, node) => {\n const dom = editor.dom;\n return isElementNode$1(node) && dom.getContentEditable(node) === 'false' && isWrapNoneditableTarget(editor, node) && dom.select('[contenteditable=\"true\"]', node).length === 0;\n };\n const replaceVars = (value, vars) => {\n if (isFunction(value)) {\n return value(vars);\n } else if (isNonNullable(vars)) {\n value = value.replace(/%(\\w+)/g, (str, name) => {\n return vars[name] || str;\n });\n }\n return value;\n };\n const isEq$5 = (str1, str2) => {\n str1 = str1 || '';\n str2 = str2 || '';\n str1 = '' + (str1.nodeName || str1);\n str2 = '' + (str2.nodeName || str2);\n return str1.toLowerCase() === str2.toLowerCase();\n };\n const normalizeStyleValue = (value, name) => {\n if (isNullable(value)) {\n return null;\n } else {\n let strValue = String(value);\n if (name === 'color' || name === 'backgroundColor') {\n strValue = rgbaToHexString(strValue);\n }\n if (name === 'fontWeight' && value === 700) {\n strValue = 'bold';\n }\n if (name === 'fontFamily') {\n strValue = strValue.replace(/[\\'\\\"]/g, '').replace(/,\\s+/g, ',');\n }\n return strValue;\n }\n };\n const getStyle = (dom, node, name) => {\n const style = dom.getStyle(node, name);\n return normalizeStyleValue(style, name);\n };\n const getTextDecoration = (dom, node) => {\n let decoration;\n dom.getParent(node, n => {\n if (isElement$6(n)) {\n decoration = dom.getStyle(n, 'text-decoration');\n return !!decoration && decoration !== 'none';\n } else {\n return false;\n }\n });\n return decoration;\n };\n const getParents$2 = (dom, node, selector) => {\n return dom.getParents(node, selector, dom.getRoot());\n };\n const isFormatPredicate = (editor, formatName, predicate) => {\n const formats = editor.formatter.get(formatName);\n return isNonNullable(formats) && exists(formats, predicate);\n };\n const isVariableFormatName = (editor, formatName) => {\n const hasVariableValues = format => {\n const isVariableValue = val => isFunction(val) || val.length > 1 && val.charAt(0) === '%';\n return exists([\n 'styles',\n 'attributes'\n ], key => get$a(format, key).exists(field => {\n const fieldValues = isArray$1(field) ? field : values(field);\n return exists(fieldValues, isVariableValue);\n }));\n };\n return isFormatPredicate(editor, formatName, hasVariableValues);\n };\n const areSimilarFormats = (editor, formatName, otherFormatName) => {\n const validKeys = [\n 'inline',\n 'block',\n 'selector',\n 'attributes',\n 'styles',\n 'classes'\n ];\n const filterObj = format => filter$4(format, (_, key) => exists(validKeys, validKey => validKey === key));\n return isFormatPredicate(editor, formatName, fmt1 => {\n const filteredFmt1 = filterObj(fmt1);\n return isFormatPredicate(editor, otherFormatName, fmt2 => {\n const filteredFmt2 = filterObj(fmt2);\n return equal$1(filteredFmt1, filteredFmt2);\n });\n });\n };\n const isBlockFormat = format => hasNonNullableKey(format, 'block');\n const isWrappingBlockFormat = format => isBlockFormat(format) && format.wrapper === true;\n const isNonWrappingBlockFormat = format => isBlockFormat(format) && format.wrapper !== true;\n const isSelectorFormat = format => hasNonNullableKey(format, 'selector');\n const isInlineFormat = format => hasNonNullableKey(format, 'inline');\n const isMixedFormat = format => isSelectorFormat(format) && isInlineFormat(format) && is$2(get$a(format, 'mixed'), true);\n const shouldExpandToSelector = format => isSelectorFormat(format) && format.expand !== false && !isInlineFormat(format);\n const getEmptyCaretContainers = node => {\n const nodes = [];\n let tempNode = node;\n while (tempNode) {\n if (isText$b(tempNode) && tempNode.data !== ZWSP$1 || tempNode.childNodes.length > 1) {\n return [];\n }\n if (isElement$6(tempNode)) {\n nodes.push(tempNode);\n }\n tempNode = tempNode.firstChild;\n }\n return nodes;\n };\n const isCaretContainerEmpty = node => {\n return getEmptyCaretContainers(node).length > 0;\n };\n const isEmptyCaretFormatElement = element => {\n return isCaretNode(element.dom) && isCaretContainerEmpty(element.dom);\n };\n\n const isBookmarkNode = isBookmarkNode$1;\n const getParents$1 = getParents$2;\n const isWhiteSpaceNode = isWhiteSpaceNode$1;\n const isTextBlock = isTextBlock$1;\n const isBogusBr = node => {\n return isBr$6(node) && node.getAttribute('data-mce-bogus') && !node.nextSibling;\n };\n const findParentContentEditable = (dom, node) => {\n let parent = node;\n while (parent) {\n if (isElement$6(parent) && dom.getContentEditable(parent)) {\n return dom.getContentEditable(parent) === 'false' ? parent : node;\n }\n parent = parent.parentNode;\n }\n return node;\n };\n const walkText = (start, node, offset, predicate) => {\n const str = node.data;\n if (start) {\n for (let i = offset; i > 0; i--) {\n if (predicate(str.charAt(i - 1))) {\n return i;\n }\n }\n } else {\n for (let i = offset; i < str.length; i++) {\n if (predicate(str.charAt(i))) {\n return i;\n }\n }\n }\n return -1;\n };\n const findSpace = (start, node, offset) => walkText(start, node, offset, c => isNbsp(c) || isWhiteSpace(c));\n const findContent = (start, node, offset) => walkText(start, node, offset, isContent);\n const findWordEndPoint = (dom, body, container, offset, start, includeTrailingSpaces) => {\n let lastTextNode;\n const closestRoot = dom.getParent(container, node => isEditingHost(node) || dom.isBlock(node));\n const rootNode = isNonNullable(closestRoot) ? closestRoot : body;\n const walk = (container, offset, pred) => {\n const textSeeker = TextSeeker(dom);\n const walker = start ? textSeeker.backwards : textSeeker.forwards;\n return Optional.from(walker(container, offset, (text, textOffset) => {\n if (isBookmarkNode(text.parentNode)) {\n return -1;\n } else {\n lastTextNode = text;\n return pred(start, text, textOffset);\n }\n }, rootNode));\n };\n const spaceResult = walk(container, offset, findSpace);\n return spaceResult.bind(result => includeTrailingSpaces ? walk(result.container, result.offset + (start ? -1 : 0), findContent) : Optional.some(result)).orThunk(() => lastTextNode ? Optional.some({\n container: lastTextNode,\n offset: start ? 0 : lastTextNode.length\n }) : Optional.none());\n };\n const findSelectorEndPoint = (dom, formatList, rng, container, siblingName) => {\n const sibling = container[siblingName];\n if (isText$b(container) && isEmpty$3(container.data) && sibling) {\n container = sibling;\n }\n const parents = getParents$1(dom, container);\n for (let i = 0; i < parents.length; i++) {\n for (let y = 0; y < formatList.length; y++) {\n const curFormat = formatList[y];\n if (isNonNullable(curFormat.collapsed) && curFormat.collapsed !== rng.collapsed) {\n continue;\n }\n if (isSelectorFormat(curFormat) && dom.is(parents[i], curFormat.selector)) {\n return parents[i];\n }\n }\n }\n return container;\n };\n const findBlockEndPoint = (dom, formatList, container, siblingName) => {\n var _a;\n let node = container;\n const root = dom.getRoot();\n const format = formatList[0];\n if (isBlockFormat(format)) {\n node = format.wrapper ? null : dom.getParent(container, format.block, root);\n }\n if (!node) {\n const scopeRoot = (_a = dom.getParent(container, 'LI,TD,TH,SUMMARY')) !== null && _a !== void 0 ? _a : root;\n node = dom.getParent(isText$b(container) ? container.parentNode : container, node => node !== root && isTextBlock(dom.schema, node), scopeRoot);\n }\n if (node && isBlockFormat(format) && format.wrapper) {\n node = getParents$1(dom, node, 'ul,ol').reverse()[0] || node;\n }\n if (!node) {\n node = container;\n while (node && node[siblingName] && !dom.isBlock(node[siblingName])) {\n node = node[siblingName];\n if (isEq$5(node, 'br')) {\n break;\n }\n }\n }\n return node || container;\n };\n const isAtBlockBoundary$1 = (dom, root, container, siblingName) => {\n const parent = container.parentNode;\n if (isNonNullable(container[siblingName])) {\n return false;\n } else if (parent === root || isNullable(parent) || dom.isBlock(parent)) {\n return true;\n } else {\n return isAtBlockBoundary$1(dom, root, parent, siblingName);\n }\n };\n const findParentContainer = (dom, formatList, container, offset, start, expandToBlock) => {\n let parent = container;\n const siblingName = start ? 'previousSibling' : 'nextSibling';\n const root = dom.getRoot();\n if (isText$b(container) && !isWhiteSpaceNode(container)) {\n if (start ? offset > 0 : offset < container.data.length) {\n return container;\n }\n }\n while (parent) {\n if (isEditingHost(parent)) {\n return container;\n }\n if (!formatList[0].block_expand && dom.isBlock(parent)) {\n return expandToBlock ? parent : container;\n }\n for (let sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {\n const allowSpaces = isText$b(sibling) && !isAtBlockBoundary$1(dom, root, sibling, siblingName);\n if (!isBookmarkNode(sibling) && !isBogusBr(sibling) && !isWhiteSpaceNode(sibling, allowSpaces)) {\n return parent;\n }\n }\n if (parent === root || parent.parentNode === root) {\n container = parent;\n break;\n }\n parent = parent.parentNode;\n }\n return container;\n };\n const isSelfOrParentBookmark = container => isBookmarkNode(container.parentNode) || isBookmarkNode(container);\n const expandRng = (dom, rng, formatList, expandOptions = {}) => {\n const {includeTrailingSpace = false, expandToBlock = true} = expandOptions;\n const editableHost = dom.getParent(rng.commonAncestorContainer, node => isEditingHost(node));\n const root = isNonNullable(editableHost) ? editableHost : dom.getRoot();\n let {startContainer, startOffset, endContainer, endOffset} = rng;\n const format = formatList[0];\n if (isElement$6(startContainer) && startContainer.hasChildNodes()) {\n startContainer = getNode$1(startContainer, startOffset);\n if (isText$b(startContainer)) {\n startOffset = 0;\n }\n }\n if (isElement$6(endContainer) && endContainer.hasChildNodes()) {\n endContainer = getNode$1(endContainer, rng.collapsed ? endOffset : endOffset - 1);\n if (isText$b(endContainer)) {\n endOffset = endContainer.data.length;\n }\n }\n startContainer = findParentContentEditable(dom, startContainer);\n endContainer = findParentContentEditable(dom, endContainer);\n if (isSelfOrParentBookmark(startContainer)) {\n startContainer = isBookmarkNode(startContainer) ? startContainer : startContainer.parentNode;\n if (rng.collapsed) {\n startContainer = startContainer.previousSibling || startContainer;\n } else {\n startContainer = startContainer.nextSibling || startContainer;\n }\n if (isText$b(startContainer)) {\n startOffset = rng.collapsed ? startContainer.length : 0;\n }\n }\n if (isSelfOrParentBookmark(endContainer)) {\n endContainer = isBookmarkNode(endContainer) ? endContainer : endContainer.parentNode;\n if (rng.collapsed) {\n endContainer = endContainer.nextSibling || endContainer;\n } else {\n endContainer = endContainer.previousSibling || endContainer;\n }\n if (isText$b(endContainer)) {\n endOffset = rng.collapsed ? 0 : endContainer.length;\n }\n }\n if (rng.collapsed) {\n const startPoint = findWordEndPoint(dom, root, startContainer, startOffset, true, includeTrailingSpace);\n startPoint.each(({container, offset}) => {\n startContainer = container;\n startOffset = offset;\n });\n const endPoint = findWordEndPoint(dom, root, endContainer, endOffset, false, includeTrailingSpace);\n endPoint.each(({container, offset}) => {\n endContainer = container;\n endOffset = offset;\n });\n }\n if (isInlineFormat(format) || format.block_expand) {\n if (!isInlineFormat(format) || (!isText$b(startContainer) || startOffset === 0)) {\n startContainer = findParentContainer(dom, formatList, startContainer, startOffset, true, expandToBlock);\n }\n if (!isInlineFormat(format) || (!isText$b(endContainer) || endOffset === endContainer.data.length)) {\n endContainer = findParentContainer(dom, formatList, endContainer, endOffset, false, expandToBlock);\n }\n }\n if (shouldExpandToSelector(format)) {\n startContainer = findSelectorEndPoint(dom, formatList, rng, startContainer, 'previousSibling');\n endContainer = findSelectorEndPoint(dom, formatList, rng, endContainer, 'nextSibling');\n }\n if (isBlockFormat(format) || isSelectorFormat(format)) {\n startContainer = findBlockEndPoint(dom, formatList, startContainer, 'previousSibling');\n endContainer = findBlockEndPoint(dom, formatList, endContainer, 'nextSibling');\n if (isBlockFormat(format)) {\n if (!dom.isBlock(startContainer)) {\n startContainer = findParentContainer(dom, formatList, startContainer, startOffset, true, expandToBlock);\n if (isText$b(startContainer)) {\n startOffset = 0;\n }\n }\n if (!dom.isBlock(endContainer)) {\n endContainer = findParentContainer(dom, formatList, endContainer, endOffset, false, expandToBlock);\n if (isText$b(endContainer)) {\n endOffset = endContainer.data.length;\n }\n }\n }\n }\n if (isElement$6(startContainer) && startContainer.parentNode) {\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (isElement$6(endContainer) && endContainer.parentNode) {\n endOffset = dom.nodeIndex(endContainer) + 1;\n endContainer = endContainer.parentNode;\n }\n return {\n startContainer,\n startOffset,\n endContainer,\n endOffset\n };\n };\n\n const walk$3 = (dom, rng, callback) => {\n var _a;\n const startOffset = rng.startOffset;\n const startContainer = getNode$1(rng.startContainer, startOffset);\n const endOffset = rng.endOffset;\n const endContainer = getNode$1(rng.endContainer, endOffset - 1);\n const exclude = nodes => {\n const firstNode = nodes[0];\n if (isText$b(firstNode) && firstNode === startContainer && startOffset >= firstNode.data.length) {\n nodes.splice(0, 1);\n }\n const lastNode = nodes[nodes.length - 1];\n if (endOffset === 0 && nodes.length > 0 && lastNode === endContainer && isText$b(lastNode)) {\n nodes.splice(nodes.length - 1, 1);\n }\n return nodes;\n };\n const collectSiblings = (node, name, endNode) => {\n const siblings = [];\n for (; node && node !== endNode; node = node[name]) {\n siblings.push(node);\n }\n return siblings;\n };\n const findEndPoint = (node, root) => dom.getParent(node, node => node.parentNode === root, root);\n const walkBoundary = (startNode, endNode, next) => {\n const siblingName = next ? 'nextSibling' : 'previousSibling';\n for (let node = startNode, parent = node.parentNode; node && node !== endNode; node = parent) {\n parent = node.parentNode;\n const siblings = collectSiblings(node === startNode ? node : node[siblingName], siblingName);\n if (siblings.length) {\n if (!next) {\n siblings.reverse();\n }\n callback(exclude(siblings));\n }\n }\n };\n if (startContainer === endContainer) {\n return callback(exclude([startContainer]));\n }\n const ancestor = (_a = dom.findCommonAncestor(startContainer, endContainer)) !== null && _a !== void 0 ? _a : dom.getRoot();\n if (dom.isChildOf(startContainer, endContainer)) {\n return walkBoundary(startContainer, ancestor, true);\n }\n if (dom.isChildOf(endContainer, startContainer)) {\n return walkBoundary(endContainer, ancestor);\n }\n const startPoint = findEndPoint(startContainer, ancestor) || startContainer;\n const endPoint = findEndPoint(endContainer, ancestor) || endContainer;\n walkBoundary(startContainer, startPoint, true);\n const siblings = collectSiblings(startPoint === startContainer ? startPoint : startPoint.nextSibling, 'nextSibling', endPoint === endContainer ? endPoint.nextSibling : endPoint);\n if (siblings.length) {\n callback(exclude(siblings));\n }\n walkBoundary(endContainer, endPoint);\n };\n\n const validBlocks = [\n 'pre[class*=language-][contenteditable=\"false\"]',\n 'figure.image',\n 'div[data-ephox-embed-iri]',\n 'div.tiny-pageembed',\n 'div.mce-toc',\n 'div[data-mce-toc]'\n ];\n const isZeroWidth = elem => isText$c(elem) && get$3(elem) === ZWSP$1;\n const context = (editor, elem, wrapName, nodeName) => parent(elem).fold(() => 'skipping', parent => {\n if (nodeName === 'br' || isZeroWidth(elem)) {\n return 'valid';\n } else if (isAnnotation(elem)) {\n return 'existing';\n } else if (isCaretNode(elem.dom)) {\n return 'caret';\n } else if (exists(validBlocks, selector => is$1(elem, selector))) {\n return 'valid-block';\n } else if (!isValid(editor, wrapName, nodeName) || !isValid(editor, name(parent), wrapName)) {\n return 'invalid-child';\n } else {\n return 'valid';\n }\n });\n\n const applyWordGrab = (editor, rng) => {\n const r = expandRng(editor.dom, rng, [{ inline: 'span' }]);\n rng.setStart(r.startContainer, r.startOffset);\n rng.setEnd(r.endContainer, r.endOffset);\n editor.selection.setRng(rng);\n };\n const applyAnnotation = (elem, masterUId, data, annotationName, decorate, directAnnotation) => {\n const {uid = masterUId, ...otherData} = data;\n add$2(elem, annotation());\n set$4(elem, `${ dataAnnotationId() }`, uid);\n set$4(elem, `${ dataAnnotation() }`, annotationName);\n const {attributes = {}, classes = []} = decorate(uid, otherData);\n setAll$1(elem, attributes);\n add(elem, classes);\n if (directAnnotation) {\n if (classes.length > 0) {\n set$4(elem, `${ dataAnnotationClasses() }`, classes.join(','));\n }\n const attributeNames = keys(attributes);\n if (attributeNames.length > 0) {\n set$4(elem, `${ dataAnnotationAttributes() }`, attributeNames.join(','));\n }\n }\n };\n const removeDirectAnnotation = elem => {\n remove$6(elem, annotation());\n remove$9(elem, `${ dataAnnotationId() }`);\n remove$9(elem, `${ dataAnnotation() }`);\n remove$9(elem, `${ dataAnnotationActive() }`);\n const customAttrNames = getOpt(elem, `${ dataAnnotationAttributes() }`).map(names => names.split(',')).getOr([]);\n const customClasses = getOpt(elem, `${ dataAnnotationClasses() }`).map(names => names.split(',')).getOr([]);\n each$e(customAttrNames, name => remove$9(elem, name));\n remove$3(elem, customClasses);\n remove$9(elem, `${ dataAnnotationClasses() }`);\n remove$9(elem, `${ dataAnnotationAttributes() }`);\n };\n const makeAnnotation = (eDoc, uid, data, annotationName, decorate) => {\n const master = SugarElement.fromTag('span', eDoc);\n applyAnnotation(master, uid, data, annotationName, decorate, false);\n return master;\n };\n const annotate = (editor, rng, uid, annotationName, decorate, data) => {\n const newWrappers = [];\n const master = makeAnnotation(editor.getDoc(), uid, data, annotationName, decorate);\n const wrapper = value$2();\n const finishWrapper = () => {\n wrapper.clear();\n };\n const getOrOpenWrapper = () => wrapper.get().getOrThunk(() => {\n const nu = shallow$1(master);\n newWrappers.push(nu);\n wrapper.set(nu);\n return nu;\n });\n const processElements = elems => {\n each$e(elems, processElement);\n };\n const processElement = elem => {\n const ctx = context(editor, elem, 'span', name(elem));\n switch (ctx) {\n case 'invalid-child': {\n finishWrapper();\n const children = children$1(elem);\n processElements(children);\n finishWrapper();\n break;\n }\n case 'valid-block': {\n finishWrapper();\n applyAnnotation(elem, uid, data, annotationName, decorate, true);\n break;\n }\n case 'valid': {\n const w = getOrOpenWrapper();\n wrap$2(elem, w);\n break;\n }\n }\n };\n const processNodes = nodes => {\n const elems = map$3(nodes, SugarElement.fromDom);\n processElements(elems);\n };\n walk$3(editor.dom, rng, nodes => {\n finishWrapper();\n processNodes(nodes);\n });\n return newWrappers;\n };\n const annotateWithBookmark = (editor, name, settings, data) => {\n editor.undoManager.transact(() => {\n const selection = editor.selection;\n const initialRng = selection.getRng();\n const hasFakeSelection = getCellsFromEditor(editor).length > 0;\n const masterUid = generate$1('mce-annotation');\n if (initialRng.collapsed && !hasFakeSelection) {\n applyWordGrab(editor, initialRng);\n }\n if (selection.getRng().collapsed && !hasFakeSelection) {\n const wrapper = makeAnnotation(editor.getDoc(), masterUid, data, name, settings.decorate);\n set$1(wrapper, nbsp);\n selection.getRng().insertNode(wrapper.dom);\n selection.select(wrapper.dom);\n } else {\n preserve(selection, false, () => {\n runOnRanges(editor, selectionRng => {\n annotate(editor, selectionRng, masterUid, name, settings.decorate, data);\n });\n });\n }\n });\n };\n\n const Annotator = editor => {\n const registry = create$b();\n setup$x(editor, registry);\n const changes = setup$y(editor, registry);\n const isSpan = isTag('span');\n const removeAnnotations = elements => {\n each$e(elements, element => {\n if (isSpan(element)) {\n unwrap(element);\n } else {\n removeDirectAnnotation(element);\n }\n });\n };\n return {\n register: (name, settings) => {\n registry.register(name, settings);\n },\n annotate: (name, data) => {\n registry.lookup(name).each(settings => {\n annotateWithBookmark(editor, name, settings, data);\n });\n },\n annotationChanged: (name, callback) => {\n changes.addListener(name, callback);\n },\n remove: name => {\n identify(editor, Optional.some(name)).each(({elements}) => {\n const bookmark = editor.selection.getBookmark();\n removeAnnotations(elements);\n editor.selection.moveToBookmark(bookmark);\n });\n },\n removeAll: name => {\n const bookmark = editor.selection.getBookmark();\n each$d(findAll(editor, name), (elements, _) => {\n removeAnnotations(elements);\n });\n editor.selection.moveToBookmark(bookmark);\n },\n getAll: name => {\n const directory = findAll(editor, name);\n return map$2(directory, elems => map$3(elems, elem => elem.dom));\n }\n };\n };\n\n const BookmarkManager = selection => {\n return {\n getBookmark: curry(getBookmark$2, selection),\n moveToBookmark: curry(moveToBookmark, selection)\n };\n };\n BookmarkManager.isBookmarkNode = isBookmarkNode$1;\n\n const isXYWithinRange = (clientX, clientY, range) => {\n if (range.collapsed) {\n return false;\n } else {\n return exists(range.getClientRects(), rect => containsXY(rect, clientX, clientY));\n }\n };\n\n const getDocument = () => SugarElement.fromDom(document);\n\n const focus$1 = (element, preventScroll = false) => element.dom.focus({ preventScroll });\n const hasFocus$1 = element => {\n const root = getRootNode(element).dom;\n return element.dom === root.activeElement;\n };\n const active$1 = (root = getDocument()) => Optional.from(root.dom.activeElement).map(SugarElement.fromDom);\n const search = element => active$1(getRootNode(element)).filter(e => element.dom.contains(e.dom));\n\n const create$9 = (start, soffset, finish, foffset) => ({\n start,\n soffset,\n finish,\n foffset\n });\n const SimRange = { create: create$9 };\n\n const adt$3 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n const cata = (subject, onBefore, onOn, onAfter) => subject.fold(onBefore, onOn, onAfter);\n const getStart$2 = situ => situ.fold(identity, identity, identity);\n const before$1 = adt$3.before;\n const on = adt$3.on;\n const after$1 = adt$3.after;\n const Situ = {\n before: before$1,\n on,\n after: after$1,\n cata,\n getStart: getStart$2\n };\n\n const adt$2 = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const exactFromRange = simRange => adt$2.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n const getStart$1 = selection => selection.match({\n domRange: rng => SugarElement.fromDom(rng.startContainer),\n relative: (startSitu, _finishSitu) => Situ.getStart(startSitu),\n exact: (start, _soffset, _finish, _foffset) => start\n });\n const domRange = adt$2.domRange;\n const relative = adt$2.relative;\n const exact = adt$2.exact;\n const getWin = selection => {\n const start = getStart$1(selection);\n return defaultView(start);\n };\n const range = SimRange.create;\n const SimSelection = {\n domRange,\n relative,\n exact,\n exactFromRange,\n getWin,\n range\n };\n\n const clamp$1 = (offset, element) => {\n const max = isText$c(element) ? get$3(element).length : children$1(element).length + 1;\n if (offset > max) {\n return max;\n } else if (offset < 0) {\n return 0;\n }\n return offset;\n };\n const normalizeRng = rng => SimSelection.range(rng.start, clamp$1(rng.soffset, rng.start), rng.finish, clamp$1(rng.foffset, rng.finish));\n const isOrContains = (root, elm) => !isRestrictedNode(elm.dom) && (contains(root, elm) || eq(root, elm));\n const isRngInRoot = root => rng => isOrContains(root, rng.start) && isOrContains(root, rng.finish);\n const shouldStore = editor => editor.inline || Env.browser.isFirefox();\n const nativeRangeToSelectionRange = r => SimSelection.range(SugarElement.fromDom(r.startContainer), r.startOffset, SugarElement.fromDom(r.endContainer), r.endOffset);\n const readRange = win => {\n const selection = win.getSelection();\n const rng = !selection || selection.rangeCount === 0 ? Optional.none() : Optional.from(selection.getRangeAt(0));\n return rng.map(nativeRangeToSelectionRange);\n };\n const getBookmark$1 = root => {\n const win = defaultView(root);\n return readRange(win.dom).filter(isRngInRoot(root));\n };\n const validate = (root, bookmark) => Optional.from(bookmark).filter(isRngInRoot(root)).map(normalizeRng);\n const bookmarkToNativeRng = bookmark => {\n const rng = document.createRange();\n try {\n rng.setStart(bookmark.start.dom, bookmark.soffset);\n rng.setEnd(bookmark.finish.dom, bookmark.foffset);\n return Optional.some(rng);\n } catch (_a) {\n return Optional.none();\n }\n };\n const store = editor => {\n const newBookmark = shouldStore(editor) ? getBookmark$1(SugarElement.fromDom(editor.getBody())) : Optional.none();\n editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n };\n const getRng = editor => {\n const bookmark = editor.bookmark ? editor.bookmark : Optional.none();\n return bookmark.bind(x => validate(SugarElement.fromDom(editor.getBody()), x)).bind(bookmarkToNativeRng);\n };\n const restore = editor => {\n getRng(editor).each(rng => editor.selection.setRng(rng));\n };\n\n const isEditorUIElement$1 = elm => {\n const className = elm.className.toString();\n return className.indexOf('tox-') !== -1 || className.indexOf('mce-') !== -1;\n };\n const FocusManager = { isEditorUIElement: isEditorUIElement$1 };\n\n const wrappedSetTimeout = (callback, time) => {\n if (!isNumber(time)) {\n time = 0;\n }\n return setTimeout(callback, time);\n };\n const wrappedSetInterval = (callback, time) => {\n if (!isNumber(time)) {\n time = 0;\n }\n return setInterval(callback, time);\n };\n const Delay = {\n setEditorTimeout: (editor, callback, time) => {\n return wrappedSetTimeout(() => {\n if (!editor.removed) {\n callback();\n }\n }, time);\n },\n setEditorInterval: (editor, callback, time) => {\n const timer = wrappedSetInterval(() => {\n if (!editor.removed) {\n callback();\n } else {\n clearInterval(timer);\n }\n }, time);\n return timer;\n }\n };\n\n const isManualNodeChange = e => {\n return e.type === 'nodechange' && e.selectionChange;\n };\n const registerPageMouseUp = (editor, throttledStore) => {\n const mouseUpPage = () => {\n throttledStore.throttle();\n };\n DOMUtils.DOM.bind(document, 'mouseup', mouseUpPage);\n editor.on('remove', () => {\n DOMUtils.DOM.unbind(document, 'mouseup', mouseUpPage);\n });\n };\n const registerMouseUp = (editor, throttledStore) => {\n editor.on('mouseup touchend', _e => {\n throttledStore.throttle();\n });\n };\n const registerEditorEvents = (editor, throttledStore) => {\n registerMouseUp(editor, throttledStore);\n editor.on('keyup NodeChange AfterSetSelectionRange', e => {\n if (!isManualNodeChange(e)) {\n store(editor);\n }\n });\n };\n const register$6 = editor => {\n const throttledStore = first$1(() => {\n store(editor);\n }, 0);\n editor.on('init', () => {\n if (editor.inline) {\n registerPageMouseUp(editor, throttledStore);\n }\n registerEditorEvents(editor, throttledStore);\n });\n editor.on('remove', () => {\n throttledStore.cancel();\n });\n };\n\n let documentFocusInHandler;\n const DOM$9 = DOMUtils.DOM;\n const isEditorUIElement = elm => {\n return isElement$6(elm) && FocusManager.isEditorUIElement(elm);\n };\n const isEditorContentAreaElement = elm => {\n const classList = elm.classList;\n if (classList !== undefined) {\n return classList.contains('tox-edit-area') || classList.contains('tox-edit-area__iframe') || classList.contains('mce-content-body');\n } else {\n return false;\n }\n };\n const isUIElement = (editor, elm) => {\n const customSelector = getCustomUiSelector(editor);\n const parent = DOM$9.getParent(elm, elm => {\n return isEditorUIElement(elm) || (customSelector ? editor.dom.is(elm, customSelector) : false);\n });\n return parent !== null;\n };\n const getActiveElement = editor => {\n try {\n const root = getRootNode(SugarElement.fromDom(editor.getElement()));\n return active$1(root).fold(() => document.body, x => x.dom);\n } catch (_a) {\n return document.body;\n }\n };\n const registerEvents$1 = (editorManager, e) => {\n const editor = e.editor;\n register$6(editor);\n const toggleContentAreaOnFocus = (editor, fn) => {\n if (shouldHighlightOnFocus(editor) && editor.inline !== true) {\n const contentArea = SugarElement.fromDom(editor.getContainer());\n fn(contentArea, 'tox-edit-focus');\n }\n };\n editor.on('focusin', () => {\n const focusedEditor = editorManager.focusedEditor;\n if (isEditorContentAreaElement(getActiveElement(editor))) {\n toggleContentAreaOnFocus(editor, add$2);\n }\n if (focusedEditor !== editor) {\n if (focusedEditor) {\n focusedEditor.dispatch('blur', { focusedEditor: editor });\n }\n editorManager.setActive(editor);\n editorManager.focusedEditor = editor;\n editor.dispatch('focus', { blurredEditor: focusedEditor });\n editor.focus(true);\n }\n });\n editor.on('focusout', () => {\n Delay.setEditorTimeout(editor, () => {\n const focusedEditor = editorManager.focusedEditor;\n if (!isEditorContentAreaElement(getActiveElement(editor)) || focusedEditor !== editor) {\n toggleContentAreaOnFocus(editor, remove$6);\n }\n if (!isUIElement(editor, getActiveElement(editor)) && focusedEditor === editor) {\n editor.dispatch('blur', { focusedEditor: null });\n editorManager.focusedEditor = null;\n }\n });\n });\n if (!documentFocusInHandler) {\n documentFocusInHandler = e => {\n const activeEditor = editorManager.activeEditor;\n if (activeEditor) {\n getOriginalEventTarget(e).each(target => {\n const elem = target;\n if (elem.ownerDocument === document) {\n if (elem !== document.body && !isUIElement(activeEditor, elem) && editorManager.focusedEditor === activeEditor) {\n activeEditor.dispatch('blur', { focusedEditor: null });\n editorManager.focusedEditor = null;\n }\n }\n });\n }\n };\n DOM$9.bind(document, 'focusin', documentFocusInHandler);\n }\n };\n const unregisterDocumentEvents = (editorManager, e) => {\n if (editorManager.focusedEditor === e.editor) {\n editorManager.focusedEditor = null;\n }\n if (!editorManager.activeEditor && documentFocusInHandler) {\n DOM$9.unbind(document, 'focusin', documentFocusInHandler);\n documentFocusInHandler = null;\n }\n };\n const setup$w = editorManager => {\n editorManager.on('AddEditor', curry(registerEvents$1, editorManager));\n editorManager.on('RemoveEditor', curry(unregisterDocumentEvents, editorManager));\n };\n\n const getContentEditableHost = (editor, node) => editor.dom.getParent(node, node => editor.dom.getContentEditable(node) === 'true');\n const hasContentEditableFalseParent$1 = (editor, node) => editor.dom.getParent(node, node => editor.dom.getContentEditable(node) === 'false') !== null;\n const getCollapsedNode = rng => rng.collapsed ? Optional.from(getNode$1(rng.startContainer, rng.startOffset)).map(SugarElement.fromDom) : Optional.none();\n const getFocusInElement = (root, rng) => getCollapsedNode(rng).bind(node => {\n if (isTableSection(node)) {\n return Optional.some(node);\n } else if (!contains(root, node)) {\n return Optional.some(root);\n } else {\n return Optional.none();\n }\n });\n const normalizeSelection = (editor, rng) => {\n getFocusInElement(SugarElement.fromDom(editor.getBody()), rng).bind(elm => {\n return firstPositionIn(elm.dom);\n }).fold(() => {\n editor.selection.normalize();\n }, caretPos => editor.selection.setRng(caretPos.toRange()));\n };\n const focusBody = body => {\n if (body.setActive) {\n try {\n body.setActive();\n } catch (_a) {\n body.focus();\n }\n } else {\n body.focus();\n }\n };\n const hasElementFocus = elm => hasFocus$1(elm) || search(elm).isSome();\n const hasIframeFocus = editor => isNonNullable(editor.iframeElement) && hasFocus$1(SugarElement.fromDom(editor.iframeElement));\n const hasInlineFocus = editor => {\n const rawBody = editor.getBody();\n return rawBody && hasElementFocus(SugarElement.fromDom(rawBody));\n };\n const hasUiFocus = editor => {\n const dos = getRootNode(SugarElement.fromDom(editor.getElement()));\n return active$1(dos).filter(elem => !isEditorContentAreaElement(elem.dom) && isUIElement(editor, elem.dom)).isSome();\n };\n const hasFocus = editor => editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);\n const hasEditorOrUiFocus = editor => hasFocus(editor) || hasUiFocus(editor);\n const focusEditor = editor => {\n const selection = editor.selection;\n const body = editor.getBody();\n let rng = selection.getRng();\n editor.quirks.refreshContentEditable();\n const restoreBookmark = editor => {\n getRng(editor).each(bookmarkRng => {\n editor.selection.setRng(bookmarkRng);\n rng = bookmarkRng;\n });\n };\n if (!hasFocus(editor) && editor.hasEditableRoot()) {\n restoreBookmark(editor);\n }\n const contentEditableHost = getContentEditableHost(editor, selection.getNode());\n if (contentEditableHost && editor.dom.isChildOf(contentEditableHost, body)) {\n if (!hasContentEditableFalseParent$1(editor, contentEditableHost)) {\n focusBody(body);\n }\n focusBody(contentEditableHost);\n if (!editor.hasEditableRoot()) {\n restoreBookmark(editor);\n }\n normalizeSelection(editor, rng);\n activateEditor(editor);\n return;\n }\n if (!editor.inline) {\n if (!Env.browser.isOpera()) {\n focusBody(body);\n }\n editor.getWin().focus();\n }\n if (Env.browser.isFirefox() || editor.inline) {\n focusBody(body);\n normalizeSelection(editor, rng);\n }\n activateEditor(editor);\n };\n const activateEditor = editor => editor.editorManager.setActive(editor);\n const focus = (editor, skipFocus) => {\n if (editor.removed) {\n return;\n }\n if (skipFocus) {\n activateEditor(editor);\n } else {\n focusEditor(editor);\n }\n };\n\n const VK = {\n BACKSPACE: 8,\n DELETE: 46,\n DOWN: 40,\n ENTER: 13,\n ESC: 27,\n LEFT: 37,\n RIGHT: 39,\n SPACEBAR: 32,\n TAB: 9,\n UP: 38,\n PAGE_UP: 33,\n PAGE_DOWN: 34,\n END: 35,\n HOME: 36,\n modifierPressed: e => {\n return e.shiftKey || e.ctrlKey || e.altKey || VK.metaKeyPressed(e);\n },\n metaKeyPressed: e => {\n return Env.os.isMacOS() || Env.os.isiOS() ? e.metaKey : e.ctrlKey && !e.altKey;\n }\n };\n\n const elementSelectionAttr = 'data-mce-selected';\n const controlElmSelector = 'table,img,figure.image,hr,video,span.mce-preview-object,details';\n const abs = Math.abs;\n const round$1 = Math.round;\n const resizeHandles = {\n nw: [\n 0,\n 0,\n -1,\n -1\n ],\n ne: [\n 1,\n 0,\n 1,\n -1\n ],\n se: [\n 1,\n 1,\n 1,\n 1\n ],\n sw: [\n 0,\n 1,\n -1,\n 1\n ]\n };\n const isTouchEvent = evt => evt.type === 'longpress' || evt.type.indexOf('touch') === 0;\n const ControlSelection = (selection, editor) => {\n const dom = editor.dom;\n const editableDoc = editor.getDoc();\n const rootDocument = document;\n const rootElement = editor.getBody();\n let selectedElm, selectedElmGhost, resizeHelper, selectedHandle, resizeBackdrop;\n let startX, startY, startW, startH, ratio, resizeStarted;\n let width;\n let height;\n let startScrollWidth;\n let startScrollHeight;\n const isImage = elm => isNonNullable(elm) && (isImg(elm) || dom.is(elm, 'figure.image'));\n const isMedia = elm => isMedia$2(elm) || dom.hasClass(elm, 'mce-preview-object');\n const isEventOnImageOutsideRange = (evt, range) => {\n if (isTouchEvent(evt)) {\n const touch = evt.touches[0];\n return isImage(evt.target) && !isXYWithinRange(touch.clientX, touch.clientY, range);\n } else {\n return isImage(evt.target) && !isXYWithinRange(evt.clientX, evt.clientY, range);\n }\n };\n const contextMenuSelectImage = evt => {\n const target = evt.target;\n if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {\n editor.selection.select(target);\n }\n };\n const getResizeTargets = elm => {\n if (dom.hasClass(elm, 'mce-preview-object') && isNonNullable(elm.firstElementChild)) {\n return [\n elm,\n elm.firstElementChild\n ];\n } else if (dom.is(elm, 'figure.image')) {\n return [elm.querySelector('img')];\n } else {\n return [elm];\n }\n };\n const isResizable = elm => {\n const selector = getObjectResizing(editor);\n if (!selector || editor.mode.isReadOnly()) {\n return false;\n }\n if (elm.getAttribute('data-mce-resize') === 'false') {\n return false;\n }\n if (elm === editor.getBody()) {\n return false;\n }\n if (dom.hasClass(elm, 'mce-preview-object') && isNonNullable(elm.firstElementChild)) {\n return is$1(SugarElement.fromDom(elm.firstElementChild), selector);\n } else {\n return is$1(SugarElement.fromDom(elm), selector);\n }\n };\n const createGhostElement = (dom, elm) => {\n if (isMedia(elm)) {\n return dom.create('img', { src: Env.transparentSrc });\n } else if (isTable$2(elm)) {\n const isNorth = startsWith(selectedHandle.name, 'n');\n const rowSelect = isNorth ? head : last$2;\n const tableElm = elm.cloneNode(true);\n rowSelect(dom.select('tr', tableElm)).each(tr => {\n const cells = dom.select('td,th', tr);\n dom.setStyle(tr, 'height', null);\n each$e(cells, cell => dom.setStyle(cell, 'height', null));\n });\n return tableElm;\n } else {\n return elm.cloneNode(true);\n }\n };\n const setSizeProp = (element, name, value) => {\n if (isNonNullable(value)) {\n const targets = getResizeTargets(element);\n each$e(targets, target => {\n if (target.style[name] || !editor.schema.isValid(target.nodeName.toLowerCase(), name)) {\n dom.setStyle(target, name, value);\n } else {\n dom.setAttrib(target, name, '' + value);\n }\n });\n }\n };\n const setGhostElmSize = (ghostElm, width, height) => {\n setSizeProp(ghostElm, 'width', width);\n setSizeProp(ghostElm, 'height', height);\n };\n const resizeGhostElement = e => {\n let deltaX, deltaY, proportional;\n let resizeHelperX, resizeHelperY;\n deltaX = e.screenX - startX;\n deltaY = e.screenY - startY;\n width = deltaX * selectedHandle[2] + startW;\n height = deltaY * selectedHandle[3] + startH;\n width = width < 5 ? 5 : width;\n height = height < 5 ? 5 : height;\n if ((isImage(selectedElm) || isMedia(selectedElm)) && getResizeImgProportional(editor) !== false) {\n proportional = !VK.modifierPressed(e);\n } else {\n proportional = VK.modifierPressed(e);\n }\n if (proportional) {\n if (abs(deltaX) > abs(deltaY)) {\n height = round$1(width * ratio);\n width = round$1(height / ratio);\n } else {\n width = round$1(height / ratio);\n height = round$1(width * ratio);\n }\n }\n setGhostElmSize(selectedElmGhost, width, height);\n resizeHelperX = selectedHandle.startPos.x + deltaX;\n resizeHelperY = selectedHandle.startPos.y + deltaY;\n resizeHelperX = resizeHelperX > 0 ? resizeHelperX : 0;\n resizeHelperY = resizeHelperY > 0 ? resizeHelperY : 0;\n dom.setStyles(resizeHelper, {\n left: resizeHelperX,\n top: resizeHelperY,\n display: 'block'\n });\n resizeHelper.innerHTML = width + ' × ' + height;\n deltaX = rootElement.scrollWidth - startScrollWidth;\n deltaY = rootElement.scrollHeight - startScrollHeight;\n if (deltaX + deltaY !== 0) {\n dom.setStyles(resizeHelper, {\n left: resizeHelperX - deltaX,\n top: resizeHelperY - deltaY\n });\n }\n if (!resizeStarted) {\n fireObjectResizeStart(editor, selectedElm, startW, startH, 'corner-' + selectedHandle.name);\n resizeStarted = true;\n }\n };\n const endGhostResize = () => {\n const wasResizeStarted = resizeStarted;\n resizeStarted = false;\n if (wasResizeStarted) {\n setSizeProp(selectedElm, 'width', width);\n setSizeProp(selectedElm, 'height', height);\n }\n dom.unbind(editableDoc, 'mousemove', resizeGhostElement);\n dom.unbind(editableDoc, 'mouseup', endGhostResize);\n if (rootDocument !== editableDoc) {\n dom.unbind(rootDocument, 'mousemove', resizeGhostElement);\n dom.unbind(rootDocument, 'mouseup', endGhostResize);\n }\n dom.remove(selectedElmGhost);\n dom.remove(resizeHelper);\n dom.remove(resizeBackdrop);\n showResizeRect(selectedElm);\n if (wasResizeStarted) {\n fireObjectResized(editor, selectedElm, width, height, 'corner-' + selectedHandle.name);\n dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style'));\n }\n editor.nodeChanged();\n };\n const showResizeRect = targetElm => {\n unbindResizeHandleEvents();\n const position = dom.getPos(targetElm, rootElement);\n const selectedElmX = position.x;\n const selectedElmY = position.y;\n const rect = targetElm.getBoundingClientRect();\n const targetWidth = rect.width || rect.right - rect.left;\n const targetHeight = rect.height || rect.bottom - rect.top;\n if (selectedElm !== targetElm) {\n hideResizeRect();\n selectedElm = targetElm;\n width = height = 0;\n }\n const e = editor.dispatch('ObjectSelected', { target: targetElm });\n if (isResizable(targetElm) && !e.isDefaultPrevented()) {\n each$d(resizeHandles, (handle, name) => {\n const startDrag = e => {\n const target = getResizeTargets(selectedElm)[0];\n startX = e.screenX;\n startY = e.screenY;\n startW = target.clientWidth;\n startH = target.clientHeight;\n ratio = startH / startW;\n selectedHandle = handle;\n selectedHandle.name = name;\n selectedHandle.startPos = {\n x: targetWidth * handle[0] + selectedElmX,\n y: targetHeight * handle[1] + selectedElmY\n };\n startScrollWidth = rootElement.scrollWidth;\n startScrollHeight = rootElement.scrollHeight;\n resizeBackdrop = dom.add(rootElement, 'div', {\n 'class': 'mce-resize-backdrop',\n 'data-mce-bogus': 'all'\n });\n dom.setStyles(resizeBackdrop, {\n position: 'fixed',\n left: '0',\n top: '0',\n width: '100%',\n height: '100%'\n });\n selectedElmGhost = createGhostElement(dom, selectedElm);\n dom.addClass(selectedElmGhost, 'mce-clonedresizable');\n dom.setAttrib(selectedElmGhost, 'data-mce-bogus', 'all');\n selectedElmGhost.contentEditable = 'false';\n dom.setStyles(selectedElmGhost, {\n left: selectedElmX,\n top: selectedElmY,\n margin: 0\n });\n setGhostElmSize(selectedElmGhost, targetWidth, targetHeight);\n selectedElmGhost.removeAttribute(elementSelectionAttr);\n rootElement.appendChild(selectedElmGhost);\n dom.bind(editableDoc, 'mousemove', resizeGhostElement);\n dom.bind(editableDoc, 'mouseup', endGhostResize);\n if (rootDocument !== editableDoc) {\n dom.bind(rootDocument, 'mousemove', resizeGhostElement);\n dom.bind(rootDocument, 'mouseup', endGhostResize);\n }\n resizeHelper = dom.add(rootElement, 'div', {\n 'class': 'mce-resize-helper',\n 'data-mce-bogus': 'all'\n }, startW + ' × ' + startH);\n };\n let handleElm = dom.get('mceResizeHandle' + name);\n if (handleElm) {\n dom.remove(handleElm);\n }\n handleElm = dom.add(rootElement, 'div', {\n 'id': 'mceResizeHandle' + name,\n 'data-mce-bogus': 'all',\n 'class': 'mce-resizehandle',\n 'unselectable': true,\n 'style': 'cursor:' + name + '-resize; margin:0; padding:0'\n });\n dom.bind(handleElm, 'mousedown', e => {\n e.stopImmediatePropagation();\n e.preventDefault();\n startDrag(e);\n });\n handle.elm = handleElm;\n dom.setStyles(handleElm, {\n left: targetWidth * handle[0] + selectedElmX - handleElm.offsetWidth / 2,\n top: targetHeight * handle[1] + selectedElmY - handleElm.offsetHeight / 2\n });\n });\n } else {\n hideResizeRect(false);\n }\n };\n const throttledShowResizeRect = first$1(showResizeRect, 0);\n const hideResizeRect = (removeSelected = true) => {\n throttledShowResizeRect.cancel();\n unbindResizeHandleEvents();\n if (selectedElm && removeSelected) {\n selectedElm.removeAttribute(elementSelectionAttr);\n }\n each$d(resizeHandles, (value, name) => {\n const handleElm = dom.get('mceResizeHandle' + name);\n if (handleElm) {\n dom.unbind(handleElm);\n dom.remove(handleElm);\n }\n });\n };\n const isChildOrEqual = (node, parent) => dom.isChildOf(node, parent);\n const updateResizeRect = e => {\n if (resizeStarted || editor.removed || editor.composing) {\n return;\n }\n const targetElm = e.type === 'mousedown' ? e.target : selection.getNode();\n const controlElm = closest$3(SugarElement.fromDom(targetElm), controlElmSelector).map(e => e.dom).filter(e => dom.isEditable(e.parentElement) || e.nodeName === 'IMG' && dom.isEditable(e)).getOrUndefined();\n const selectedValue = isNonNullable(controlElm) ? dom.getAttrib(controlElm, elementSelectionAttr, '1') : '1';\n each$e(dom.select(`img[${ elementSelectionAttr }],hr[${ elementSelectionAttr }]`), img => {\n img.removeAttribute(elementSelectionAttr);\n });\n if (isNonNullable(controlElm) && isChildOrEqual(controlElm, rootElement) && hasEditorOrUiFocus(editor)) {\n disableGeckoResize();\n const startElm = selection.getStart(true);\n if (isChildOrEqual(startElm, controlElm) && isChildOrEqual(selection.getEnd(true), controlElm)) {\n dom.setAttrib(controlElm, elementSelectionAttr, selectedValue);\n throttledShowResizeRect.throttle(controlElm);\n return;\n }\n }\n hideResizeRect();\n };\n const unbindResizeHandleEvents = () => {\n each$d(resizeHandles, handle => {\n if (handle.elm) {\n dom.unbind(handle.elm);\n delete handle.elm;\n }\n });\n };\n const disableGeckoResize = () => {\n try {\n editor.getDoc().execCommand('enableObjectResizing', false, 'false');\n } catch (_a) {\n }\n };\n editor.on('init', () => {\n disableGeckoResize();\n editor.on('NodeChange ResizeEditor ResizeWindow ResizeContent drop', updateResizeRect);\n editor.on('keyup compositionend', e => {\n if (selectedElm && selectedElm.nodeName === 'TABLE') {\n updateResizeRect(e);\n }\n });\n editor.on('hide blur', hideResizeRect);\n editor.on('contextmenu longpress', contextMenuSelectImage, true);\n });\n editor.on('remove', unbindResizeHandleEvents);\n const destroy = () => {\n throttledShowResizeRect.cancel();\n selectedElm = selectedElmGhost = resizeBackdrop = null;\n };\n return {\n isResizable,\n showResizeRect,\n hideResizeRect,\n updateResizeRect,\n destroy\n };\n };\n\n const setStart = (rng, situ) => {\n situ.fold(e => {\n rng.setStartBefore(e.dom);\n }, (e, o) => {\n rng.setStart(e.dom, o);\n }, e => {\n rng.setStartAfter(e.dom);\n });\n };\n const setFinish = (rng, situ) => {\n situ.fold(e => {\n rng.setEndBefore(e.dom);\n }, (e, o) => {\n rng.setEnd(e.dom, o);\n }, e => {\n rng.setEndAfter(e.dom);\n });\n };\n const relativeToNative = (win, startSitu, finishSitu) => {\n const range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n const exactToNative = (win, start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n\n const adt$1 = Adt.generate([\n {\n ltr: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n },\n {\n rtl: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const fromRange = (win, type, range) => type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset);\n const getRanges = (win, selection) => selection.match({\n domRange: rng => {\n return {\n ltr: constant(rng),\n rtl: Optional.none\n };\n },\n relative: (startSitu, finishSitu) => {\n return {\n ltr: cached(() => relativeToNative(win, startSitu, finishSitu)),\n rtl: cached(() => Optional.some(relativeToNative(win, finishSitu, startSitu)))\n };\n },\n exact: (start, soffset, finish, foffset) => {\n return {\n ltr: cached(() => exactToNative(win, start, soffset, finish, foffset)),\n rtl: cached(() => Optional.some(exactToNative(win, finish, foffset, start, soffset)))\n };\n }\n });\n const doDiagnose = (win, ranges) => {\n const rng = ranges.ltr();\n if (rng.collapsed) {\n const reversed = ranges.rtl().filter(rev => rev.collapsed === false);\n return reversed.map(rev => adt$1.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset)).getOrThunk(() => fromRange(win, adt$1.ltr, rng));\n } else {\n return fromRange(win, adt$1.ltr, rng);\n }\n };\n const diagnose = (win, selection) => {\n const ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n adt$1.ltr;\n adt$1.rtl;\n\n const caretPositionFromPoint = (doc, x, y) => {\n var _a;\n return Optional.from((_a = doc.caretPositionFromPoint) === null || _a === void 0 ? void 0 : _a.call(doc, x, y)).bind(pos => {\n if (pos.offsetNode === null) {\n return Optional.none();\n }\n const r = doc.createRange();\n r.setStart(pos.offsetNode, pos.offset);\n r.collapse();\n return Optional.some(r);\n });\n };\n const caretRangeFromPoint = (doc, x, y) => {\n var _a;\n return Optional.from((_a = doc.caretRangeFromPoint) === null || _a === void 0 ? void 0 : _a.call(doc, x, y));\n };\n const availableSearch = (doc, x, y) => {\n if (doc.caretPositionFromPoint) {\n return caretPositionFromPoint(doc, x, y);\n } else if (doc.caretRangeFromPoint) {\n return caretRangeFromPoint(doc, x, y);\n } else {\n return Optional.none();\n }\n };\n const fromPoint$1 = (win, x, y) => {\n const doc = win.document;\n return availableSearch(doc, x, y).map(rng => SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n };\n\n const beforeSpecial = (element, offset) => {\n const name$1 = name(element);\n if ('input' === name$1) {\n return Situ.after(element);\n } else if (!contains$2([\n 'br',\n 'img'\n ], name$1)) {\n return Situ.on(element, offset);\n } else {\n return offset === 0 ? Situ.before(element) : Situ.after(element);\n }\n };\n const preprocessRelative = (startSitu, finishSitu) => {\n const start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\n const finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\n return SimSelection.relative(start, finish);\n };\n const preprocessExact = (start, soffset, finish, foffset) => {\n const startSitu = beforeSpecial(start, soffset);\n const finishSitu = beforeSpecial(finish, foffset);\n return SimSelection.relative(startSitu, finishSitu);\n };\n const preprocess = selection => selection.match({\n domRange: rng => {\n const start = SugarElement.fromDom(rng.startContainer);\n const finish = SugarElement.fromDom(rng.endContainer);\n return preprocessExact(start, rng.startOffset, finish, rng.endOffset);\n },\n relative: preprocessRelative,\n exact: preprocessExact\n });\n\n const fromElements = (elements, scope) => {\n const doc = scope || document;\n const fragment = doc.createDocumentFragment();\n each$e(elements, element => {\n fragment.appendChild(element.dom);\n });\n return SugarElement.fromDom(fragment);\n };\n\n const toNative = selection => {\n const win = SimSelection.getWin(selection).dom;\n const getDomRange = (start, soffset, finish, foffset) => exactToNative(win, start, soffset, finish, foffset);\n const filtered = preprocess(selection);\n return diagnose(win, filtered).match({\n ltr: getDomRange,\n rtl: getDomRange\n });\n };\n const getAtPoint = (win, x, y) => fromPoint$1(win, x, y);\n\n const fromPoint = (clientX, clientY, doc) => {\n const win = defaultView(SugarElement.fromDom(doc));\n return getAtPoint(win.dom, clientX, clientY).map(simRange => {\n const rng = doc.createRange();\n rng.setStart(simRange.start.dom, simRange.soffset);\n rng.setEnd(simRange.finish.dom, simRange.foffset);\n return rng;\n }).getOrUndefined();\n };\n\n const isEq$4 = (rng1, rng2) => {\n return isNonNullable(rng1) && isNonNullable(rng2) && (rng1.startContainer === rng2.startContainer && rng1.startOffset === rng2.startOffset) && (rng1.endContainer === rng2.endContainer && rng1.endOffset === rng2.endOffset);\n };\n\n const findParent = (node, rootNode, predicate) => {\n let currentNode = node;\n while (currentNode && currentNode !== rootNode) {\n if (predicate(currentNode)) {\n return currentNode;\n }\n currentNode = currentNode.parentNode;\n }\n return null;\n };\n const hasParent$1 = (node, rootNode, predicate) => findParent(node, rootNode, predicate) !== null;\n const hasParentWithName = (node, rootNode, name) => hasParent$1(node, rootNode, node => node.nodeName === name);\n const isCeFalseCaretContainer = (node, rootNode) => isCaretContainer$2(node) && !hasParent$1(node, rootNode, isCaretNode);\n const hasBrBeforeAfter = (dom, node, left) => {\n const parentNode = node.parentNode;\n if (parentNode) {\n const walker = new DomTreeWalker(node, dom.getParent(parentNode, dom.isBlock) || dom.getRoot());\n let currentNode;\n while (currentNode = walker[left ? 'prev' : 'next']()) {\n if (isBr$6(currentNode)) {\n return true;\n }\n }\n }\n return false;\n };\n const isPrevNode = (node, name) => {\n var _a;\n return ((_a = node.previousSibling) === null || _a === void 0 ? void 0 : _a.nodeName) === name;\n };\n const hasContentEditableFalseParent = (root, node) => {\n let currentNode = node;\n while (currentNode && currentNode !== root) {\n if (isContentEditableFalse$b(currentNode)) {\n return true;\n }\n currentNode = currentNode.parentNode;\n }\n return false;\n };\n const findTextNodeRelative = (dom, isAfterNode, collapsed, left, startNode) => {\n const body = dom.getRoot();\n const nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n const parentNode = startNode.parentNode;\n let lastInlineElement;\n let node;\n if (!parentNode) {\n return Optional.none();\n }\n const parentBlockContainer = dom.getParent(parentNode, dom.isBlock) || body;\n if (left && isBr$6(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) {\n return Optional.some(CaretPosition(parentNode, dom.nodeIndex(startNode)));\n }\n const walker = new DomTreeWalker(startNode, parentBlockContainer);\n while (node = walker[left ? 'prev' : 'next']()) {\n if (dom.getContentEditableParent(node) === 'false' || isCeFalseCaretContainer(node, body)) {\n return Optional.none();\n }\n if (isText$b(node) && node.data.length > 0) {\n if (!hasParentWithName(node, body, 'A')) {\n return Optional.some(CaretPosition(node, left ? node.data.length : 0));\n }\n return Optional.none();\n }\n if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\n return Optional.none();\n }\n lastInlineElement = node;\n }\n if (isComment(lastInlineElement)) {\n return Optional.none();\n }\n if (collapsed && lastInlineElement) {\n return Optional.some(CaretPosition(lastInlineElement, 0));\n }\n return Optional.none();\n };\n const normalizeEndPoint = (dom, collapsed, start, rng) => {\n const body = dom.getRoot();\n let node;\n let normalized = false;\n let container = start ? rng.startContainer : rng.endContainer;\n let offset = start ? rng.startOffset : rng.endOffset;\n const isAfterNode = isElement$6(container) && offset === container.childNodes.length;\n const nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n let directionLeft = start;\n if (isCaretContainer$2(container)) {\n return Optional.none();\n }\n if (isElement$6(container) && offset > container.childNodes.length - 1) {\n directionLeft = false;\n }\n if (isDocument$1(container)) {\n container = body;\n offset = 0;\n }\n if (container === body) {\n if (directionLeft) {\n node = container.childNodes[offset > 0 ? offset - 1 : 0];\n if (node) {\n if (isCaretContainer$2(node)) {\n return Optional.none();\n }\n if (nonEmptyElementsMap[node.nodeName] || isTable$2(node)) {\n return Optional.none();\n }\n }\n }\n if (container.hasChildNodes()) {\n offset = Math.min(!directionLeft && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1);\n container = container.childNodes[offset];\n offset = isText$b(container) && isAfterNode ? container.data.length : 0;\n if (!collapsed && container === body.lastChild && isTable$2(container)) {\n return Optional.none();\n }\n if (hasContentEditableFalseParent(body, container) || isCaretContainer$2(container)) {\n return Optional.none();\n }\n if (isDetails(container)) {\n return Optional.none();\n }\n if (container.hasChildNodes() && !isTable$2(container)) {\n node = container;\n const walker = new DomTreeWalker(container, body);\n do {\n if (isContentEditableFalse$b(node) || isCaretContainer$2(node)) {\n normalized = false;\n break;\n }\n if (isText$b(node) && node.data.length > 0) {\n offset = directionLeft ? 0 : node.data.length;\n container = node;\n normalized = true;\n break;\n }\n if (nonEmptyElementsMap[node.nodeName.toLowerCase()] && !isTableCellOrCaption(node)) {\n offset = dom.nodeIndex(node);\n container = node.parentNode;\n if (!directionLeft) {\n offset++;\n }\n normalized = true;\n break;\n }\n } while (node = directionLeft ? walker.next() : walker.prev());\n }\n }\n }\n if (collapsed) {\n if (isText$b(container) && offset === 0) {\n findTextNodeRelative(dom, isAfterNode, collapsed, true, container).each(pos => {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n if (isElement$6(container)) {\n node = container.childNodes[offset];\n if (!node) {\n node = container.childNodes[offset - 1];\n }\n if (node && isBr$6(node) && !isPrevNode(node, 'A') && !hasBrBeforeAfter(dom, node, false) && !hasBrBeforeAfter(dom, node, true)) {\n findTextNodeRelative(dom, isAfterNode, collapsed, true, node).each(pos => {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n }\n }\n if (directionLeft && !collapsed && isText$b(container) && offset === container.data.length) {\n findTextNodeRelative(dom, isAfterNode, collapsed, false, container).each(pos => {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n return normalized && container ? Optional.some(CaretPosition(container, offset)) : Optional.none();\n };\n const normalize$2 = (dom, rng) => {\n const collapsed = rng.collapsed, normRng = rng.cloneRange();\n const startPos = CaretPosition.fromRangeStart(rng);\n normalizeEndPoint(dom, collapsed, true, normRng).each(pos => {\n if (!collapsed || !CaretPosition.isAbove(startPos, pos)) {\n normRng.setStart(pos.container(), pos.offset());\n }\n });\n if (!collapsed) {\n normalizeEndPoint(dom, collapsed, false, normRng).each(pos => {\n normRng.setEnd(pos.container(), pos.offset());\n });\n }\n if (collapsed) {\n normRng.collapse(true);\n }\n return isEq$4(rng, normRng) ? Optional.none() : Optional.some(normRng);\n };\n\n const splitText = (node, offset) => {\n return node.splitText(offset);\n };\n const split = rng => {\n let startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n if (startContainer === endContainer && isText$b(startContainer)) {\n if (startOffset > 0 && startOffset < startContainer.data.length) {\n endContainer = splitText(startContainer, startOffset);\n startContainer = endContainer.previousSibling;\n if (endOffset > startOffset) {\n endOffset = endOffset - startOffset;\n const newContainer = splitText(endContainer, endOffset).previousSibling;\n startContainer = endContainer = newContainer;\n endOffset = newContainer.data.length;\n startOffset = 0;\n } else {\n endOffset = 0;\n }\n }\n } else {\n if (isText$b(startContainer) && startOffset > 0 && startOffset < startContainer.data.length) {\n startContainer = splitText(startContainer, startOffset);\n startOffset = 0;\n }\n if (isText$b(endContainer) && endOffset > 0 && endOffset < endContainer.data.length) {\n const newContainer = splitText(endContainer, endOffset).previousSibling;\n endContainer = newContainer;\n endOffset = newContainer.data.length;\n }\n }\n return {\n startContainer,\n startOffset,\n endContainer,\n endOffset\n };\n };\n\n const RangeUtils = dom => {\n const walk = (rng, callback) => {\n return walk$3(dom, rng, callback);\n };\n const split$1 = split;\n const normalize = rng => {\n return normalize$2(dom, rng).fold(never, normalizedRng => {\n rng.setStart(normalizedRng.startContainer, normalizedRng.startOffset);\n rng.setEnd(normalizedRng.endContainer, normalizedRng.endOffset);\n return true;\n });\n };\n const expand = (rng, options = { type: 'word' }) => {\n if (options.type === 'word') {\n const rangeLike = expandRng(dom, rng, [{ inline: 'span' }], {\n includeTrailingSpace: false,\n expandToBlock: false\n });\n const newRange = dom.createRng();\n newRange.setStart(rangeLike.startContainer, rangeLike.startOffset);\n newRange.setEnd(rangeLike.endContainer, rangeLike.endOffset);\n return newRange;\n }\n return rng;\n };\n return {\n walk,\n split: split$1,\n expand,\n normalize\n };\n };\n RangeUtils.compareRanges = isEq$4;\n RangeUtils.getCaretRangeFromPoint = fromPoint;\n RangeUtils.getSelectedNode = getSelectedNode;\n RangeUtils.getNode = getNode$1;\n\n const Dimension = (name, getOffset) => {\n const set = (element, h) => {\n if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n }\n const dom = element.dom;\n if (isSupported(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n const get = element => {\n const r = getOffset(element);\n if (r <= 0 || r === null) {\n const css = get$7(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n const getOuter = get;\n const aggregate = (element, properties) => foldl(properties, (acc, property) => {\n const val = get$7(element, property);\n const value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n const max = (element, value, properties) => {\n const cumulativeInclusions = aggregate(element, properties);\n const absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set,\n get,\n getOuter,\n aggregate,\n max\n };\n };\n\n const api = Dimension('height', element => {\n const dom = element.dom;\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n const get$2 = element => api.get(element);\n\n const walkUp = (navigation, doc) => {\n const frame = navigation.view(doc);\n return frame.fold(constant([]), f => {\n const parent = navigation.owner(f);\n const rest = walkUp(navigation, parent);\n return [f].concat(rest);\n });\n };\n const pathTo = (element, navigation) => {\n const d = navigation.owner(element);\n return walkUp(navigation, d);\n };\n\n const view = doc => {\n var _a;\n const element = doc.dom === document ? Optional.none() : Optional.from((_a = doc.dom.defaultView) === null || _a === void 0 ? void 0 : _a.frameElement);\n return element.map(SugarElement.fromDom);\n };\n const owner = element => documentOrOwner(element);\n\n var Navigation = /*#__PURE__*/Object.freeze({\n __proto__: null,\n view: view,\n owner: owner\n });\n\n const find = element => {\n const doc = getDocument();\n const scroll = get$5(doc);\n const frames = pathTo(element, Navigation);\n const offset = viewport(element);\n const r = foldr(frames, (b, a) => {\n const loc = viewport(a);\n return {\n left: b.left + loc.left,\n top: b.top + loc.top\n };\n }, {\n left: 0,\n top: 0\n });\n return SugarPosition(r.left + offset.left + scroll.left, r.top + offset.top + scroll.top);\n };\n\n const excludeFromDescend = element => name(element) === 'textarea';\n const fireScrollIntoViewEvent = (editor, data) => {\n const scrollEvent = editor.dispatch('ScrollIntoView', data);\n return scrollEvent.isDefaultPrevented();\n };\n const fireAfterScrollIntoViewEvent = (editor, data) => {\n editor.dispatch('AfterScrollIntoView', data);\n };\n const descend = (element, offset) => {\n const children = children$1(element);\n if (children.length === 0 || excludeFromDescend(element)) {\n return {\n element,\n offset\n };\n } else if (offset < children.length && !excludeFromDescend(children[offset])) {\n return {\n element: children[offset],\n offset: 0\n };\n } else {\n const last = children[children.length - 1];\n if (excludeFromDescend(last)) {\n return {\n element,\n offset\n };\n } else {\n if (name(last) === 'img') {\n return {\n element: last,\n offset: 1\n };\n } else if (isText$c(last)) {\n return {\n element: last,\n offset: get$3(last).length\n };\n } else {\n return {\n element: last,\n offset: children$1(last).length\n };\n }\n }\n }\n };\n const markerInfo = (element, cleanupFun) => {\n const pos = absolute(element);\n const height = get$2(element);\n return {\n element,\n bottom: pos.top + height,\n height,\n pos,\n cleanup: cleanupFun\n };\n };\n const createMarker$1 = (element, offset) => {\n const startPoint = descend(element, offset);\n const span = SugarElement.fromHtml('' + ZWSP$1 + '');\n before$3(startPoint.element, span);\n return markerInfo(span, () => remove$4(span));\n };\n const elementMarker = element => markerInfo(SugarElement.fromDom(element), noop);\n const withMarker = (editor, f, rng, alignToTop) => {\n preserveWith(editor, (_s, _e) => applyWithMarker(editor, f, rng, alignToTop), rng);\n };\n const withScrollEvents = (editor, doc, f, marker, alignToTop) => {\n const data = {\n elm: marker.element.dom,\n alignToTop\n };\n if (fireScrollIntoViewEvent(editor, data)) {\n return;\n }\n const scrollTop = get$5(doc).top;\n f(editor, doc, scrollTop, marker, alignToTop);\n fireAfterScrollIntoViewEvent(editor, data);\n };\n const applyWithMarker = (editor, f, rng, alignToTop) => {\n const body = SugarElement.fromDom(editor.getBody());\n const doc = SugarElement.fromDom(editor.getDoc());\n reflow(body);\n const marker = createMarker$1(SugarElement.fromDom(rng.startContainer), rng.startOffset);\n withScrollEvents(editor, doc, f, marker, alignToTop);\n marker.cleanup();\n };\n const withElement = (editor, element, f, alignToTop) => {\n const doc = SugarElement.fromDom(editor.getDoc());\n withScrollEvents(editor, doc, f, elementMarker(element), alignToTop);\n };\n const preserveWith = (editor, f, rng) => {\n const startElement = rng.startContainer;\n const startOffset = rng.startOffset;\n const endElement = rng.endContainer;\n const endOffset = rng.endOffset;\n f(SugarElement.fromDom(startElement), SugarElement.fromDom(endElement));\n const newRng = editor.dom.createRng();\n newRng.setStart(startElement, startOffset);\n newRng.setEnd(endElement, endOffset);\n editor.selection.setRng(rng);\n };\n const scrollToMarker = (editor, marker, viewHeight, alignToTop, doc) => {\n const pos = marker.pos;\n if (alignToTop) {\n to(pos.left, pos.top, doc);\n } else {\n const y = pos.top - viewHeight + marker.height;\n to(-editor.getBody().getBoundingClientRect().left, y, doc);\n }\n };\n const intoWindowIfNeeded = (editor, doc, scrollTop, viewHeight, marker, alignToTop) => {\n const viewportBottom = viewHeight + scrollTop;\n const markerTop = marker.pos.top;\n const markerBottom = marker.bottom;\n const largerThanViewport = markerBottom - markerTop >= viewHeight;\n if (markerTop < scrollTop) {\n scrollToMarker(editor, marker, viewHeight, alignToTop !== false, doc);\n } else if (markerTop > viewportBottom) {\n const align = largerThanViewport ? alignToTop !== false : alignToTop === true;\n scrollToMarker(editor, marker, viewHeight, align, doc);\n } else if (markerBottom > viewportBottom && !largerThanViewport) {\n scrollToMarker(editor, marker, viewHeight, alignToTop === true, doc);\n }\n };\n const intoWindow = (editor, doc, scrollTop, marker, alignToTop) => {\n const viewHeight = defaultView(doc).dom.innerHeight;\n intoWindowIfNeeded(editor, doc, scrollTop, viewHeight, marker, alignToTop);\n };\n const intoFrame = (editor, doc, scrollTop, marker, alignToTop) => {\n const frameViewHeight = defaultView(doc).dom.innerHeight;\n intoWindowIfNeeded(editor, doc, scrollTop, frameViewHeight, marker, alignToTop);\n const op = find(marker.element);\n const viewportBounds = getBounds(window);\n if (op.top < viewportBounds.y) {\n intoView(marker.element, alignToTop !== false);\n } else if (op.top > viewportBounds.bottom) {\n intoView(marker.element, alignToTop === true);\n }\n };\n const rangeIntoWindow = (editor, rng, alignToTop) => withMarker(editor, intoWindow, rng, alignToTop);\n const elementIntoWindow = (editor, element, alignToTop) => withElement(editor, element, intoWindow, alignToTop);\n const rangeIntoFrame = (editor, rng, alignToTop) => withMarker(editor, intoFrame, rng, alignToTop);\n const elementIntoFrame = (editor, element, alignToTop) => withElement(editor, element, intoFrame, alignToTop);\n const scrollElementIntoView = (editor, element, alignToTop) => {\n const scroller = editor.inline ? elementIntoWindow : elementIntoFrame;\n scroller(editor, element, alignToTop);\n };\n const scrollRangeIntoView = (editor, rng, alignToTop) => {\n const scroller = editor.inline ? rangeIntoWindow : rangeIntoFrame;\n scroller(editor, rng, alignToTop);\n };\n\n const isEditableRange = (dom, rng) => {\n if (rng.collapsed) {\n return dom.isEditable(rng.startContainer);\n } else {\n return dom.isEditable(rng.startContainer) && dom.isEditable(rng.endContainer);\n }\n };\n\n const getEndpointElement = (root, rng, start, real, resolve) => {\n const container = start ? rng.startContainer : rng.endContainer;\n const offset = start ? rng.startOffset : rng.endOffset;\n return Optional.from(container).map(SugarElement.fromDom).map(elm => !real || !rng.collapsed ? child$1(elm, resolve(elm, offset)).getOr(elm) : elm).bind(elm => isElement$7(elm) ? Optional.some(elm) : parent(elm).filter(isElement$7)).map(elm => elm.dom).getOr(root);\n };\n const getStart = (root, rng, real = false) => getEndpointElement(root, rng, true, real, (elm, offset) => Math.min(childNodesCount(elm), offset));\n const getEnd = (root, rng, real = false) => getEndpointElement(root, rng, false, real, (elm, offset) => offset > 0 ? offset - 1 : offset);\n const skipEmptyTextNodes = (node, forwards) => {\n const orig = node;\n while (node && isText$b(node) && node.length === 0) {\n node = forwards ? node.nextSibling : node.previousSibling;\n }\n return node || orig;\n };\n const getNode = (root, rng) => {\n if (!rng) {\n return root;\n }\n let startContainer = rng.startContainer;\n let endContainer = rng.endContainer;\n const startOffset = rng.startOffset;\n const endOffset = rng.endOffset;\n let node = rng.commonAncestorContainer;\n if (!rng.collapsed) {\n if (startContainer === endContainer) {\n if (endOffset - startOffset < 2) {\n if (startContainer.hasChildNodes()) {\n node = startContainer.childNodes[startOffset];\n }\n }\n }\n if (isText$b(startContainer) && isText$b(endContainer)) {\n if (startContainer.length === startOffset) {\n startContainer = skipEmptyTextNodes(startContainer.nextSibling, true);\n } else {\n startContainer = startContainer.parentNode;\n }\n if (endOffset === 0) {\n endContainer = skipEmptyTextNodes(endContainer.previousSibling, false);\n } else {\n endContainer = endContainer.parentNode;\n }\n if (startContainer && startContainer === endContainer) {\n node = startContainer;\n }\n }\n }\n const elm = isText$b(node) ? node.parentNode : node;\n return isHTMLElement(elm) ? elm : root;\n };\n const getSelectedBlocks = (dom, rng, startElm, endElm) => {\n const selectedBlocks = [];\n const root = dom.getRoot();\n const start = dom.getParent(startElm || getStart(root, rng, rng.collapsed), dom.isBlock);\n const end = dom.getParent(endElm || getEnd(root, rng, rng.collapsed), dom.isBlock);\n if (start && start !== root) {\n selectedBlocks.push(start);\n }\n if (start && end && start !== end) {\n let node;\n const walker = new DomTreeWalker(start, root);\n while ((node = walker.next()) && node !== end) {\n if (dom.isBlock(node)) {\n selectedBlocks.push(node);\n }\n }\n }\n if (end && start !== end && end !== root) {\n selectedBlocks.push(end);\n }\n return selectedBlocks;\n };\n const select = (dom, node, content) => Optional.from(node).bind(node => Optional.from(node.parentNode).map(parent => {\n const idx = dom.nodeIndex(node);\n const rng = dom.createRng();\n rng.setStart(parent, idx);\n rng.setEnd(parent, idx + 1);\n if (content) {\n moveEndPoint(dom, rng, node, true);\n moveEndPoint(dom, rng, node, false);\n }\n return rng;\n }));\n\n const processRanges = (editor, ranges) => map$3(ranges, range => {\n const evt = editor.dispatch('GetSelectionRange', { range });\n return evt.range !== range ? evt.range : range;\n });\n\n const typeLookup = {\n '#text': 3,\n '#comment': 8,\n '#cdata': 4,\n '#pi': 7,\n '#doctype': 10,\n '#document-fragment': 11\n };\n const walk$2 = (node, root, prev) => {\n const startName = prev ? 'lastChild' : 'firstChild';\n const siblingName = prev ? 'prev' : 'next';\n if (node[startName]) {\n return node[startName];\n }\n if (node !== root) {\n let sibling = node[siblingName];\n if (sibling) {\n return sibling;\n }\n for (let parent = node.parent; parent && parent !== root; parent = parent.parent) {\n sibling = parent[siblingName];\n if (sibling) {\n return sibling;\n }\n }\n }\n return undefined;\n };\n const isEmptyTextNode = node => {\n var _a;\n const text = (_a = node.value) !== null && _a !== void 0 ? _a : '';\n if (!isWhitespaceText(text)) {\n return false;\n }\n const parentNode = node.parent;\n if (parentNode && (parentNode.name !== 'span' || parentNode.attr('style')) && /^[ ]+$/.test(text)) {\n return false;\n }\n return true;\n };\n const isNonEmptyElement = node => {\n const isNamedAnchor = node.name === 'a' && !node.attr('href') && node.attr('id');\n return node.attr('name') || node.attr('id') && !node.firstChild || node.attr('data-mce-bookmark') || isNamedAnchor;\n };\n class AstNode {\n static create(name, attrs) {\n const node = new AstNode(name, typeLookup[name] || 1);\n if (attrs) {\n each$d(attrs, (value, attrName) => {\n node.attr(attrName, value);\n });\n }\n return node;\n }\n constructor(name, type) {\n this.name = name;\n this.type = type;\n if (type === 1) {\n this.attributes = [];\n this.attributes.map = {};\n }\n }\n replace(node) {\n const self = this;\n if (node.parent) {\n node.remove();\n }\n self.insert(node, self);\n self.remove();\n return self;\n }\n attr(name, value) {\n const self = this;\n if (!isString(name)) {\n if (isNonNullable(name)) {\n each$d(name, (value, key) => {\n self.attr(key, value);\n });\n }\n return self;\n }\n const attrs = self.attributes;\n if (attrs) {\n if (value !== undefined) {\n if (value === null) {\n if (name in attrs.map) {\n delete attrs.map[name];\n let i = attrs.length;\n while (i--) {\n if (attrs[i].name === name) {\n attrs.splice(i, 1);\n return self;\n }\n }\n }\n return self;\n }\n if (name in attrs.map) {\n let i = attrs.length;\n while (i--) {\n if (attrs[i].name === name) {\n attrs[i].value = value;\n break;\n }\n }\n } else {\n attrs.push({\n name,\n value\n });\n }\n attrs.map[name] = value;\n return self;\n }\n return attrs.map[name];\n }\n return undefined;\n }\n clone() {\n const self = this;\n const clone = new AstNode(self.name, self.type);\n const selfAttrs = self.attributes;\n if (selfAttrs) {\n const cloneAttrs = [];\n cloneAttrs.map = {};\n for (let i = 0, l = selfAttrs.length; i < l; i++) {\n const selfAttr = selfAttrs[i];\n if (selfAttr.name !== 'id') {\n cloneAttrs[cloneAttrs.length] = {\n name: selfAttr.name,\n value: selfAttr.value\n };\n cloneAttrs.map[selfAttr.name] = selfAttr.value;\n }\n }\n clone.attributes = cloneAttrs;\n }\n clone.value = self.value;\n return clone;\n }\n wrap(wrapper) {\n const self = this;\n if (self.parent) {\n self.parent.insert(wrapper, self);\n wrapper.append(self);\n }\n return self;\n }\n unwrap() {\n const self = this;\n for (let node = self.firstChild; node;) {\n const next = node.next;\n self.insert(node, self, true);\n node = next;\n }\n self.remove();\n }\n remove() {\n const self = this, parent = self.parent, next = self.next, prev = self.prev;\n if (parent) {\n if (parent.firstChild === self) {\n parent.firstChild = next;\n if (next) {\n next.prev = null;\n }\n } else if (prev) {\n prev.next = next;\n }\n if (parent.lastChild === self) {\n parent.lastChild = prev;\n if (prev) {\n prev.next = null;\n }\n } else if (next) {\n next.prev = prev;\n }\n self.parent = self.next = self.prev = null;\n }\n return self;\n }\n append(node) {\n const self = this;\n if (node.parent) {\n node.remove();\n }\n const last = self.lastChild;\n if (last) {\n last.next = node;\n node.prev = last;\n self.lastChild = node;\n } else {\n self.lastChild = self.firstChild = node;\n }\n node.parent = self;\n return node;\n }\n insert(node, refNode, before) {\n if (node.parent) {\n node.remove();\n }\n const parent = refNode.parent || this;\n if (before) {\n if (refNode === parent.firstChild) {\n parent.firstChild = node;\n } else if (refNode.prev) {\n refNode.prev.next = node;\n }\n node.prev = refNode.prev;\n node.next = refNode;\n refNode.prev = node;\n } else {\n if (refNode === parent.lastChild) {\n parent.lastChild = node;\n } else if (refNode.next) {\n refNode.next.prev = node;\n }\n node.next = refNode.next;\n node.prev = refNode;\n refNode.next = node;\n }\n node.parent = parent;\n return node;\n }\n getAll(name) {\n const self = this;\n const collection = [];\n for (let node = self.firstChild; node; node = walk$2(node, self)) {\n if (node.name === name) {\n collection.push(node);\n }\n }\n return collection;\n }\n children() {\n const self = this;\n const collection = [];\n for (let node = self.firstChild; node; node = node.next) {\n collection.push(node);\n }\n return collection;\n }\n empty() {\n const self = this;\n if (self.firstChild) {\n const nodes = [];\n for (let node = self.firstChild; node; node = walk$2(node, self)) {\n nodes.push(node);\n }\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n node.parent = node.firstChild = node.lastChild = node.next = node.prev = null;\n }\n }\n self.firstChild = self.lastChild = null;\n return self;\n }\n isEmpty(elements, whitespace = {}, predicate) {\n var _a;\n const self = this;\n let node = self.firstChild;\n if (isNonEmptyElement(self)) {\n return false;\n }\n if (node) {\n do {\n if (node.type === 1) {\n if (node.attr('data-mce-bogus')) {\n continue;\n }\n if (elements[node.name]) {\n return false;\n }\n if (isNonEmptyElement(node)) {\n return false;\n }\n }\n if (node.type === 8) {\n return false;\n }\n if (node.type === 3 && !isEmptyTextNode(node)) {\n return false;\n }\n if (node.type === 3 && node.parent && whitespace[node.parent.name] && isWhitespaceText((_a = node.value) !== null && _a !== void 0 ? _a : '')) {\n return false;\n }\n if (predicate && predicate(node)) {\n return false;\n }\n } while (node = walk$2(node, self));\n }\n return true;\n }\n walk(prev) {\n return walk$2(this, null, prev);\n }\n }\n\n const unescapedTextParents = Tools.makeMap('NOSCRIPT STYLE SCRIPT XMP IFRAME NOEMBED NOFRAMES PLAINTEXT', ' ');\n const containsZwsp = node => isString(node.nodeValue) && node.nodeValue.includes(ZWSP$1);\n const getTemporaryNodeSelector = tempAttrs => `${ tempAttrs.length === 0 ? '' : `${ map$3(tempAttrs, attr => `[${ attr }]`).join(',') },` }[data-mce-bogus=\"all\"]`;\n const getTemporaryNodes = (tempAttrs, body) => body.querySelectorAll(getTemporaryNodeSelector(tempAttrs));\n const createZwspCommentWalker = body => document.createTreeWalker(body, NodeFilter.SHOW_COMMENT, node => containsZwsp(node) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP);\n const createUnescapedZwspTextWalker = body => document.createTreeWalker(body, NodeFilter.SHOW_TEXT, node => {\n if (containsZwsp(node)) {\n const parent = node.parentNode;\n return parent && has$2(unescapedTextParents, parent.nodeName) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n } else {\n return NodeFilter.FILTER_SKIP;\n }\n });\n const hasZwspComment = body => createZwspCommentWalker(body).nextNode() !== null;\n const hasUnescapedZwspText = body => createUnescapedZwspTextWalker(body).nextNode() !== null;\n const hasTemporaryNode = (tempAttrs, body) => body.querySelector(getTemporaryNodeSelector(tempAttrs)) !== null;\n const trimTemporaryNodes = (tempAttrs, body) => {\n each$e(getTemporaryNodes(tempAttrs, body), elm => {\n const element = SugarElement.fromDom(elm);\n if (get$9(element, 'data-mce-bogus') === 'all') {\n remove$4(element);\n } else {\n each$e(tempAttrs, attr => {\n if (has$1(element, attr)) {\n remove$9(element, attr);\n }\n });\n }\n });\n };\n const emptyAllNodeValuesInWalker = walker => {\n let curr = walker.nextNode();\n while (curr !== null) {\n curr.nodeValue = null;\n curr = walker.nextNode();\n }\n };\n const emptyZwspComments = compose(emptyAllNodeValuesInWalker, createZwspCommentWalker);\n const emptyUnescapedZwspTexts = compose(emptyAllNodeValuesInWalker, createUnescapedZwspTextWalker);\n const trim$1 = (body, tempAttrs) => {\n const conditionalTrims = [\n {\n condition: curry(hasTemporaryNode, tempAttrs),\n action: curry(trimTemporaryNodes, tempAttrs)\n },\n {\n condition: hasZwspComment,\n action: emptyZwspComments\n },\n {\n condition: hasUnescapedZwspText,\n action: emptyUnescapedZwspTexts\n }\n ];\n let trimmed = body;\n let cloned = false;\n each$e(conditionalTrims, ({condition, action}) => {\n if (condition(trimmed)) {\n if (!cloned) {\n trimmed = body.cloneNode(true);\n cloned = true;\n }\n action(trimmed);\n }\n });\n return trimmed;\n };\n\n const cleanupBogusElements = parent => {\n const bogusElements = descendants(parent, '[data-mce-bogus]');\n each$e(bogusElements, elem => {\n const bogusValue = get$9(elem, 'data-mce-bogus');\n if (bogusValue === 'all') {\n remove$4(elem);\n } else if (isBr$5(elem)) {\n before$3(elem, SugarElement.fromText(zeroWidth));\n remove$4(elem);\n } else {\n unwrap(elem);\n }\n });\n };\n const cleanupInputNames = parent => {\n const inputs = descendants(parent, 'input');\n each$e(inputs, input => {\n remove$9(input, 'name');\n });\n };\n\n const trimEmptyContents = (editor, html) => {\n const blockName = getForcedRootBlock(editor);\n const emptyRegExp = new RegExp(`^(<${ blockName }[^>]*>( | |\\\\s|\\u00a0|
|)<\\\\/${ blockName }>[\\r\\n]*|
[\\r\\n]*)$`);\n return html.replace(emptyRegExp, '');\n };\n const getPlainTextContent = (editor, body) => {\n const doc = editor.getDoc();\n const dos = getRootNode(SugarElement.fromDom(editor.getBody()));\n const offscreenDiv = SugarElement.fromTag('div', doc);\n set$4(offscreenDiv, 'data-mce-bogus', 'all');\n setAll(offscreenDiv, {\n position: 'fixed',\n left: '-9999999px',\n top: '0'\n });\n set$1(offscreenDiv, body.innerHTML);\n cleanupBogusElements(offscreenDiv);\n cleanupInputNames(offscreenDiv);\n const root = getContentContainer(dos);\n append$1(root, offscreenDiv);\n const content = trim$2(offscreenDiv.dom.innerText);\n remove$4(offscreenDiv);\n return content;\n };\n const getContentFromBody = (editor, args, body) => {\n let content;\n if (args.format === 'raw') {\n content = Tools.trim(trim$2(trim$1(body, editor.serializer.getTempAttrs()).innerHTML));\n } else if (args.format === 'text') {\n content = getPlainTextContent(editor, body);\n } else if (args.format === 'tree') {\n content = editor.serializer.serialize(body, args);\n } else {\n content = trimEmptyContents(editor, editor.serializer.serialize(body, args));\n }\n const shouldTrim = args.format !== 'text' && !isWsPreserveElement(SugarElement.fromDom(body));\n return shouldTrim && isString(content) ? Tools.trim(content) : content;\n };\n const getContentInternal = (editor, args) => Optional.from(editor.getBody()).fold(constant(args.format === 'tree' ? new AstNode('body', 11) : ''), body => getContentFromBody(editor, args, body));\n\n const makeMap$1 = Tools.makeMap;\n const Writer = settings => {\n const html = [];\n settings = settings || {};\n const indent = settings.indent;\n const indentBefore = makeMap$1(settings.indent_before || '');\n const indentAfter = makeMap$1(settings.indent_after || '');\n const encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);\n const htmlOutput = settings.element_format !== 'xhtml';\n return {\n start: (name, attrs, empty) => {\n if (indent && indentBefore[name] && html.length > 0) {\n const value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n html.push('<', name);\n if (attrs) {\n for (let i = 0, l = attrs.length; i < l; i++) {\n const attr = attrs[i];\n html.push(' ', attr.name, '=\"', encode(attr.value, true), '\"');\n }\n }\n if (!empty || htmlOutput) {\n html[html.length] = '>';\n } else {\n html[html.length] = ' />';\n }\n if (empty && indent && indentAfter[name] && html.length > 0) {\n const value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n },\n end: name => {\n let value;\n html.push('');\n if (indent && indentAfter[name] && html.length > 0) {\n value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n },\n text: (text, raw) => {\n if (text.length > 0) {\n html[html.length] = raw ? text : encode(text);\n }\n },\n cdata: text => {\n html.push('');\n },\n comment: text => {\n html.push('');\n },\n pi: (name, text) => {\n if (text) {\n html.push('');\n } else {\n html.push('');\n }\n if (indent) {\n html.push('\\n');\n }\n },\n doctype: text => {\n html.push('', indent ? '\\n' : '');\n },\n reset: () => {\n html.length = 0;\n },\n getContent: () => {\n return html.join('').replace(/\\n$/, '');\n }\n };\n };\n\n const HtmlSerializer = (settings = {}, schema = Schema()) => {\n const writer = Writer(settings);\n settings.validate = 'validate' in settings ? settings.validate : true;\n const serialize = node => {\n const validate = settings.validate;\n const handlers = {\n 3: node => {\n var _a;\n writer.text((_a = node.value) !== null && _a !== void 0 ? _a : '', node.raw);\n },\n 8: node => {\n var _a;\n writer.comment((_a = node.value) !== null && _a !== void 0 ? _a : '');\n },\n 7: node => {\n writer.pi(node.name, node.value);\n },\n 10: node => {\n var _a;\n writer.doctype((_a = node.value) !== null && _a !== void 0 ? _a : '');\n },\n 4: node => {\n var _a;\n writer.cdata((_a = node.value) !== null && _a !== void 0 ? _a : '');\n },\n 11: node => {\n let tempNode = node;\n if (tempNode = tempNode.firstChild) {\n do {\n walk(tempNode);\n } while (tempNode = tempNode.next);\n }\n }\n };\n writer.reset();\n const walk = node => {\n var _a;\n const handler = handlers[node.type];\n if (!handler) {\n const name = node.name;\n const isEmpty = name in schema.getVoidElements();\n let attrs = node.attributes;\n if (validate && attrs && attrs.length > 1) {\n const sortedAttrs = [];\n sortedAttrs.map = {};\n const elementRule = schema.getElementRule(node.name);\n if (elementRule) {\n for (let i = 0, l = elementRule.attributesOrder.length; i < l; i++) {\n const attrName = elementRule.attributesOrder[i];\n if (attrName in attrs.map) {\n const attrValue = attrs.map[attrName];\n sortedAttrs.map[attrName] = attrValue;\n sortedAttrs.push({\n name: attrName,\n value: attrValue\n });\n }\n }\n for (let i = 0, l = attrs.length; i < l; i++) {\n const attrName = attrs[i].name;\n if (!(attrName in sortedAttrs.map)) {\n const attrValue = attrs.map[attrName];\n sortedAttrs.map[attrName] = attrValue;\n sortedAttrs.push({\n name: attrName,\n value: attrValue\n });\n }\n }\n attrs = sortedAttrs;\n }\n }\n writer.start(name, attrs, isEmpty);\n if (isNonHtmlElementRootName(name)) {\n if (isString(node.value)) {\n writer.text(node.value, true);\n }\n writer.end(name);\n } else {\n if (!isEmpty) {\n let child = node.firstChild;\n if (child) {\n if ((name === 'pre' || name === 'textarea') && child.type === 3 && ((_a = child.value) === null || _a === void 0 ? void 0 : _a[0]) === '\\n') {\n writer.text('\\n', true);\n }\n do {\n walk(child);\n } while (child = child.next);\n }\n writer.end(name);\n }\n }\n } else {\n handler(node);\n }\n };\n if (node.type === 1 && !settings.inner) {\n walk(node);\n } else if (node.type === 3) {\n handlers[3](node);\n } else {\n handlers[11](node);\n }\n return writer.getContent();\n };\n return { serialize };\n };\n\n const nonInheritableStyles = new Set();\n (() => {\n const nonInheritableStylesArr = [\n 'margin',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'margin-bottom',\n 'padding',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'padding-bottom',\n 'border',\n 'border-width',\n 'border-style',\n 'border-color',\n 'background',\n 'background-attachment',\n 'background-clip',\n 'background-image',\n 'background-origin',\n 'background-position',\n 'background-repeat',\n 'background-size',\n 'float',\n 'position',\n 'left',\n 'right',\n 'top',\n 'bottom',\n 'z-index',\n 'display',\n 'transform',\n 'width',\n 'max-width',\n 'min-width',\n 'height',\n 'max-height',\n 'min-height',\n 'overflow',\n 'overflow-x',\n 'overflow-y',\n 'text-overflow',\n 'vertical-align',\n 'transition',\n 'transition-delay',\n 'transition-duration',\n 'transition-property',\n 'transition-timing-function'\n ];\n each$e(nonInheritableStylesArr, style => {\n nonInheritableStyles.add(style);\n });\n })();\n const conditionalNonInheritableStyles = new Set();\n (() => {\n const conditionalNonInheritableStylesArr = ['background-color'];\n each$e(conditionalNonInheritableStylesArr, style => {\n conditionalNonInheritableStyles.add(style);\n });\n })();\n const shorthandStyleProps = [\n 'font',\n 'text-decoration',\n 'text-emphasis'\n ];\n const getStyles$1 = (dom, node) => dom.parseStyle(dom.getAttrib(node, 'style'));\n const getStyleProps = (dom, node) => keys(getStyles$1(dom, node));\n const isNonInheritableStyle = style => nonInheritableStyles.has(style);\n const isConditionalNonInheritableStyle = style => conditionalNonInheritableStyles.has(style);\n const hasNonInheritableStyles = (dom, node) => exists(getStyleProps(dom, node), style => isNonInheritableStyle(style));\n const hasConditionalNonInheritableStyles = (dom, node) => hasNonInheritableStyles(dom, node) && exists(getStyleProps(dom, node), style => isConditionalNonInheritableStyle(style));\n const getLonghandStyleProps = styles => filter$5(styles, style => exists(shorthandStyleProps, prop => startsWith(style, prop)));\n const hasStyleConflict = (dom, node, parentNode) => {\n const nodeStyleProps = getStyleProps(dom, node);\n const parentNodeStyleProps = getStyleProps(dom, parentNode);\n const valueMismatch = prop => {\n var _a, _b;\n const nodeValue = (_a = dom.getStyle(node, prop)) !== null && _a !== void 0 ? _a : '';\n const parentValue = (_b = dom.getStyle(parentNode, prop)) !== null && _b !== void 0 ? _b : '';\n return isNotEmpty(nodeValue) && isNotEmpty(parentValue) && nodeValue !== parentValue;\n };\n return exists(nodeStyleProps, nodeStyleProp => {\n const propExists = props => exists(props, prop => prop === nodeStyleProp);\n if (!propExists(parentNodeStyleProps) && propExists(shorthandStyleProps)) {\n const longhandProps = getLonghandStyleProps(parentNodeStyleProps);\n return exists(longhandProps, valueMismatch);\n } else {\n return valueMismatch(nodeStyleProp);\n }\n });\n };\n\n const isChar = (forward, predicate, pos) => Optional.from(pos.container()).filter(isText$b).exists(text => {\n const delta = forward ? 0 : -1;\n return predicate(text.data.charAt(pos.offset() + delta));\n });\n const isBeforeSpace = curry(isChar, true, isWhiteSpace);\n const isAfterSpace = curry(isChar, false, isWhiteSpace);\n const isEmptyText = pos => {\n const container = pos.container();\n return isText$b(container) && (container.data.length === 0 || isZwsp(container.data) && BookmarkManager.isBookmarkNode(container.parentNode));\n };\n const matchesElementPosition = (before, predicate) => pos => getChildNodeAtRelativeOffset(before ? 0 : -1, pos).filter(predicate).isSome();\n const isImageBlock = node => isImg(node) && get$7(SugarElement.fromDom(node), 'display') === 'block';\n const isCefNode = node => isContentEditableFalse$b(node) && !isBogusAll(node);\n const isBeforeImageBlock = matchesElementPosition(true, isImageBlock);\n const isAfterImageBlock = matchesElementPosition(false, isImageBlock);\n const isBeforeMedia = matchesElementPosition(true, isMedia$2);\n const isAfterMedia = matchesElementPosition(false, isMedia$2);\n const isBeforeTable = matchesElementPosition(true, isTable$2);\n const isAfterTable = matchesElementPosition(false, isTable$2);\n const isBeforeContentEditableFalse = matchesElementPosition(true, isCefNode);\n const isAfterContentEditableFalse = matchesElementPosition(false, isCefNode);\n\n const dropLast = xs => xs.slice(0, -1);\n const parentsUntil = (start, root, predicate) => {\n if (contains(root, start)) {\n return dropLast(parents$1(start, elm => {\n return predicate(elm) || eq(elm, root);\n }));\n } else {\n return [];\n }\n };\n const parents = (start, root) => parentsUntil(start, root, never);\n const parentsAndSelf = (start, root) => [start].concat(parents(start, root));\n\n const navigateIgnoreEmptyTextNodes = (forward, root, from) => navigateIgnore(forward, root, from, isEmptyText);\n const isBlock$1 = schema => el => schema.isBlock(name(el));\n const getClosestBlock$1 = (root, pos, schema) => find$2(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock$1(schema));\n const isAtBeforeAfterBlockBoundary = (forward, root, pos, schema) => navigateIgnoreEmptyTextNodes(forward, root.dom, pos).forall(newPos => getClosestBlock$1(root, pos, schema).fold(() => !isInSameBlock(newPos, pos, root.dom), fromBlock => !isInSameBlock(newPos, pos, root.dom) && contains(fromBlock, SugarElement.fromDom(newPos.container()))));\n const isAtBlockBoundary = (forward, root, pos, schema) => getClosestBlock$1(root, pos, schema).fold(() => navigateIgnoreEmptyTextNodes(forward, root.dom, pos).forall(newPos => !isInSameBlock(newPos, pos, root.dom)), parent => navigateIgnoreEmptyTextNodes(forward, parent.dom, pos).isNone());\n const isAtStartOfBlock = curry(isAtBlockBoundary, false);\n const isAtEndOfBlock = curry(isAtBlockBoundary, true);\n const isBeforeBlock = curry(isAtBeforeAfterBlockBoundary, false);\n const isAfterBlock = curry(isAtBeforeAfterBlockBoundary, true);\n\n const isBr$1 = pos => getElementFromPosition(pos).exists(isBr$5);\n const findBr = (forward, root, pos, schema) => {\n const parentBlocks = filter$5(parentsAndSelf(SugarElement.fromDom(pos.container()), root), el => schema.isBlock(name(el)));\n const scope = head(parentBlocks).getOr(root);\n return fromPosition(forward, scope.dom, pos).filter(isBr$1);\n };\n const isBeforeBr$1 = (root, pos, schema) => getElementFromPosition(pos).exists(isBr$5) || findBr(true, root, pos, schema).isSome();\n const isAfterBr = (root, pos, schema) => getElementFromPrevPosition(pos).exists(isBr$5) || findBr(false, root, pos, schema).isSome();\n const findPreviousBr = curry(findBr, false);\n const findNextBr = curry(findBr, true);\n\n const isInMiddleOfText = pos => CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd();\n const getClosestBlock = (root, pos, schema) => {\n const parentBlocks = filter$5(parentsAndSelf(SugarElement.fromDom(pos.container()), root), el => schema.isBlock(name(el)));\n return head(parentBlocks).getOr(root);\n };\n const hasSpaceBefore = (root, pos, schema) => {\n if (isInMiddleOfText(pos)) {\n return isAfterSpace(pos);\n } else {\n return isAfterSpace(pos) || prevPosition(getClosestBlock(root, pos, schema).dom, pos).exists(isAfterSpace);\n }\n };\n const hasSpaceAfter = (root, pos, schema) => {\n if (isInMiddleOfText(pos)) {\n return isBeforeSpace(pos);\n } else {\n return isBeforeSpace(pos) || nextPosition(getClosestBlock(root, pos, schema).dom, pos).exists(isBeforeSpace);\n }\n };\n const isPreValue = value => contains$2([\n 'pre',\n 'pre-wrap'\n ], value);\n const isInPre = pos => getElementFromPosition(pos).bind(elm => closest$4(elm, isElement$7)).exists(elm => isPreValue(get$7(elm, 'white-space')));\n const isAtBeginningOfBody = (root, pos) => prevPosition(root.dom, pos).isNone();\n const isAtEndOfBody = (root, pos) => nextPosition(root.dom, pos).isNone();\n const isAtLineBoundary = (root, pos, schema) => isAtBeginningOfBody(root, pos) || isAtEndOfBody(root, pos) || isAtStartOfBlock(root, pos, schema) || isAtEndOfBlock(root, pos, schema) || isAfterBr(root, pos, schema) || isBeforeBr$1(root, pos, schema);\n const isCefBlock = node => isNonNullable(node) && isContentEditableFalse$b(node) && isBlockLike(node);\n const isSiblingCefBlock = (root, direction) => container => {\n return isCefBlock(new DomTreeWalker(container, root)[direction]());\n };\n const isBeforeCefBlock = (root, pos) => {\n const nextPos = nextPosition(root.dom, pos).getOr(pos);\n const isNextCefBlock = isSiblingCefBlock(root.dom, 'next');\n return pos.isAtEnd() && (isNextCefBlock(pos.container()) || isNextCefBlock(nextPos.container()));\n };\n const isAfterCefBlock = (root, pos) => {\n const prevPos = prevPosition(root.dom, pos).getOr(pos);\n const isPrevCefBlock = isSiblingCefBlock(root.dom, 'prev');\n return pos.isAtStart() && (isPrevCefBlock(pos.container()) || isPrevCefBlock(prevPos.container()));\n };\n const needsToHaveNbsp = (root, pos, schema) => {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtLineBoundary(root, pos, schema) || hasSpaceBefore(root, pos, schema) || hasSpaceAfter(root, pos, schema);\n }\n };\n const needsToBeNbspLeft = (root, pos, schema) => {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtStartOfBlock(root, pos, schema) || isBeforeBlock(root, pos, schema) || isAfterBr(root, pos, schema) || hasSpaceBefore(root, pos, schema) || isAfterCefBlock(root, pos);\n }\n };\n const leanRight = pos => {\n const container = pos.container();\n const offset = pos.offset();\n if (isText$b(container) && offset < container.data.length) {\n return CaretPosition(container, offset + 1);\n } else {\n return pos;\n }\n };\n const needsToBeNbspRight = (root, pos, schema) => {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtEndOfBlock(root, pos, schema) || isAfterBlock(root, pos, schema) || isBeforeBr$1(root, pos, schema) || hasSpaceAfter(root, pos, schema) || isBeforeCefBlock(root, pos);\n }\n };\n const needsToBeNbsp = (root, pos, schema) => needsToBeNbspLeft(root, pos, schema) || needsToBeNbspRight(root, leanRight(pos), schema);\n const isNbspAt = (text, offset) => isNbsp(text.charAt(offset));\n const isWhiteSpaceAt = (text, offset) => isWhiteSpace(text.charAt(offset));\n const hasNbsp = pos => {\n const container = pos.container();\n return isText$b(container) && contains$1(container.data, nbsp);\n };\n const normalizeNbspMiddle = text => {\n const chars = text.split('');\n return map$3(chars, (chr, i) => {\n if (isNbsp(chr) && i > 0 && i < chars.length - 1 && isContent(chars[i - 1]) && isContent(chars[i + 1])) {\n return ' ';\n } else {\n return chr;\n }\n }).join('');\n };\n const normalizeNbspAtStart = (root, node, makeNbsp, schema) => {\n const text = node.data;\n const firstPos = CaretPosition(node, 0);\n if (!makeNbsp && isNbspAt(text, 0) && !needsToBeNbsp(root, firstPos, schema)) {\n node.data = ' ' + text.slice(1);\n return true;\n } else if (makeNbsp && isWhiteSpaceAt(text, 0) && needsToBeNbspLeft(root, firstPos, schema)) {\n node.data = nbsp + text.slice(1);\n return true;\n } else {\n return false;\n }\n };\n const normalizeNbspInMiddleOfTextNode = node => {\n const text = node.data;\n const newText = normalizeNbspMiddle(text);\n if (newText !== text) {\n node.data = newText;\n return true;\n } else {\n return false;\n }\n };\n const normalizeNbspAtEnd = (root, node, makeNbsp, schema) => {\n const text = node.data;\n const lastPos = CaretPosition(node, text.length - 1);\n if (!makeNbsp && isNbspAt(text, text.length - 1) && !needsToBeNbsp(root, lastPos, schema)) {\n node.data = text.slice(0, -1) + ' ';\n return true;\n } else if (makeNbsp && isWhiteSpaceAt(text, text.length - 1) && needsToBeNbspRight(root, lastPos, schema)) {\n node.data = text.slice(0, -1) + nbsp;\n return true;\n } else {\n return false;\n }\n };\n const normalizeNbsps$1 = (root, pos, schema) => {\n const container = pos.container();\n if (!isText$b(container)) {\n return Optional.none();\n }\n if (hasNbsp(pos)) {\n const normalized = normalizeNbspAtStart(root, container, false, schema) || normalizeNbspInMiddleOfTextNode(container) || normalizeNbspAtEnd(root, container, false, schema);\n return someIf(normalized, pos);\n } else if (needsToBeNbsp(root, pos, schema)) {\n const normalized = normalizeNbspAtStart(root, container, true, schema) || normalizeNbspAtEnd(root, container, true, schema);\n return someIf(normalized, pos);\n } else {\n return Optional.none();\n }\n };\n const normalizeNbspsInEditor = editor => {\n const root = SugarElement.fromDom(editor.getBody());\n if (editor.selection.isCollapsed()) {\n normalizeNbsps$1(root, CaretPosition.fromRangeStart(editor.selection.getRng()), editor.schema).each(pos => {\n editor.selection.setRng(pos.toRange());\n });\n }\n };\n\n const normalize$1 = (node, offset, count, schema) => {\n if (count === 0) {\n return;\n }\n const elm = SugarElement.fromDom(node);\n const root = ancestor$4(elm, el => schema.isBlock(name(el))).getOr(elm);\n const whitespace = node.data.slice(offset, offset + count);\n const isEndOfContent = offset + count >= node.data.length && needsToBeNbspRight(root, CaretPosition(node, node.data.length), schema);\n const isStartOfContent = offset === 0 && needsToBeNbspLeft(root, CaretPosition(node, 0), schema);\n node.replaceData(offset, count, normalize$4(whitespace, 4, isStartOfContent, isEndOfContent));\n };\n const normalizeWhitespaceAfter = (node, offset, schema) => {\n const content = node.data.slice(offset);\n const whitespaceCount = content.length - lTrim(content).length;\n normalize$1(node, offset, whitespaceCount, schema);\n };\n const normalizeWhitespaceBefore = (node, offset, schema) => {\n const content = node.data.slice(0, offset);\n const whitespaceCount = content.length - rTrim(content).length;\n normalize$1(node, offset - whitespaceCount, whitespaceCount, schema);\n };\n const mergeTextNodes = (prevNode, nextNode, schema, normalizeWhitespace, mergeToPrev = true) => {\n const whitespaceOffset = rTrim(prevNode.data).length;\n const newNode = mergeToPrev ? prevNode : nextNode;\n const removeNode = mergeToPrev ? nextNode : prevNode;\n if (mergeToPrev) {\n newNode.appendData(removeNode.data);\n } else {\n newNode.insertData(0, removeNode.data);\n }\n remove$4(SugarElement.fromDom(removeNode));\n if (normalizeWhitespace) {\n normalizeWhitespaceAfter(newNode, whitespaceOffset, schema);\n }\n return newNode;\n };\n\n const needsReposition = (pos, elm) => {\n const container = pos.container();\n const offset = pos.offset();\n return !CaretPosition.isTextPosition(pos) && container === elm.parentNode && offset > CaretPosition.before(elm).offset();\n };\n const reposition = (elm, pos) => needsReposition(pos, elm) ? CaretPosition(pos.container(), pos.offset() - 1) : pos;\n const beforeOrStartOf = node => isText$b(node) ? CaretPosition(node, 0) : CaretPosition.before(node);\n const afterOrEndOf = node => isText$b(node) ? CaretPosition(node, node.data.length) : CaretPosition.after(node);\n const getPreviousSiblingCaretPosition = elm => {\n if (isCaretCandidate$3(elm.previousSibling)) {\n return Optional.some(afterOrEndOf(elm.previousSibling));\n } else {\n return elm.previousSibling ? lastPositionIn(elm.previousSibling) : Optional.none();\n }\n };\n const getNextSiblingCaretPosition = elm => {\n if (isCaretCandidate$3(elm.nextSibling)) {\n return Optional.some(beforeOrStartOf(elm.nextSibling));\n } else {\n return elm.nextSibling ? firstPositionIn(elm.nextSibling) : Optional.none();\n }\n };\n const findCaretPositionBackwardsFromElm = (rootElement, elm) => {\n return Optional.from(elm.previousSibling ? elm.previousSibling : elm.parentNode).bind(node => prevPosition(rootElement, CaretPosition.before(node))).orThunk(() => nextPosition(rootElement, CaretPosition.after(elm)));\n };\n const findCaretPositionForwardsFromElm = (rootElement, elm) => nextPosition(rootElement, CaretPosition.after(elm)).orThunk(() => prevPosition(rootElement, CaretPosition.before(elm)));\n const findCaretPositionBackwards = (rootElement, elm) => getPreviousSiblingCaretPosition(elm).orThunk(() => getNextSiblingCaretPosition(elm)).orThunk(() => findCaretPositionBackwardsFromElm(rootElement, elm));\n const findCaretPositionForward = (rootElement, elm) => getNextSiblingCaretPosition(elm).orThunk(() => getPreviousSiblingCaretPosition(elm)).orThunk(() => findCaretPositionForwardsFromElm(rootElement, elm));\n const findCaretPosition = (forward, rootElement, elm) => forward ? findCaretPositionForward(rootElement, elm) : findCaretPositionBackwards(rootElement, elm);\n const findCaretPosOutsideElmAfterDelete = (forward, rootElement, elm) => findCaretPosition(forward, rootElement, elm).map(curry(reposition, elm));\n const setSelection$1 = (editor, forward, pos) => {\n pos.fold(() => {\n editor.focus();\n }, pos => {\n editor.selection.setRng(pos.toRange(), forward);\n });\n };\n const eqRawNode = rawNode => elm => elm.dom === rawNode;\n const isBlock = (editor, elm) => elm && has$2(editor.schema.getBlockElements(), name(elm));\n const paddEmptyBlock = (schema, elm, preserveEmptyCaret) => {\n if (isEmpty$2(schema, elm)) {\n const br = SugarElement.fromHtml('
');\n if (preserveEmptyCaret) {\n each$e(children$1(elm), node => {\n if (!isEmptyCaretFormatElement(node)) {\n remove$4(node);\n }\n });\n } else {\n empty(elm);\n }\n append$1(elm, br);\n return Optional.some(CaretPosition.before(br.dom));\n } else {\n return Optional.none();\n }\n };\n const deleteNormalized = (elm, afterDeletePosOpt, schema, normalizeWhitespace) => {\n const prevTextOpt = prevSibling(elm).filter(isText$c);\n const nextTextOpt = nextSibling(elm).filter(isText$c);\n remove$4(elm);\n return lift3(prevTextOpt, nextTextOpt, afterDeletePosOpt, (prev, next, pos) => {\n const prevNode = prev.dom, nextNode = next.dom;\n const offset = prevNode.data.length;\n mergeTextNodes(prevNode, nextNode, schema, normalizeWhitespace);\n return pos.container() === nextNode ? CaretPosition(prevNode, offset) : pos;\n }).orThunk(() => {\n if (normalizeWhitespace) {\n prevTextOpt.each(elm => normalizeWhitespaceBefore(elm.dom, elm.dom.length, schema));\n nextTextOpt.each(elm => normalizeWhitespaceAfter(elm.dom, 0, schema));\n }\n return afterDeletePosOpt;\n });\n };\n const isInlineElement = (editor, element) => has$2(editor.schema.getTextInlineElements(), name(element));\n const deleteElement$2 = (editor, forward, elm, moveCaret = true, preserveEmptyCaret = false) => {\n const afterDeletePos = findCaretPosOutsideElmAfterDelete(forward, editor.getBody(), elm.dom);\n const parentBlock = ancestor$4(elm, curry(isBlock, editor), eqRawNode(editor.getBody()));\n const normalizedAfterDeletePos = deleteNormalized(elm, afterDeletePos, editor.schema, isInlineElement(editor, elm));\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n } else {\n parentBlock.bind(elm => paddEmptyBlock(editor.schema, elm, preserveEmptyCaret)).fold(() => {\n if (moveCaret) {\n setSelection$1(editor, forward, normalizedAfterDeletePos);\n }\n }, paddPos => {\n if (moveCaret) {\n setSelection$1(editor, forward, Optional.some(paddPos));\n }\n });\n }\n };\n\n const strongRtl = /[\\u0591-\\u07FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFC]/;\n const hasStrongRtl = text => strongRtl.test(text);\n\n const isInlineTarget = (editor, elm) => is$1(SugarElement.fromDom(elm), getInlineBoundarySelector(editor)) && !isTransparentBlock(editor.schema, elm) && editor.dom.isEditable(elm);\n const isRtl = element => {\n var _a;\n return DOMUtils.DOM.getStyle(element, 'direction', true) === 'rtl' || hasStrongRtl((_a = element.textContent) !== null && _a !== void 0 ? _a : '');\n };\n const findInlineParents = (isInlineTarget, rootNode, pos) => filter$5(DOMUtils.DOM.getParents(pos.container(), '*', rootNode), isInlineTarget);\n const findRootInline = (isInlineTarget, rootNode, pos) => {\n const parents = findInlineParents(isInlineTarget, rootNode, pos);\n return Optional.from(parents[parents.length - 1]);\n };\n const hasSameParentBlock = (rootNode, node1, node2) => {\n const block1 = getParentBlock$3(node1, rootNode);\n const block2 = getParentBlock$3(node2, rootNode);\n return isNonNullable(block1) && block1 === block2;\n };\n const isAtZwsp = pos => isBeforeInline(pos) || isAfterInline(pos);\n const normalizePosition = (forward, pos) => {\n const container = pos.container(), offset = pos.offset();\n if (forward) {\n if (isCaretContainerInline(container)) {\n if (isText$b(container.nextSibling)) {\n return CaretPosition(container.nextSibling, 0);\n } else {\n return CaretPosition.after(container);\n }\n } else {\n return isBeforeInline(pos) ? CaretPosition(container, offset + 1) : pos;\n }\n } else {\n if (isCaretContainerInline(container)) {\n if (isText$b(container.previousSibling)) {\n return CaretPosition(container.previousSibling, container.previousSibling.data.length);\n } else {\n return CaretPosition.before(container);\n }\n } else {\n return isAfterInline(pos) ? CaretPosition(container, offset - 1) : pos;\n }\n }\n };\n const normalizeForwards = curry(normalizePosition, true);\n const normalizeBackwards = curry(normalizePosition, false);\n\n const execCommandIgnoreInputEvents = (editor, command) => {\n const inputBlocker = e => e.stopImmediatePropagation();\n editor.on('beforeinput input', inputBlocker, true);\n editor.getDoc().execCommand(command);\n editor.off('beforeinput input', inputBlocker);\n };\n const execEditorDeleteCommand = editor => {\n editor.execCommand('delete');\n };\n const execNativeDeleteCommand = editor => execCommandIgnoreInputEvents(editor, 'Delete');\n const execNativeForwardDeleteCommand = editor => execCommandIgnoreInputEvents(editor, 'ForwardDelete');\n const isBeforeRoot = rootNode => elm => is$2(parent(elm), rootNode, eq);\n const isTextBlockOrListItem = element => isTextBlock$2(element) || isListItem$1(element);\n const getParentBlock$2 = (rootNode, elm) => {\n if (contains(rootNode, elm)) {\n return closest$4(elm, isTextBlockOrListItem, isBeforeRoot(rootNode));\n } else {\n return Optional.none();\n }\n };\n const paddEmptyBody = (editor, moveSelection = true) => {\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('', { no_selection: !moveSelection });\n }\n };\n const willDeleteLastPositionInElement = (forward, fromPos, elm) => lift2(firstPositionIn(elm), lastPositionIn(elm), (firstPos, lastPos) => {\n const normalizedFirstPos = normalizePosition(true, firstPos);\n const normalizedLastPos = normalizePosition(false, lastPos);\n const normalizedFromPos = normalizePosition(false, fromPos);\n if (forward) {\n return nextPosition(elm, normalizedFromPos).exists(nextPos => nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos));\n } else {\n return prevPosition(elm, normalizedFromPos).exists(prevPos => prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos));\n }\n }).getOr(true);\n const freefallRtl = root => {\n const child = isComment$1(root) ? prevSibling(root) : lastChild(root);\n return child.bind(freefallRtl).orThunk(() => Optional.some(root));\n };\n const deleteRangeContents = (editor, rng, root, moveSelection = true) => {\n var _a;\n rng.deleteContents();\n const lastNode = freefallRtl(root).getOr(root);\n const lastBlock = SugarElement.fromDom((_a = editor.dom.getParent(lastNode.dom, editor.dom.isBlock)) !== null && _a !== void 0 ? _a : root.dom);\n if (lastBlock.dom === editor.getBody()) {\n paddEmptyBody(editor, moveSelection);\n } else if (isEmpty$2(editor.schema, lastBlock, { checkRootAsContent: false })) {\n fillWithPaddingBr(lastBlock);\n if (moveSelection) {\n editor.selection.setCursorLocation(lastBlock.dom, 0);\n }\n }\n if (!eq(root, lastBlock)) {\n const additionalCleanupNodes = is$2(parent(lastBlock), root) ? [] : siblings(lastBlock);\n each$e(additionalCleanupNodes.concat(children$1(root)), node => {\n if (!eq(node, lastBlock) && !contains(node, lastBlock) && isEmpty$2(editor.schema, node)) {\n remove$4(node);\n }\n });\n }\n };\n\n const isRootFromElement = root => cur => eq(root, cur);\n const getTableCells = table => descendants(table, 'td,th');\n const getTable$1 = (node, isRoot) => getClosestTable(SugarElement.fromDom(node), isRoot);\n const selectionInTableWithNestedTable = details => {\n return lift2(details.startTable, details.endTable, (startTable, endTable) => {\n const isStartTableParentOfEndTable = descendant(startTable, t => eq(t, endTable));\n const isEndTableParentOfStartTable = descendant(endTable, t => eq(t, startTable));\n return !isStartTableParentOfEndTable && !isEndTableParentOfStartTable ? details : {\n ...details,\n startTable: isStartTableParentOfEndTable ? Optional.none() : details.startTable,\n endTable: isEndTableParentOfStartTable ? Optional.none() : details.endTable,\n isSameTable: false,\n isMultiTable: false\n };\n }).getOr(details);\n };\n const adjustQuirksInDetails = details => {\n return selectionInTableWithNestedTable(details);\n };\n const getTableDetailsFromRange = (rng, isRoot) => {\n const startTable = getTable$1(rng.startContainer, isRoot);\n const endTable = getTable$1(rng.endContainer, isRoot);\n const isStartInTable = startTable.isSome();\n const isEndInTable = endTable.isSome();\n const isSameTable = lift2(startTable, endTable, eq).getOr(false);\n const isMultiTable = !isSameTable && isStartInTable && isEndInTable;\n return adjustQuirksInDetails({\n startTable,\n endTable,\n isStartInTable,\n isEndInTable,\n isSameTable,\n isMultiTable\n });\n };\n\n const tableCellRng = (start, end) => ({\n start,\n end\n });\n const tableSelection = (rng, table, cells) => ({\n rng,\n table,\n cells\n });\n const deleteAction = Adt.generate([\n {\n singleCellTable: [\n 'rng',\n 'cell'\n ]\n },\n { fullTable: ['table'] },\n {\n partialTable: [\n 'cells',\n 'outsideDetails'\n ]\n },\n {\n multiTable: [\n 'startTableCells',\n 'endTableCells',\n 'betweenRng'\n ]\n }\n ]);\n const getClosestCell$1 = (container, isRoot) => closest$3(SugarElement.fromDom(container), 'td,th', isRoot);\n const isExpandedCellRng = cellRng => !eq(cellRng.start, cellRng.end);\n const getTableFromCellRng = (cellRng, isRoot) => getClosestTable(cellRng.start, isRoot).bind(startParentTable => getClosestTable(cellRng.end, isRoot).bind(endParentTable => someIf(eq(startParentTable, endParentTable), startParentTable)));\n const isSingleCellTable = (cellRng, isRoot) => !isExpandedCellRng(cellRng) && getTableFromCellRng(cellRng, isRoot).exists(table => {\n const rows = table.dom.rows;\n return rows.length === 1 && rows[0].cells.length === 1;\n });\n const getCellRng = (rng, isRoot) => {\n const startCell = getClosestCell$1(rng.startContainer, isRoot);\n const endCell = getClosestCell$1(rng.endContainer, isRoot);\n return lift2(startCell, endCell, tableCellRng);\n };\n const getCellRangeFromStartTable = isRoot => startCell => getClosestTable(startCell, isRoot).bind(table => last$2(getTableCells(table)).map(endCell => tableCellRng(startCell, endCell)));\n const getCellRangeFromEndTable = isRoot => endCell => getClosestTable(endCell, isRoot).bind(table => head(getTableCells(table)).map(startCell => tableCellRng(startCell, endCell)));\n const getTableSelectionFromCellRng = isRoot => cellRng => getTableFromCellRng(cellRng, isRoot).map(table => tableSelection(cellRng, table, getTableCells(table)));\n const getTableSelections = (cellRng, selectionDetails, rng, isRoot) => {\n if (rng.collapsed || !cellRng.forall(isExpandedCellRng)) {\n return Optional.none();\n } else if (selectionDetails.isSameTable) {\n const sameTableSelection = cellRng.bind(getTableSelectionFromCellRng(isRoot));\n return Optional.some({\n start: sameTableSelection,\n end: sameTableSelection\n });\n } else {\n const startCell = getClosestCell$1(rng.startContainer, isRoot);\n const endCell = getClosestCell$1(rng.endContainer, isRoot);\n const startTableSelection = startCell.bind(getCellRangeFromStartTable(isRoot)).bind(getTableSelectionFromCellRng(isRoot));\n const endTableSelection = endCell.bind(getCellRangeFromEndTable(isRoot)).bind(getTableSelectionFromCellRng(isRoot));\n return Optional.some({\n start: startTableSelection,\n end: endTableSelection\n });\n }\n };\n const getCellIndex = (cells, cell) => findIndex$2(cells, x => eq(x, cell));\n const getSelectedCells = tableSelection => lift2(getCellIndex(tableSelection.cells, tableSelection.rng.start), getCellIndex(tableSelection.cells, tableSelection.rng.end), (startIndex, endIndex) => tableSelection.cells.slice(startIndex, endIndex + 1));\n const isSingleCellTableContentSelected = (optCellRng, rng, isRoot) => optCellRng.exists(cellRng => isSingleCellTable(cellRng, isRoot) && hasAllContentsSelected(cellRng.start, rng));\n const unselectCells = (rng, selectionDetails) => {\n const {startTable, endTable} = selectionDetails;\n const otherContentRng = rng.cloneRange();\n startTable.each(table => otherContentRng.setStartAfter(table.dom));\n endTable.each(table => otherContentRng.setEndBefore(table.dom));\n return otherContentRng;\n };\n const handleSingleTable = (cellRng, selectionDetails, rng, isRoot) => getTableSelections(cellRng, selectionDetails, rng, isRoot).bind(({start, end}) => start.or(end)).bind(tableSelection => {\n const {isSameTable} = selectionDetails;\n const selectedCells = getSelectedCells(tableSelection).getOr([]);\n if (isSameTable && tableSelection.cells.length === selectedCells.length) {\n return Optional.some(deleteAction.fullTable(tableSelection.table));\n } else if (selectedCells.length > 0) {\n if (isSameTable) {\n return Optional.some(deleteAction.partialTable(selectedCells, Optional.none()));\n } else {\n const otherContentRng = unselectCells(rng, selectionDetails);\n return Optional.some(deleteAction.partialTable(selectedCells, Optional.some({\n ...selectionDetails,\n rng: otherContentRng\n })));\n }\n } else {\n return Optional.none();\n }\n });\n const handleMultiTable = (cellRng, selectionDetails, rng, isRoot) => getTableSelections(cellRng, selectionDetails, rng, isRoot).bind(({start, end}) => {\n const startTableSelectedCells = start.bind(getSelectedCells).getOr([]);\n const endTableSelectedCells = end.bind(getSelectedCells).getOr([]);\n if (startTableSelectedCells.length > 0 && endTableSelectedCells.length > 0) {\n const otherContentRng = unselectCells(rng, selectionDetails);\n return Optional.some(deleteAction.multiTable(startTableSelectedCells, endTableSelectedCells, otherContentRng));\n } else {\n return Optional.none();\n }\n });\n const getActionFromRange = (root, rng) => {\n const isRoot = isRootFromElement(root);\n const optCellRng = getCellRng(rng, isRoot);\n const selectionDetails = getTableDetailsFromRange(rng, isRoot);\n if (isSingleCellTableContentSelected(optCellRng, rng, isRoot)) {\n return optCellRng.map(cellRng => deleteAction.singleCellTable(rng, cellRng.start));\n } else if (selectionDetails.isMultiTable) {\n return handleMultiTable(optCellRng, selectionDetails, rng, isRoot);\n } else {\n return handleSingleTable(optCellRng, selectionDetails, rng, isRoot);\n }\n };\n\n const cleanCells = cells => each$e(cells, cell => {\n remove$9(cell, 'contenteditable');\n fillWithPaddingBr(cell);\n });\n const getOutsideBlock = (editor, container) => Optional.from(editor.dom.getParent(container, editor.dom.isBlock)).map(SugarElement.fromDom);\n const handleEmptyBlock = (editor, startInTable, emptyBlock) => {\n emptyBlock.each(block => {\n if (startInTable) {\n remove$4(block);\n } else {\n fillWithPaddingBr(block);\n editor.selection.setCursorLocation(block.dom, 0);\n }\n });\n };\n const deleteContentInsideCell = (editor, cell, rng, isFirstCellInSelection) => {\n const insideTableRng = rng.cloneRange();\n if (isFirstCellInSelection) {\n insideTableRng.setStart(rng.startContainer, rng.startOffset);\n insideTableRng.setEndAfter(cell.dom.lastChild);\n } else {\n insideTableRng.setStartBefore(cell.dom.firstChild);\n insideTableRng.setEnd(rng.endContainer, rng.endOffset);\n }\n deleteCellContents(editor, insideTableRng, cell, false).each(action => action());\n };\n const collapseAndRestoreCellSelection = editor => {\n const selectedCells = getCellsFromEditor(editor);\n const selectedNode = SugarElement.fromDom(editor.selection.getNode());\n if (isTableCell$3(selectedNode.dom) && isEmpty$2(editor.schema, selectedNode)) {\n editor.selection.setCursorLocation(selectedNode.dom, 0);\n } else {\n editor.selection.collapse(true);\n }\n if (selectedCells.length > 1 && exists(selectedCells, cell => eq(cell, selectedNode))) {\n set$4(selectedNode, 'data-mce-selected', '1');\n }\n };\n const emptySingleTableCells = (editor, cells, outsideDetails) => Optional.some(() => {\n const editorRng = editor.selection.getRng();\n const cellsToClean = outsideDetails.bind(({rng, isStartInTable}) => {\n const outsideBlock = getOutsideBlock(editor, isStartInTable ? rng.endContainer : rng.startContainer);\n rng.deleteContents();\n handleEmptyBlock(editor, isStartInTable, outsideBlock.filter(curry(isEmpty$2, editor.schema)));\n const endPointCell = isStartInTable ? cells[0] : cells[cells.length - 1];\n deleteContentInsideCell(editor, endPointCell, editorRng, isStartInTable);\n if (!isEmpty$2(editor.schema, endPointCell)) {\n return Optional.some(isStartInTable ? cells.slice(1) : cells.slice(0, -1));\n } else {\n return Optional.none();\n }\n }).getOr(cells);\n cleanCells(cellsToClean);\n collapseAndRestoreCellSelection(editor);\n });\n const emptyMultiTableCells = (editor, startTableCells, endTableCells, betweenRng) => Optional.some(() => {\n const rng = editor.selection.getRng();\n const startCell = startTableCells[0];\n const endCell = endTableCells[endTableCells.length - 1];\n deleteContentInsideCell(editor, startCell, rng, true);\n deleteContentInsideCell(editor, endCell, rng, false);\n const startTableCellsToClean = isEmpty$2(editor.schema, startCell) ? startTableCells : startTableCells.slice(1);\n const endTableCellsToClean = isEmpty$2(editor.schema, endCell) ? endTableCells : endTableCells.slice(0, -1);\n cleanCells(startTableCellsToClean.concat(endTableCellsToClean));\n betweenRng.deleteContents();\n collapseAndRestoreCellSelection(editor);\n });\n const deleteCellContents = (editor, rng, cell, moveSelection = true) => Optional.some(() => {\n deleteRangeContents(editor, rng, cell, moveSelection);\n });\n const deleteTableElement = (editor, table) => Optional.some(() => deleteElement$2(editor, false, table));\n const deleteCellRange = (editor, rootElm, rng) => getActionFromRange(rootElm, rng).bind(action => action.fold(curry(deleteCellContents, editor), curry(deleteTableElement, editor), curry(emptySingleTableCells, editor), curry(emptyMultiTableCells, editor)));\n const deleteCaptionRange = (editor, caption) => emptyElement(editor, caption);\n const deleteTableRange = (editor, rootElm, rng, startElm) => getParentCaption(rootElm, startElm).fold(() => deleteCellRange(editor, rootElm, rng), caption => deleteCaptionRange(editor, caption));\n const deleteRange$3 = (editor, startElm, selectedCells) => {\n const rootNode = SugarElement.fromDom(editor.getBody());\n const rng = editor.selection.getRng();\n return selectedCells.length !== 0 ? emptySingleTableCells(editor, selectedCells, Optional.none()) : deleteTableRange(editor, rootNode, rng, startElm);\n };\n const getParentCell = (rootElm, elm) => find$2(parentsAndSelf(elm, rootElm), isTableCell$2);\n const getParentCaption = (rootElm, elm) => find$2(parentsAndSelf(elm, rootElm), isTag('caption'));\n const deleteBetweenCells = (editor, rootElm, forward, fromCell, from) => navigate(forward, editor.getBody(), from).bind(to => getParentCell(rootElm, SugarElement.fromDom(to.getNode())).bind(toCell => eq(toCell, fromCell) ? Optional.none() : Optional.some(noop)));\n const emptyElement = (editor, elm) => Optional.some(() => {\n fillWithPaddingBr(elm);\n editor.selection.setCursorLocation(elm.dom, 0);\n });\n const isDeleteOfLastCharPos = (fromCaption, forward, from, to) => firstPositionIn(fromCaption.dom).bind(first => lastPositionIn(fromCaption.dom).map(last => forward ? from.isEqual(first) && to.isEqual(last) : from.isEqual(last) && to.isEqual(first))).getOr(true);\n const emptyCaretCaption = (editor, elm) => emptyElement(editor, elm);\n const validateCaretCaption = (rootElm, fromCaption, to) => getParentCaption(rootElm, SugarElement.fromDom(to.getNode())).fold(() => Optional.some(noop), toCaption => someIf(!eq(toCaption, fromCaption), noop));\n const deleteCaretInsideCaption = (editor, rootElm, forward, fromCaption, from) => navigate(forward, editor.getBody(), from).fold(() => Optional.some(noop), to => isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to));\n const deleteCaretCells = (editor, forward, rootElm, startElm) => {\n const from = CaretPosition.fromRangeStart(editor.selection.getRng());\n return getParentCell(rootElm, startElm).bind(fromCell => isEmpty$2(editor.schema, fromCell, { checkRootAsContent: false }) ? emptyElement(editor, fromCell) : deleteBetweenCells(editor, rootElm, forward, fromCell, from));\n };\n const deleteCaretCaption = (editor, forward, rootElm, fromCaption) => {\n const from = CaretPosition.fromRangeStart(editor.selection.getRng());\n return isEmpty$2(editor.schema, fromCaption) ? emptyElement(editor, fromCaption) : deleteCaretInsideCaption(editor, rootElm, forward, fromCaption, from);\n };\n const isNearTable = (forward, pos) => forward ? isBeforeTable(pos) : isAfterTable(pos);\n const isBeforeOrAfterTable = (editor, forward) => {\n const fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n return isNearTable(forward, fromPos) || fromPosition(forward, editor.getBody(), fromPos).exists(pos => isNearTable(forward, pos));\n };\n const deleteCaret$3 = (editor, forward, startElm) => {\n const rootElm = SugarElement.fromDom(editor.getBody());\n return getParentCaption(rootElm, startElm).fold(() => deleteCaretCells(editor, forward, rootElm, startElm).orThunk(() => someIf(isBeforeOrAfterTable(editor, forward), noop)), fromCaption => deleteCaretCaption(editor, forward, rootElm, fromCaption));\n };\n const backspaceDelete$b = (editor, forward) => {\n const startElm = SugarElement.fromDom(editor.selection.getStart(true));\n const cells = getCellsFromEditor(editor);\n return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret$3(editor, forward, startElm) : deleteRange$3(editor, startElm, cells);\n };\n\n const getContentEditableRoot$1 = (root, node) => {\n let tempNode = node;\n while (tempNode && tempNode !== root) {\n if (isContentEditableTrue$3(tempNode) || isContentEditableFalse$b(tempNode)) {\n return tempNode;\n }\n tempNode = tempNode.parentNode;\n }\n return null;\n };\n\n const internalAttributesPrefixes = [\n 'data-ephox-',\n 'data-mce-',\n 'data-alloy-',\n 'data-snooker-',\n '_'\n ];\n const each$9 = Tools.each;\n const ElementUtils = editor => {\n const dom = editor.dom;\n const internalAttributes = new Set(editor.serializer.getTempAttrs());\n const compare = (node1, node2) => {\n if (node1.nodeName !== node2.nodeName || node1.nodeType !== node2.nodeType) {\n return false;\n }\n const getAttribs = node => {\n const attribs = {};\n each$9(dom.getAttribs(node), attr => {\n const name = attr.nodeName.toLowerCase();\n if (name !== 'style' && !isAttributeInternal(name)) {\n attribs[name] = dom.getAttrib(node, name);\n }\n });\n return attribs;\n };\n const compareObjects = (obj1, obj2) => {\n for (const name in obj1) {\n if (has$2(obj1, name)) {\n const value = obj2[name];\n if (isUndefined(value)) {\n return false;\n }\n if (obj1[name] !== value) {\n return false;\n }\n delete obj2[name];\n }\n }\n for (const name in obj2) {\n if (has$2(obj2, name)) {\n return false;\n }\n }\n return true;\n };\n if (isElement$6(node1) && isElement$6(node2)) {\n if (!compareObjects(getAttribs(node1), getAttribs(node2))) {\n return false;\n }\n if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style')))) {\n return false;\n }\n }\n return !isBookmarkNode$1(node1) && !isBookmarkNode$1(node2);\n };\n const isAttributeInternal = attributeName => exists(internalAttributesPrefixes, value => startsWith(attributeName, value)) || internalAttributes.has(attributeName);\n return {\n compare,\n isAttributeInternal\n };\n };\n\n const isHeading = node => [\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ].includes(node.name);\n const isSummary = node => node.name === 'summary';\n\n const traverse = (root, fn) => {\n let node = root;\n while (node = node.walk()) {\n fn(node);\n }\n };\n const matchNode$1 = (nodeFilters, attributeFilters, node, matches) => {\n const name = node.name;\n for (let ni = 0, nl = nodeFilters.length; ni < nl; ni++) {\n const filter = nodeFilters[ni];\n if (filter.name === name) {\n const match = matches.nodes[name];\n if (match) {\n match.nodes.push(node);\n } else {\n matches.nodes[name] = {\n filter,\n nodes: [node]\n };\n }\n }\n }\n if (node.attributes) {\n for (let ai = 0, al = attributeFilters.length; ai < al; ai++) {\n const filter = attributeFilters[ai];\n const attrName = filter.name;\n if (attrName in node.attributes.map) {\n const match = matches.attributes[attrName];\n if (match) {\n match.nodes.push(node);\n } else {\n matches.attributes[attrName] = {\n filter,\n nodes: [node]\n };\n }\n }\n }\n }\n };\n const findMatchingNodes = (nodeFilters, attributeFilters, node) => {\n const matches = {\n nodes: {},\n attributes: {}\n };\n if (node.firstChild) {\n traverse(node, childNode => {\n matchNode$1(nodeFilters, attributeFilters, childNode, matches);\n });\n }\n return matches;\n };\n const runFilters = (matches, args) => {\n const run = (matchRecord, filteringAttributes) => {\n each$d(matchRecord, match => {\n const nodes = from(match.nodes);\n each$e(match.filter.callbacks, callback => {\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i];\n const valueMatches = filteringAttributes ? node.attr(match.filter.name) !== undefined : node.name === match.filter.name;\n if (!valueMatches || isNullable(node.parent)) {\n nodes.splice(i, 1);\n }\n }\n if (nodes.length > 0) {\n callback(nodes, match.filter.name, args);\n }\n });\n });\n };\n run(matches.nodes, false);\n run(matches.attributes, true);\n };\n const filter$2 = (nodeFilters, attributeFilters, node, args = {}) => {\n const matches = findMatchingNodes(nodeFilters, attributeFilters, node);\n runFilters(matches, args);\n };\n\n const paddEmptyNode = (settings, args, isBlock, node) => {\n const brPreferred = settings.pad_empty_with_br || args.insert;\n if (brPreferred && isBlock(node)) {\n const astNode = new AstNode('br', 1);\n if (args.insert) {\n astNode.attr('data-mce-bogus', '1');\n }\n node.empty().append(astNode);\n } else {\n node.empty().append(new AstNode('#text', 3)).value = nbsp;\n }\n };\n const isPaddedWithNbsp = node => {\n var _a;\n return hasOnlyChild(node, '#text') && ((_a = node === null || node === void 0 ? void 0 : node.firstChild) === null || _a === void 0 ? void 0 : _a.value) === nbsp;\n };\n const hasOnlyChild = (node, name) => {\n const firstChild = node === null || node === void 0 ? void 0 : node.firstChild;\n return isNonNullable(firstChild) && firstChild === node.lastChild && firstChild.name === name;\n };\n const isPadded = (schema, node) => {\n const rule = schema.getElementRule(node.name);\n return (rule === null || rule === void 0 ? void 0 : rule.paddEmpty) === true;\n };\n const isEmpty = (schema, nonEmptyElements, whitespaceElements, node) => node.isEmpty(nonEmptyElements, whitespaceElements, node => isPadded(schema, node));\n const isLineBreakNode = (node, isBlock) => isNonNullable(node) && (isBlock(node) || node.name === 'br');\n const findClosestEditingHost = scope => {\n let editableNode;\n for (let node = scope; node; node = node.parent) {\n const contentEditable = node.attr('contenteditable');\n if (contentEditable === 'false') {\n break;\n } else if (contentEditable === 'true') {\n editableNode = node;\n }\n }\n return Optional.from(editableNode);\n };\n\n const removeOrUnwrapInvalidNode = (node, schema, originalNodeParent = node.parent) => {\n if (schema.getSpecialElements()[node.name]) {\n node.empty().remove();\n } else {\n const children = node.children();\n for (const childNode of children) {\n if (originalNodeParent && !schema.isValidChild(originalNodeParent.name, childNode.name)) {\n removeOrUnwrapInvalidNode(childNode, schema, originalNodeParent);\n }\n }\n node.unwrap();\n }\n };\n const cleanInvalidNodes = (nodes, schema, rootNode, onCreate = noop) => {\n const textBlockElements = schema.getTextBlockElements();\n const nonEmptyElements = schema.getNonEmptyElements();\n const whitespaceElements = schema.getWhitespaceElements();\n const nonSplittableElements = Tools.makeMap('tr,td,th,tbody,thead,tfoot,table,summary');\n const fixed = new Set();\n const isSplittableElement = node => node !== rootNode && !nonSplittableElements[node.name];\n for (let ni = 0; ni < nodes.length; ni++) {\n const node = nodes[ni];\n let parent;\n let newParent;\n let tempNode;\n if (!node.parent || fixed.has(node)) {\n continue;\n }\n if (textBlockElements[node.name] && node.parent.name === 'li') {\n let sibling = node.next;\n while (sibling) {\n if (textBlockElements[sibling.name]) {\n sibling.name = 'li';\n fixed.add(sibling);\n node.parent.insert(sibling, node.parent);\n } else {\n break;\n }\n sibling = sibling.next;\n }\n node.unwrap();\n continue;\n }\n const parents = [node];\n for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && isSplittableElement(parent); parent = parent.parent) {\n parents.push(parent);\n }\n if (parent && parents.length > 1) {\n if (!isInvalid(schema, node, parent)) {\n parents.reverse();\n newParent = parents[0].clone();\n onCreate(newParent);\n let currentNode = newParent;\n for (let i = 0; i < parents.length - 1; i++) {\n if (schema.isValidChild(currentNode.name, parents[i].name) && i > 0) {\n tempNode = parents[i].clone();\n onCreate(tempNode);\n currentNode.append(tempNode);\n } else {\n tempNode = currentNode;\n }\n for (let childNode = parents[i].firstChild; childNode && childNode !== parents[i + 1];) {\n const nextNode = childNode.next;\n tempNode.append(childNode);\n childNode = nextNode;\n }\n currentNode = tempNode;\n }\n if (!isEmpty(schema, nonEmptyElements, whitespaceElements, newParent)) {\n parent.insert(newParent, parents[0], true);\n parent.insert(node, newParent);\n } else {\n parent.insert(node, parents[0], true);\n }\n parent = parents[0];\n if (isEmpty(schema, nonEmptyElements, whitespaceElements, parent) || hasOnlyChild(parent, 'br')) {\n parent.empty().remove();\n }\n } else {\n removeOrUnwrapInvalidNode(node, schema);\n }\n } else if (node.parent) {\n if (node.name === 'li') {\n let sibling = node.prev;\n if (sibling && (sibling.name === 'ul' || sibling.name === 'ol')) {\n sibling.append(node);\n continue;\n }\n sibling = node.next;\n if (sibling && (sibling.name === 'ul' || sibling.name === 'ol') && sibling.firstChild) {\n sibling.insert(node, sibling.firstChild, true);\n continue;\n }\n const wrapper = new AstNode('ul', 1);\n onCreate(wrapper);\n node.wrap(wrapper);\n continue;\n }\n if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {\n const wrapper = new AstNode('div', 1);\n onCreate(wrapper);\n node.wrap(wrapper);\n } else {\n removeOrUnwrapInvalidNode(node, schema);\n }\n }\n }\n };\n const hasClosest = (node, parentName) => {\n let tempNode = node;\n while (tempNode) {\n if (tempNode.name === parentName) {\n return true;\n }\n tempNode = tempNode.parent;\n }\n return false;\n };\n const isInvalid = (schema, node, parent = node.parent) => {\n if (!parent) {\n return false;\n }\n if (schema.children[node.name] && !schema.isValidChild(parent.name, node.name)) {\n return true;\n }\n if (node.name === 'a' && hasClosest(parent, 'a')) {\n return true;\n }\n if (isSummary(parent) && isHeading(node)) {\n return !((parent === null || parent === void 0 ? void 0 : parent.firstChild) === node && (parent === null || parent === void 0 ? void 0 : parent.lastChild) === node);\n }\n return false;\n };\n\n const createRange = (sc, so, ec, eo) => {\n const rng = document.createRange();\n rng.setStart(sc, so);\n rng.setEnd(ec, eo);\n return rng;\n };\n const normalizeBlockSelectionRange = rng => {\n const startPos = CaretPosition.fromRangeStart(rng);\n const endPos = CaretPosition.fromRangeEnd(rng);\n const rootNode = rng.commonAncestorContainer;\n return fromPosition(false, rootNode, endPos).map(newEndPos => {\n if (!isInSameBlock(startPos, endPos, rootNode) && isInSameBlock(startPos, newEndPos, rootNode)) {\n return createRange(startPos.container(), startPos.offset(), newEndPos.container(), newEndPos.offset());\n } else {\n return rng;\n }\n }).getOr(rng);\n };\n const normalize = rng => rng.collapsed ? rng : normalizeBlockSelectionRange(rng);\n\n const hasOnlyOneChild$1 = node => {\n return isNonNullable(node.firstChild) && node.firstChild === node.lastChild;\n };\n const isPaddingNode = node => {\n return node.name === 'br' || node.value === nbsp;\n };\n const isPaddedEmptyBlock = (schema, node) => {\n const blockElements = schema.getBlockElements();\n return blockElements[node.name] && hasOnlyOneChild$1(node) && isPaddingNode(node.firstChild);\n };\n const isEmptyFragmentElement = (schema, node) => {\n const nonEmptyElements = schema.getNonEmptyElements();\n return isNonNullable(node) && (node.isEmpty(nonEmptyElements) || isPaddedEmptyBlock(schema, node));\n };\n const isListFragment = (schema, fragment) => {\n let firstChild = fragment.firstChild;\n let lastChild = fragment.lastChild;\n if (firstChild && firstChild.name === 'meta') {\n firstChild = firstChild.next;\n }\n if (lastChild && lastChild.attr('id') === 'mce_marker') {\n lastChild = lastChild.prev;\n }\n if (isEmptyFragmentElement(schema, lastChild)) {\n lastChild = lastChild === null || lastChild === void 0 ? void 0 : lastChild.prev;\n }\n if (!firstChild || firstChild !== lastChild) {\n return false;\n }\n return firstChild.name === 'ul' || firstChild.name === 'ol';\n };\n const cleanupDomFragment = domFragment => {\n var _a, _b;\n const firstChild = domFragment.firstChild;\n const lastChild = domFragment.lastChild;\n if (firstChild && firstChild.nodeName === 'META') {\n (_a = firstChild.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(firstChild);\n }\n if (lastChild && lastChild.id === 'mce_marker') {\n (_b = lastChild.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(lastChild);\n }\n return domFragment;\n };\n const toDomFragment = (dom, serializer, fragment) => {\n const html = serializer.serialize(fragment);\n const domFragment = dom.createFragment(html);\n return cleanupDomFragment(domFragment);\n };\n const listItems = elm => {\n var _a;\n return filter$5((_a = elm === null || elm === void 0 ? void 0 : elm.childNodes) !== null && _a !== void 0 ? _a : [], child => {\n return child.nodeName === 'LI';\n });\n };\n const isPadding = node => {\n return node.data === nbsp || isBr$6(node);\n };\n const isListItemPadded = node => {\n return isNonNullable(node === null || node === void 0 ? void 0 : node.firstChild) && node.firstChild === node.lastChild && isPadding(node.firstChild);\n };\n const isEmptyOrPadded = elm => {\n return !elm.firstChild || isListItemPadded(elm);\n };\n const trimListItems = elms => {\n return elms.length > 0 && isEmptyOrPadded(elms[elms.length - 1]) ? elms.slice(0, -1) : elms;\n };\n const getParentLi = (dom, node) => {\n const parentBlock = dom.getParent(node, dom.isBlock);\n return parentBlock && parentBlock.nodeName === 'LI' ? parentBlock : null;\n };\n const isParentBlockLi = (dom, node) => {\n return !!getParentLi(dom, node);\n };\n const getSplit = (parentNode, rng) => {\n const beforeRng = rng.cloneRange();\n const afterRng = rng.cloneRange();\n beforeRng.setStartBefore(parentNode);\n afterRng.setEndAfter(parentNode);\n return [\n beforeRng.cloneContents(),\n afterRng.cloneContents()\n ];\n };\n const findFirstIn = (node, rootNode) => {\n const caretPos = CaretPosition.before(node);\n const caretWalker = CaretWalker(rootNode);\n const newCaretPos = caretWalker.next(caretPos);\n return newCaretPos ? newCaretPos.toRange() : null;\n };\n const findLastOf = (node, rootNode) => {\n const caretPos = CaretPosition.after(node);\n const caretWalker = CaretWalker(rootNode);\n const newCaretPos = caretWalker.prev(caretPos);\n return newCaretPos ? newCaretPos.toRange() : null;\n };\n const insertMiddle = (target, elms, rootNode, rng) => {\n const parts = getSplit(target, rng);\n const parentElm = target.parentNode;\n if (parentElm) {\n parentElm.insertBefore(parts[0], target);\n Tools.each(elms, li => {\n parentElm.insertBefore(li, target);\n });\n parentElm.insertBefore(parts[1], target);\n parentElm.removeChild(target);\n }\n return findLastOf(elms[elms.length - 1], rootNode);\n };\n const insertBefore$2 = (target, elms, rootNode) => {\n const parentElm = target.parentNode;\n if (parentElm) {\n Tools.each(elms, elm => {\n parentElm.insertBefore(elm, target);\n });\n }\n return findFirstIn(target, rootNode);\n };\n const insertAfter$2 = (target, elms, rootNode, dom) => {\n dom.insertAfter(elms.reverse(), target);\n return findLastOf(elms[0], rootNode);\n };\n const insertAtCaret$1 = (serializer, dom, rng, fragment) => {\n const domFragment = toDomFragment(dom, serializer, fragment);\n const liTarget = getParentLi(dom, rng.startContainer);\n const liElms = trimListItems(listItems(domFragment.firstChild));\n const BEGINNING = 1, END = 2;\n const rootNode = dom.getRoot();\n const isAt = location => {\n const caretPos = CaretPosition.fromRangeStart(rng);\n const caretWalker = CaretWalker(dom.getRoot());\n const newPos = location === BEGINNING ? caretWalker.prev(caretPos) : caretWalker.next(caretPos);\n const newPosNode = newPos === null || newPos === void 0 ? void 0 : newPos.getNode();\n return newPosNode ? getParentLi(dom, newPosNode) !== liTarget : true;\n };\n if (!liTarget) {\n return null;\n } else if (isAt(BEGINNING)) {\n return insertBefore$2(liTarget, liElms, rootNode);\n } else if (isAt(END)) {\n return insertAfter$2(liTarget, liElms, rootNode, dom);\n } else {\n return insertMiddle(liTarget, liElms, rootNode, rng);\n }\n };\n\n const mergeableWrappedElements = ['pre'];\n const shouldPasteContentOnly = (dom, fragment, parentNode, root) => {\n var _a;\n const firstNode = fragment.firstChild;\n const lastNode = fragment.lastChild;\n const last = lastNode.attr('data-mce-type') === 'bookmark' ? lastNode.prev : lastNode;\n const isPastingSingleElement = firstNode === last;\n const isWrappedElement = contains$2(mergeableWrappedElements, firstNode.name);\n if (isPastingSingleElement && isWrappedElement) {\n const isContentEditable = firstNode.attr('contenteditable') !== 'false';\n const isPastingInTheSameBlockTag = ((_a = dom.getParent(parentNode, dom.isBlock)) === null || _a === void 0 ? void 0 : _a.nodeName.toLowerCase()) === firstNode.name;\n const isPastingInContentEditable = Optional.from(getContentEditableRoot$1(root, parentNode)).forall(isContentEditableTrue$3);\n return isContentEditable && isPastingInTheSameBlockTag && isPastingInContentEditable;\n } else {\n return false;\n }\n };\n const isTableCell = isTableCell$3;\n const isTableCellContentSelected = (dom, rng, cell) => {\n if (isNonNullable(cell)) {\n const endCell = dom.getParent(rng.endContainer, isTableCell);\n return cell === endCell && hasAllContentsSelected(SugarElement.fromDom(cell), rng);\n } else {\n return false;\n }\n };\n const isEditableEmptyBlock = (dom, node) => {\n if (dom.isBlock(node) && dom.isEditable(node)) {\n const childNodes = node.childNodes;\n return childNodes.length === 1 && isBr$6(childNodes[0]) || childNodes.length === 0;\n } else {\n return false;\n }\n };\n const validInsertion = (editor, value, parentNode) => {\n var _a;\n if (parentNode.getAttribute('data-mce-bogus') === 'all') {\n (_a = parentNode.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(editor.dom.createFragment(value), parentNode);\n } else {\n if (isEditableEmptyBlock(editor.dom, parentNode)) {\n editor.dom.setHTML(parentNode, value);\n } else {\n editor.selection.setContent(value, { no_events: true });\n }\n }\n };\n const trimBrsFromTableCell = (dom, elm, schema) => {\n Optional.from(dom.getParent(elm, 'td,th')).map(SugarElement.fromDom).each(el => trimBlockTrailingBr(el, schema));\n };\n const reduceInlineTextElements = (editor, merge) => {\n const textInlineElements = editor.schema.getTextInlineElements();\n const dom = editor.dom;\n if (merge) {\n const root = editor.getBody();\n const elementUtils = ElementUtils(editor);\n const fragmentSelector = '*[data-mce-fragment]';\n const fragments = dom.select(fragmentSelector);\n Tools.each(fragments, node => {\n const isInline = currentNode => isNonNullable(textInlineElements[currentNode.nodeName.toLowerCase()]);\n const hasOneChild = currentNode => currentNode.childNodes.length === 1;\n const hasNoNonInheritableStyles = currentNode => !(hasNonInheritableStyles(dom, currentNode) || hasConditionalNonInheritableStyles(dom, currentNode));\n if (hasNoNonInheritableStyles(node) && isInline(node) && hasOneChild(node)) {\n const styles = getStyleProps(dom, node);\n const isOverridden = (oldStyles, newStyles) => forall(oldStyles, style => contains$2(newStyles, style));\n const overriddenByAllChildren = childNode => hasOneChild(node) && dom.is(childNode, fragmentSelector) && isInline(childNode) && (childNode.nodeName === node.nodeName && isOverridden(styles, getStyleProps(dom, childNode)) || overriddenByAllChildren(childNode.children[0]));\n const identicalToParent = parentNode => isNonNullable(parentNode) && parentNode !== root && (elementUtils.compare(node, parentNode) || identicalToParent(parentNode.parentElement));\n const conflictWithInsertedParent = parentNode => isNonNullable(parentNode) && parentNode !== root && dom.is(parentNode, fragmentSelector) && (hasStyleConflict(dom, node, parentNode) || conflictWithInsertedParent(parentNode.parentElement));\n if (overriddenByAllChildren(node.children[0]) || identicalToParent(node.parentElement) && !conflictWithInsertedParent(node.parentElement)) {\n dom.remove(node, true);\n }\n }\n });\n }\n };\n const markFragmentElements = fragment => {\n let node = fragment;\n while (node = node.walk()) {\n if (node.type === 1) {\n node.attr('data-mce-fragment', '1');\n }\n }\n };\n const unmarkFragmentElements = elm => {\n Tools.each(elm.getElementsByTagName('*'), elm => {\n elm.removeAttribute('data-mce-fragment');\n });\n };\n const isPartOfFragment = node => {\n return !!node.getAttribute('data-mce-fragment');\n };\n const canHaveChildren = (editor, node) => {\n return isNonNullable(node) && !editor.schema.getVoidElements()[node.nodeName];\n };\n const moveSelectionToMarker = (editor, marker) => {\n var _a, _b, _c;\n let nextRng;\n const dom = editor.dom;\n const selection = editor.selection;\n if (!marker) {\n return;\n }\n selection.scrollIntoView(marker);\n const parentEditableElm = getContentEditableRoot$1(editor.getBody(), marker);\n if (parentEditableElm && dom.getContentEditable(parentEditableElm) === 'false') {\n dom.remove(marker);\n selection.select(parentEditableElm);\n return;\n }\n let rng = dom.createRng();\n const node = marker.previousSibling;\n if (isText$b(node)) {\n rng.setStart(node, (_b = (_a = node.nodeValue) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0);\n const node2 = marker.nextSibling;\n if (isText$b(node2)) {\n node.appendData(node2.data);\n (_c = node2.parentNode) === null || _c === void 0 ? void 0 : _c.removeChild(node2);\n }\n } else {\n rng.setStartBefore(marker);\n rng.setEndBefore(marker);\n }\n const findNextCaretRng = rng => {\n let caretPos = CaretPosition.fromRangeStart(rng);\n const caretWalker = CaretWalker(editor.getBody());\n caretPos = caretWalker.next(caretPos);\n return caretPos === null || caretPos === void 0 ? void 0 : caretPos.toRange();\n };\n const parentBlock = dom.getParent(marker, dom.isBlock);\n dom.remove(marker);\n if (parentBlock && dom.isEmpty(parentBlock)) {\n const isCell = isTableCell(parentBlock);\n empty(SugarElement.fromDom(parentBlock));\n rng.setStart(parentBlock, 0);\n rng.setEnd(parentBlock, 0);\n if (!isCell && !isPartOfFragment(parentBlock) && (nextRng = findNextCaretRng(rng))) {\n rng = nextRng;\n dom.remove(parentBlock);\n } else {\n dom.add(parentBlock, dom.create('br', isCell ? {} : { 'data-mce-bogus': '1' }));\n }\n }\n selection.setRng(rng);\n };\n const deleteSelectedContent = editor => {\n const dom = editor.dom;\n const rng = normalize(editor.selection.getRng());\n editor.selection.setRng(rng);\n const startCell = dom.getParent(rng.startContainer, isTableCell);\n if (isTableCellContentSelected(dom, rng, startCell)) {\n deleteCellContents(editor, rng, SugarElement.fromDom(startCell));\n } else if (rng.startContainer === rng.endContainer && rng.endOffset - rng.startOffset === 1 && isText$b(rng.startContainer.childNodes[rng.startOffset])) {\n rng.deleteContents();\n } else {\n editor.getDoc().execCommand('Delete', false);\n }\n };\n const findMarkerNode = scope => {\n for (let markerNode = scope; markerNode; markerNode = markerNode.walk()) {\n if (markerNode.attr('id') === 'mce_marker') {\n return Optional.some(markerNode);\n }\n }\n return Optional.none();\n };\n const notHeadingsInSummary = (dom, node, fragment) => {\n var _a;\n return exists(fragment.children(), isHeading) && ((_a = dom.getParent(node, dom.isBlock)) === null || _a === void 0 ? void 0 : _a.nodeName) === 'SUMMARY';\n };\n const insertHtmlAtCaret = (editor, value, details) => {\n var _a, _b;\n const selection = editor.selection;\n const dom = editor.dom;\n const parser = editor.parser;\n const merge = details.merge;\n const serializer = HtmlSerializer({ validate: true }, editor.schema);\n const bookmarkHtml = '';\n if (!details.preserve_zwsp) {\n value = trim$2(value);\n }\n if (value.indexOf('{$caret}') === -1) {\n value += '{$caret}';\n }\n value = value.replace(/\\{\\$caret\\}/, bookmarkHtml);\n let rng = selection.getRng();\n const caretElement = rng.startContainer;\n const body = editor.getBody();\n if (caretElement === body && selection.isCollapsed()) {\n if (dom.isBlock(body.firstChild) && canHaveChildren(editor, body.firstChild) && dom.isEmpty(body.firstChild)) {\n rng = dom.createRng();\n rng.setStart(body.firstChild, 0);\n rng.setEnd(body.firstChild, 0);\n selection.setRng(rng);\n }\n }\n if (!selection.isCollapsed()) {\n deleteSelectedContent(editor);\n }\n const parentNode = selection.getNode();\n const parserArgs = {\n context: parentNode.nodeName.toLowerCase(),\n data: details.data,\n insert: true\n };\n const fragment = parser.parse(value, parserArgs);\n if (details.paste === true && isListFragment(editor.schema, fragment) && isParentBlockLi(dom, parentNode)) {\n rng = insertAtCaret$1(serializer, dom, selection.getRng(), fragment);\n if (rng) {\n selection.setRng(rng);\n }\n return value;\n }\n if (details.paste === true && shouldPasteContentOnly(dom, fragment, parentNode, editor.getBody())) {\n (_a = fragment.firstChild) === null || _a === void 0 ? void 0 : _a.unwrap();\n }\n markFragmentElements(fragment);\n let node = fragment.lastChild;\n if (node && node.attr('id') === 'mce_marker') {\n const marker = node;\n for (node = node.prev; node; node = node.walk(true)) {\n if (node.name === 'table') {\n break;\n }\n if (node.type === 3 || !dom.isBlock(node.name)) {\n if (node.parent && editor.schema.isValidChild(node.parent.name, 'span')) {\n node.parent.insert(marker, node, node.name === 'br');\n }\n break;\n }\n }\n }\n editor._selectionOverrides.showBlockCaretContainer(parentNode);\n if (!parserArgs.invalid && !notHeadingsInSummary(dom, parentNode, fragment)) {\n value = serializer.serialize(fragment);\n validInsertion(editor, value, parentNode);\n } else {\n editor.selection.setContent(bookmarkHtml);\n let parentNode = selection.getNode();\n let tempNode;\n const rootNode = editor.getBody();\n if (isDocument$1(parentNode)) {\n parentNode = tempNode = rootNode;\n } else {\n tempNode = parentNode;\n }\n while (tempNode && tempNode !== rootNode) {\n parentNode = tempNode;\n tempNode = tempNode.parentNode;\n }\n value = parentNode === rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode);\n const root = parser.parse(value);\n const markerNode = findMarkerNode(root);\n const editingHost = markerNode.bind(findClosestEditingHost).getOr(root);\n markerNode.each(marker => marker.replace(fragment));\n const toExtract = fragment.children();\n const parent = (_b = fragment.parent) !== null && _b !== void 0 ? _b : root;\n fragment.unwrap();\n const invalidChildren = filter$5(toExtract, node => isInvalid(editor.schema, node, parent));\n cleanInvalidNodes(invalidChildren, editor.schema, editingHost);\n filter$2(parser.getNodeFilters(), parser.getAttributeFilters(), root);\n value = serializer.serialize(root);\n if (parentNode === rootNode) {\n dom.setHTML(rootNode, value);\n } else {\n dom.setOuterHTML(parentNode, value);\n }\n }\n reduceInlineTextElements(editor, merge);\n moveSelectionToMarker(editor, dom.get('mce_marker'));\n unmarkFragmentElements(editor.getBody());\n trimBrsFromTableCell(dom, selection.getStart(), editor.schema);\n updateCaret(editor.schema, editor.getBody(), selection.getStart());\n return value;\n };\n\n const isTreeNode = content => content instanceof AstNode;\n\n const moveSelection = editor => {\n if (hasFocus(editor)) {\n firstPositionIn(editor.getBody()).each(pos => {\n const node = pos.getNode();\n const caretPos = isTable$2(node) ? firstPositionIn(node).getOr(pos) : pos;\n editor.selection.setRng(caretPos.toRange());\n });\n }\n };\n const setEditorHtml = (editor, html, noSelection) => {\n editor.dom.setHTML(editor.getBody(), html);\n if (noSelection !== true) {\n moveSelection(editor);\n }\n };\n const setContentString = (editor, body, content, args) => {\n content = trim$2(content);\n if (content.length === 0 || /^\\s+$/.test(content)) {\n const padd = '
';\n if (body.nodeName === 'TABLE') {\n content = '' + padd + '';\n } else if (/^(UL|OL)$/.test(body.nodeName)) {\n content = '
  • ' + padd + '
  • ';\n }\n const forcedRootBlockName = getForcedRootBlock(editor);\n if (editor.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) {\n content = padd;\n content = editor.dom.createHTML(forcedRootBlockName, getForcedRootBlockAttrs(editor), content);\n } else if (!content) {\n content = padd;\n }\n setEditorHtml(editor, content, args.no_selection);\n return {\n content,\n html: content\n };\n } else {\n if (args.format !== 'raw') {\n content = HtmlSerializer({ validate: false }, editor.schema).serialize(editor.parser.parse(content, {\n isRootContent: true,\n insert: true\n }));\n }\n const trimmedHtml = isWsPreserveElement(SugarElement.fromDom(body)) ? content : Tools.trim(content);\n setEditorHtml(editor, trimmedHtml, args.no_selection);\n return {\n content: trimmedHtml,\n html: trimmedHtml\n };\n }\n };\n const setContentTree = (editor, body, content, args) => {\n filter$2(editor.parser.getNodeFilters(), editor.parser.getAttributeFilters(), content);\n const html = HtmlSerializer({ validate: false }, editor.schema).serialize(content);\n const trimmedHtml = trim$2(isWsPreserveElement(SugarElement.fromDom(body)) ? html : Tools.trim(html));\n setEditorHtml(editor, trimmedHtml, args.no_selection);\n return {\n content,\n html: trimmedHtml\n };\n };\n const setContentInternal = (editor, content, args) => {\n return Optional.from(editor.getBody()).map(body => {\n if (isTreeNode(content)) {\n return setContentTree(editor, body, content, args);\n } else {\n return setContentString(editor, body, content, args);\n }\n }).getOr({\n content,\n html: isTreeNode(args.content) ? '' : args.content\n });\n };\n\n const ensureIsRoot = isRoot => isFunction(isRoot) ? isRoot : never;\n const ancestor = (scope, transform, isRoot) => {\n let element = scope.dom;\n const stop = ensureIsRoot(isRoot);\n while (element.parentNode) {\n element = element.parentNode;\n const el = SugarElement.fromDom(element);\n const transformed = transform(el);\n if (transformed.isSome()) {\n return transformed;\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n const closest$1 = (scope, transform, isRoot) => {\n const current = transform(scope);\n const stop = ensureIsRoot(isRoot);\n return current.orThunk(() => stop(scope) ? Optional.none() : ancestor(scope, transform, stop));\n };\n\n const isEq$3 = isEq$5;\n const matchesUnInheritedFormatSelector = (ed, node, name) => {\n const formatList = ed.formatter.get(name);\n if (formatList) {\n for (let i = 0; i < formatList.length; i++) {\n const format = formatList[i];\n if (isSelectorFormat(format) && format.inherit === false && ed.dom.is(node, format.selector)) {\n return true;\n }\n }\n }\n return false;\n };\n const matchParents = (editor, node, name, vars, similar) => {\n const root = editor.dom.getRoot();\n if (node === root) {\n return false;\n }\n const matchedNode = editor.dom.getParent(node, elm => {\n if (matchesUnInheritedFormatSelector(editor, elm, name)) {\n return true;\n }\n return elm.parentNode === root || !!matchNode(editor, elm, name, vars, true);\n });\n return !!matchNode(editor, matchedNode, name, vars, similar);\n };\n const matchName = (dom, node, format) => {\n if (isInlineFormat(format) && isEq$3(node, format.inline)) {\n return true;\n }\n if (isBlockFormat(format) && isEq$3(node, format.block)) {\n return true;\n }\n if (isSelectorFormat(format)) {\n return isElement$6(node) && dom.is(node, format.selector);\n }\n return false;\n };\n const matchItems = (dom, node, format, itemName, similar, vars) => {\n const items = format[itemName];\n const matchAttributes = itemName === 'attributes';\n if (isFunction(format.onmatch)) {\n return format.onmatch(node, format, itemName);\n }\n if (items) {\n if (!isArrayLike(items)) {\n for (const key in items) {\n if (has$2(items, key)) {\n const value = matchAttributes ? dom.getAttrib(node, key) : getStyle(dom, node, key);\n const expectedValue = replaceVars(items[key], vars);\n const isEmptyValue = isNullable(value) || isEmpty$3(value);\n if (isEmptyValue && isNullable(expectedValue)) {\n continue;\n }\n if (similar && isEmptyValue && !format.exact) {\n return false;\n }\n if ((!similar || format.exact) && !isEq$3(value, normalizeStyleValue(expectedValue, key))) {\n return false;\n }\n }\n }\n } else {\n for (let i = 0; i < items.length; i++) {\n if (matchAttributes ? dom.getAttrib(node, items[i]) : getStyle(dom, node, items[i])) {\n return true;\n }\n }\n }\n }\n return true;\n };\n const matchNode = (ed, node, name, vars, similar) => {\n const formatList = ed.formatter.get(name);\n const dom = ed.dom;\n if (formatList && isElement$6(node)) {\n for (let i = 0; i < formatList.length; i++) {\n const format = formatList[i];\n if (matchName(ed.dom, node, format) && matchItems(dom, node, format, 'attributes', similar, vars) && matchItems(dom, node, format, 'styles', similar, vars)) {\n const classes = format.classes;\n if (classes) {\n for (let x = 0; x < classes.length; x++) {\n if (!ed.dom.hasClass(node, replaceVars(classes[x], vars))) {\n return;\n }\n }\n }\n return format;\n }\n }\n }\n return undefined;\n };\n const match$2 = (editor, name, vars, node, similar) => {\n if (node) {\n return matchParents(editor, node, name, vars, similar);\n }\n node = editor.selection.getNode();\n if (matchParents(editor, node, name, vars, similar)) {\n return true;\n }\n const startNode = editor.selection.getStart();\n if (startNode !== node) {\n if (matchParents(editor, startNode, name, vars, similar)) {\n return true;\n }\n }\n return false;\n };\n const matchAll = (editor, names, vars) => {\n const matchedFormatNames = [];\n const checkedMap = {};\n const startElement = editor.selection.getStart();\n editor.dom.getParent(startElement, node => {\n for (let i = 0; i < names.length; i++) {\n const name = names[i];\n if (!checkedMap[name] && matchNode(editor, node, name, vars)) {\n checkedMap[name] = true;\n matchedFormatNames.push(name);\n }\n }\n }, editor.dom.getRoot());\n return matchedFormatNames;\n };\n const closest = (editor, names) => {\n const isRoot = elm => eq(elm, SugarElement.fromDom(editor.getBody()));\n const match = (elm, name) => matchNode(editor, elm.dom, name) ? Optional.some(name) : Optional.none();\n return Optional.from(editor.selection.getStart(true)).bind(rawElm => closest$1(SugarElement.fromDom(rawElm), elm => findMap(names, name => match(elm, name)), isRoot)).getOrNull();\n };\n const canApply = (editor, name) => {\n const formatList = editor.formatter.get(name);\n const dom = editor.dom;\n if (formatList && editor.selection.isEditable()) {\n const startNode = editor.selection.getStart();\n const parents = getParents$2(dom, startNode);\n for (let x = formatList.length - 1; x >= 0; x--) {\n const format = formatList[x];\n if (!isSelectorFormat(format)) {\n return true;\n }\n for (let i = parents.length - 1; i >= 0; i--) {\n if (dom.is(parents[i], format.selector)) {\n return true;\n }\n }\n }\n }\n return false;\n };\n const matchAllOnNode = (editor, node, formatNames) => foldl(formatNames, (acc, name) => {\n const matchSimilar = isVariableFormatName(editor, name);\n if (editor.formatter.matchNode(node, name, {}, matchSimilar)) {\n return acc.concat([name]);\n } else {\n return acc;\n }\n }, []);\n\n const ZWSP = ZWSP$1;\n const importNode = (ownerDocument, node) => {\n return ownerDocument.importNode(node, true);\n };\n const findFirstTextNode = node => {\n if (node) {\n const walker = new DomTreeWalker(node, node);\n for (let tempNode = walker.current(); tempNode; tempNode = walker.next()) {\n if (isText$b(tempNode)) {\n return tempNode;\n }\n }\n }\n return null;\n };\n const createCaretContainer = fill => {\n const caretContainer = SugarElement.fromTag('span');\n setAll$1(caretContainer, {\n 'id': CARET_ID,\n 'data-mce-bogus': '1',\n 'data-mce-type': 'format-caret'\n });\n if (fill) {\n append$1(caretContainer, SugarElement.fromText(ZWSP));\n }\n return caretContainer;\n };\n const trimZwspFromCaretContainer = caretContainerNode => {\n const textNode = findFirstTextNode(caretContainerNode);\n if (textNode && textNode.data.charAt(0) === ZWSP) {\n textNode.deleteData(0, 1);\n }\n return textNode;\n };\n const removeCaretContainerNode = (editor, node, moveCaret) => {\n const dom = editor.dom, selection = editor.selection;\n if (isCaretContainerEmpty(node)) {\n deleteElement$2(editor, false, SugarElement.fromDom(node), moveCaret, true);\n } else {\n const rng = selection.getRng();\n const block = dom.getParent(node, dom.isBlock);\n const startContainer = rng.startContainer;\n const startOffset = rng.startOffset;\n const endContainer = rng.endContainer;\n const endOffset = rng.endOffset;\n const textNode = trimZwspFromCaretContainer(node);\n dom.remove(node, true);\n if (startContainer === textNode && startOffset > 0) {\n rng.setStart(textNode, startOffset - 1);\n }\n if (endContainer === textNode && endOffset > 0) {\n rng.setEnd(textNode, endOffset - 1);\n }\n if (block && dom.isEmpty(block)) {\n fillWithPaddingBr(SugarElement.fromDom(block));\n }\n selection.setRng(rng);\n }\n };\n const removeCaretContainer = (editor, node, moveCaret) => {\n const dom = editor.dom, selection = editor.selection;\n if (!node) {\n node = getParentCaretContainer(editor.getBody(), selection.getStart());\n if (!node) {\n while (node = dom.get(CARET_ID)) {\n removeCaretContainerNode(editor, node, moveCaret);\n }\n }\n } else {\n removeCaretContainerNode(editor, node, moveCaret);\n }\n };\n const insertCaretContainerNode = (editor, caretContainer, formatNode) => {\n var _a, _b;\n const dom = editor.dom;\n const block = dom.getParent(formatNode, curry(isTextBlock$1, editor.schema));\n if (block && dom.isEmpty(block)) {\n (_a = formatNode.parentNode) === null || _a === void 0 ? void 0 : _a.replaceChild(caretContainer, formatNode);\n } else {\n removeTrailingBr(SugarElement.fromDom(formatNode));\n if (dom.isEmpty(formatNode)) {\n (_b = formatNode.parentNode) === null || _b === void 0 ? void 0 : _b.replaceChild(caretContainer, formatNode);\n } else {\n dom.insertAfter(caretContainer, formatNode);\n }\n }\n };\n const appendNode = (parentNode, node) => {\n parentNode.appendChild(node);\n return node;\n };\n const insertFormatNodesIntoCaretContainer = (formatNodes, caretContainer) => {\n var _a;\n const innerMostFormatNode = foldr(formatNodes, (parentNode, formatNode) => {\n return appendNode(parentNode, formatNode.cloneNode(false));\n }, caretContainer);\n const doc = (_a = innerMostFormatNode.ownerDocument) !== null && _a !== void 0 ? _a : document;\n return appendNode(innerMostFormatNode, doc.createTextNode(ZWSP));\n };\n const cleanFormatNode = (editor, caretContainer, formatNode, name, vars, similar) => {\n const formatter = editor.formatter;\n const dom = editor.dom;\n const validFormats = filter$5(keys(formatter.get()), formatName => formatName !== name && !contains$1(formatName, 'removeformat'));\n const matchedFormats = matchAllOnNode(editor, formatNode, validFormats);\n const uniqueFormats = filter$5(matchedFormats, fmtName => !areSimilarFormats(editor, fmtName, name));\n if (uniqueFormats.length > 0) {\n const clonedFormatNode = formatNode.cloneNode(false);\n dom.add(caretContainer, clonedFormatNode);\n formatter.remove(name, vars, clonedFormatNode, similar);\n dom.remove(clonedFormatNode);\n return Optional.some(clonedFormatNode);\n } else {\n return Optional.none();\n }\n };\n const normalizeNbsps = node => set(node, get$3(node).replace(new RegExp(`${ nbsp }$`), ' '));\n const normalizeNbspsBetween = (editor, caretContainer) => {\n const handler = () => {\n if (caretContainer !== null && !editor.dom.isEmpty(caretContainer)) {\n prevSibling(SugarElement.fromDom(caretContainer)).each(node => {\n if (isText$c(node)) {\n normalizeNbsps(node);\n } else {\n descendant$2(node, e => isText$c(e)).each(textNode => {\n if (isText$c(textNode)) {\n normalizeNbsps(textNode);\n }\n });\n }\n });\n }\n };\n editor.once('input', e => {\n if (e.data && !isWhiteSpace(e.data)) {\n if (!e.isComposing) {\n handler();\n } else {\n editor.once('compositionend', () => {\n handler();\n });\n }\n }\n });\n };\n const applyCaretFormat = (editor, name, vars) => {\n let caretContainer;\n const selection = editor.selection;\n const formatList = editor.formatter.get(name);\n if (!formatList) {\n return;\n }\n const selectionRng = selection.getRng();\n let offset = selectionRng.startOffset;\n const container = selectionRng.startContainer;\n const text = container.nodeValue;\n caretContainer = getParentCaretContainer(editor.getBody(), selection.getStart());\n const wordcharRegex = /[^\\s\\u00a0\\u00ad\\u200b\\ufeff]/;\n if (text && offset > 0 && offset < text.length && wordcharRegex.test(text.charAt(offset)) && wordcharRegex.test(text.charAt(offset - 1))) {\n const bookmark = selection.getBookmark();\n selectionRng.collapse(true);\n let rng = expandRng(editor.dom, selectionRng, formatList);\n rng = split(rng);\n editor.formatter.apply(name, vars, rng);\n selection.moveToBookmark(bookmark);\n } else {\n let textNode = caretContainer ? findFirstTextNode(caretContainer) : null;\n if (!caretContainer || (textNode === null || textNode === void 0 ? void 0 : textNode.data) !== ZWSP) {\n caretContainer = importNode(editor.getDoc(), createCaretContainer(true).dom);\n textNode = caretContainer.firstChild;\n selectionRng.insertNode(caretContainer);\n offset = 1;\n normalizeNbspsBetween(editor, caretContainer);\n editor.formatter.apply(name, vars, caretContainer);\n } else {\n editor.formatter.apply(name, vars, caretContainer);\n }\n selection.setCursorLocation(textNode, offset);\n }\n };\n const removeCaretFormat = (editor, name, vars, similar) => {\n const dom = editor.dom;\n const selection = editor.selection;\n let hasContentAfter = false;\n const formatList = editor.formatter.get(name);\n if (!formatList) {\n return;\n }\n const rng = selection.getRng();\n const container = rng.startContainer;\n const offset = rng.startOffset;\n let node = container;\n if (isText$b(container)) {\n if (offset !== container.data.length) {\n hasContentAfter = true;\n }\n node = node.parentNode;\n }\n const parents = [];\n let formatNode;\n while (node) {\n if (matchNode(editor, node, name, vars, similar)) {\n formatNode = node;\n break;\n }\n if (node.nextSibling) {\n hasContentAfter = true;\n }\n parents.push(node);\n node = node.parentNode;\n }\n if (!formatNode) {\n return;\n }\n if (hasContentAfter) {\n const bookmark = selection.getBookmark();\n rng.collapse(true);\n let expandedRng = expandRng(dom, rng, formatList, { includeTrailingSpace: true });\n expandedRng = split(expandedRng);\n editor.formatter.remove(name, vars, expandedRng, similar);\n selection.moveToBookmark(bookmark);\n } else {\n const caretContainer = getParentCaretContainer(editor.getBody(), formatNode);\n const parentsAfter = isNonNullable(caretContainer) ? dom.getParents(formatNode.parentNode, always, caretContainer) : [];\n const newCaretContainer = createCaretContainer(false).dom;\n insertCaretContainerNode(editor, newCaretContainer, caretContainer !== null && caretContainer !== void 0 ? caretContainer : formatNode);\n const cleanedFormatNode = cleanFormatNode(editor, newCaretContainer, formatNode, name, vars, similar);\n const caretTextNode = insertFormatNodesIntoCaretContainer([\n ...parents,\n ...cleanedFormatNode.toArray(),\n ...parentsAfter\n ], newCaretContainer);\n if (caretContainer) {\n removeCaretContainerNode(editor, caretContainer, isNonNullable(caretContainer));\n }\n selection.setCursorLocation(caretTextNode, 1);\n normalizeNbspsBetween(editor, newCaretContainer);\n if (dom.isEmpty(formatNode)) {\n dom.remove(formatNode);\n }\n }\n };\n const disableCaretContainer = (editor, keyCode, moveCaret) => {\n const selection = editor.selection, body = editor.getBody();\n removeCaretContainer(editor, null, moveCaret);\n if ((keyCode === 8 || keyCode === 46) && selection.isCollapsed() && selection.getStart().innerHTML === ZWSP) {\n removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()), true);\n }\n if (keyCode === 37 || keyCode === 39) {\n removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()), true);\n }\n };\n const endsWithNbsp = element => isText$b(element) && endsWith(element.data, nbsp);\n const setup$v = editor => {\n editor.on('mouseup keydown', e => {\n disableCaretContainer(editor, e.keyCode, endsWithNbsp(editor.selection.getRng().endContainer));\n });\n };\n const createCaretFormat = formatNodes => {\n const caretContainer = createCaretContainer(false);\n const innerMost = insertFormatNodesIntoCaretContainer(formatNodes, caretContainer.dom);\n return {\n caretContainer,\n caretPosition: CaretPosition(innerMost, 0)\n };\n };\n const replaceWithCaretFormat = (targetNode, formatNodes) => {\n const {caretContainer, caretPosition} = createCaretFormat(formatNodes);\n before$3(SugarElement.fromDom(targetNode), caretContainer);\n remove$4(SugarElement.fromDom(targetNode));\n return caretPosition;\n };\n const createCaretFormatAtStart$1 = (rng, formatNodes) => {\n const {caretContainer, caretPosition} = createCaretFormat(formatNodes);\n rng.insertNode(caretContainer.dom);\n return caretPosition;\n };\n const isFormatElement = (editor, element) => {\n if (isCaretNode(element.dom)) {\n return false;\n }\n const inlineElements = editor.schema.getTextInlineElements();\n return has$2(inlineElements, name(element)) && !isCaretNode(element.dom) && !isBogus$1(element.dom);\n };\n\n const postProcessHooks = {};\n const isPre = matchNodeNames(['pre']);\n const addPostProcessHook = (name, hook) => {\n const hooks = postProcessHooks[name];\n if (!hooks) {\n postProcessHooks[name] = [];\n }\n postProcessHooks[name].push(hook);\n };\n const postProcess$1 = (name, editor) => {\n if (has$2(postProcessHooks, name)) {\n each$e(postProcessHooks[name], hook => {\n hook(editor);\n });\n }\n };\n addPostProcessHook('pre', editor => {\n const rng = editor.selection.getRng();\n const hasPreSibling = blocks => pre => {\n const prev = pre.previousSibling;\n return isPre(prev) && contains$2(blocks, prev);\n };\n const joinPre = (pre1, pre2) => {\n const sPre2 = SugarElement.fromDom(pre2);\n const doc = documentOrOwner(sPre2).dom;\n remove$4(sPre2);\n append(SugarElement.fromDom(pre1), [\n SugarElement.fromTag('br', doc),\n SugarElement.fromTag('br', doc),\n ...children$1(sPre2)\n ]);\n };\n if (!rng.collapsed) {\n const blocks = editor.selection.getSelectedBlocks();\n const preBlocks = filter$5(filter$5(blocks, isPre), hasPreSibling(blocks));\n each$e(preBlocks, pre => {\n joinPre(pre.previousSibling, pre);\n });\n }\n });\n\n const listItemStyles = [\n 'fontWeight',\n 'fontStyle',\n 'color',\n 'fontSize',\n 'fontFamily'\n ];\n const hasListStyles = fmt => isObject(fmt.styles) && exists(keys(fmt.styles), name => contains$2(listItemStyles, name));\n const findExpandedListItemFormat = formats => find$2(formats, fmt => isInlineFormat(fmt) && fmt.inline === 'span' && hasListStyles(fmt));\n const getExpandedListItemFormat = (formatter, format) => {\n const formatList = formatter.get(format);\n return isArray$1(formatList) ? findExpandedListItemFormat(formatList) : Optional.none();\n };\n const isRngStartAtStartOfElement = (rng, elm) => prevPosition(elm, CaretPosition.fromRangeStart(rng)).isNone();\n const isRngEndAtEndOfElement = (rng, elm) => {\n return nextPosition(elm, CaretPosition.fromRangeEnd(rng)).exists(pos => !isBr$6(pos.getNode()) || nextPosition(elm, pos).isSome()) === false;\n };\n const isEditableListItem = dom => elm => isListItem$2(elm) && dom.isEditable(elm);\n const getFullySelectedBlocks = selection => {\n const blocks = selection.getSelectedBlocks();\n const rng = selection.getRng();\n if (selection.isCollapsed()) {\n return [];\n }\n if (blocks.length === 1) {\n return isRngStartAtStartOfElement(rng, blocks[0]) && isRngEndAtEndOfElement(rng, blocks[0]) ? blocks : [];\n } else {\n const first = head(blocks).filter(elm => isRngStartAtStartOfElement(rng, elm)).toArray();\n const last = last$2(blocks).filter(elm => isRngEndAtEndOfElement(rng, elm)).toArray();\n const middle = blocks.slice(1, -1);\n return first.concat(middle).concat(last);\n }\n };\n const getFullySelectedListItems = selection => filter$5(getFullySelectedBlocks(selection), isEditableListItem(selection.dom));\n const getPartiallySelectedListItems = selection => filter$5(selection.getSelectedBlocks(), isEditableListItem(selection.dom));\n\n const each$8 = Tools.each;\n const isElementNode = node => isElement$6(node) && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus$1(node);\n const findElementSibling = (node, siblingName) => {\n for (let sibling = node; sibling; sibling = sibling[siblingName]) {\n if (isText$b(sibling) && isNotEmpty(sibling.data)) {\n return node;\n }\n if (isElement$6(sibling) && !isBookmarkNode$1(sibling)) {\n return sibling;\n }\n }\n return node;\n };\n const mergeSiblingsNodes = (editor, prev, next) => {\n const elementUtils = ElementUtils(editor);\n const isPrevEditable = isHTMLElement(prev) && editor.dom.isEditable(prev);\n const isNextEditable = isHTMLElement(next) && editor.dom.isEditable(next);\n if (isPrevEditable && isNextEditable) {\n const prevSibling = findElementSibling(prev, 'previousSibling');\n const nextSibling = findElementSibling(next, 'nextSibling');\n if (elementUtils.compare(prevSibling, nextSibling)) {\n for (let sibling = prevSibling.nextSibling; sibling && sibling !== nextSibling;) {\n const tmpSibling = sibling;\n sibling = sibling.nextSibling;\n prevSibling.appendChild(tmpSibling);\n }\n editor.dom.remove(nextSibling);\n Tools.each(Tools.grep(nextSibling.childNodes), node => {\n prevSibling.appendChild(node);\n });\n return prevSibling;\n }\n }\n return next;\n };\n const mergeSiblings = (editor, format, vars, node) => {\n var _a;\n if (node && format.merge_siblings !== false) {\n const newNode = (_a = mergeSiblingsNodes(editor, getNonWhiteSpaceSibling(node), node)) !== null && _a !== void 0 ? _a : node;\n mergeSiblingsNodes(editor, newNode, getNonWhiteSpaceSibling(newNode, true));\n }\n };\n const clearChildStyles = (dom, format, node) => {\n if (format.clear_child_styles) {\n const selector = format.links ? '*:not(a)' : '*';\n each$8(dom.select(selector, node), childNode => {\n if (isElementNode(childNode) && dom.isEditable(childNode)) {\n each$8(format.styles, (_value, name) => {\n dom.setStyle(childNode, name, '');\n });\n }\n });\n }\n };\n const processChildElements = (node, filter, process) => {\n each$8(node.childNodes, node => {\n if (isElementNode(node)) {\n if (filter(node)) {\n process(node);\n }\n if (node.hasChildNodes()) {\n processChildElements(node, filter, process);\n }\n }\n });\n };\n const unwrapEmptySpan = (dom, node) => {\n if (node.nodeName === 'SPAN' && dom.getAttribs(node).length === 0) {\n dom.remove(node, true);\n }\n };\n const hasStyle = (dom, name) => node => !!(node && getStyle(dom, node, name));\n const applyStyle = (dom, name, value) => node => {\n dom.setStyle(node, name, value);\n if (node.getAttribute('style') === '') {\n node.removeAttribute('style');\n }\n unwrapEmptySpan(dom, node);\n };\n\n const removeResult = Adt.generate([\n { keep: [] },\n { rename: ['name'] },\n { removed: [] }\n ]);\n const MCE_ATTR_RE = /^(src|href|style)$/;\n const each$7 = Tools.each;\n const isEq$2 = isEq$5;\n const isTableCellOrRow = node => /^(TR|TH|TD)$/.test(node.nodeName);\n const isChildOfInlineParent = (dom, node, parent) => dom.isChildOf(node, parent) && node !== parent && !dom.isBlock(parent);\n const getContainer = (ed, rng, start) => {\n let container = rng[start ? 'startContainer' : 'endContainer'];\n let offset = rng[start ? 'startOffset' : 'endOffset'];\n if (isElement$6(container)) {\n const lastIdx = container.childNodes.length - 1;\n if (!start && offset) {\n offset--;\n }\n container = container.childNodes[offset > lastIdx ? lastIdx : offset];\n }\n if (isText$b(container) && start && offset >= container.data.length) {\n container = new DomTreeWalker(container, ed.getBody()).next() || container;\n }\n if (isText$b(container) && !start && offset === 0) {\n container = new DomTreeWalker(container, ed.getBody()).prev() || container;\n }\n return container;\n };\n const normalizeTableSelection = (node, start) => {\n const prop = start ? 'firstChild' : 'lastChild';\n const childNode = node[prop];\n if (isTableCellOrRow(node) && childNode) {\n if (node.nodeName === 'TR') {\n return childNode[prop] || childNode;\n } else {\n return childNode;\n }\n }\n return node;\n };\n const wrap$1 = (dom, node, name, attrs) => {\n var _a;\n const wrapper = dom.create(name, attrs);\n (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(wrapper, node);\n wrapper.appendChild(node);\n return wrapper;\n };\n const wrapWithSiblings = (dom, node, next, name, attrs) => {\n const start = SugarElement.fromDom(node);\n const wrapper = SugarElement.fromDom(dom.create(name, attrs));\n const siblings = next ? nextSiblings(start) : prevSiblings(start);\n append(wrapper, siblings);\n if (next) {\n before$3(start, wrapper);\n prepend(wrapper, start);\n } else {\n after$4(start, wrapper);\n append$1(wrapper, start);\n }\n return wrapper.dom;\n };\n const isColorFormatAndAnchor = (node, format) => format.links && node.nodeName === 'A';\n const removeNode = (ed, node, format) => {\n const parentNode = node.parentNode;\n let rootBlockElm;\n const dom = ed.dom;\n const forcedRootBlock = getForcedRootBlock(ed);\n if (isBlockFormat(format)) {\n if (parentNode === dom.getRoot()) {\n if (!format.list_block || !isEq$2(node, format.list_block)) {\n each$e(from(node.childNodes), node => {\n if (isValid(ed, forcedRootBlock, node.nodeName.toLowerCase())) {\n if (!rootBlockElm) {\n rootBlockElm = wrap$1(dom, node, forcedRootBlock);\n dom.setAttribs(rootBlockElm, getForcedRootBlockAttrs(ed));\n } else {\n rootBlockElm.appendChild(node);\n }\n } else {\n rootBlockElm = null;\n }\n });\n }\n }\n }\n if (isMixedFormat(format) && !isEq$2(format.inline, node)) {\n return;\n }\n dom.remove(node, true);\n };\n const processFormatAttrOrStyle = (name, value, vars) => {\n if (isNumber(name)) {\n return {\n name: value,\n value: null\n };\n } else {\n return {\n name,\n value: replaceVars(value, vars)\n };\n }\n };\n const removeEmptyStyleAttributeIfNeeded = (dom, elm) => {\n if (dom.getAttrib(elm, 'style') === '') {\n elm.removeAttribute('style');\n elm.removeAttribute('data-mce-style');\n }\n };\n const removeStyles = (dom, elm, format, vars, compareNode) => {\n let stylesModified = false;\n each$7(format.styles, (value, name) => {\n const {\n name: styleName,\n value: styleValue\n } = processFormatAttrOrStyle(name, value, vars);\n const normalizedStyleValue = normalizeStyleValue(styleValue, styleName);\n if (format.remove_similar || isNull(styleValue) || !isElement$6(compareNode) || isEq$2(getStyle(dom, compareNode, styleName), normalizedStyleValue)) {\n dom.setStyle(elm, styleName, '');\n }\n stylesModified = true;\n });\n if (stylesModified) {\n removeEmptyStyleAttributeIfNeeded(dom, elm);\n }\n };\n const removeListStyleFormats = (editor, name, vars) => {\n if (name === 'removeformat') {\n each$e(getPartiallySelectedListItems(editor.selection), li => {\n each$e(listItemStyles, name => editor.dom.setStyle(li, name, ''));\n removeEmptyStyleAttributeIfNeeded(editor.dom, li);\n });\n } else {\n getExpandedListItemFormat(editor.formatter, name).each(liFmt => {\n each$e(getPartiallySelectedListItems(editor.selection), li => removeStyles(editor.dom, li, liFmt, vars, null));\n });\n }\n };\n const removeNodeFormatInternal = (ed, format, vars, node, compareNode) => {\n const dom = ed.dom;\n const elementUtils = ElementUtils(ed);\n const schema = ed.schema;\n if (isInlineFormat(format) && isTransparentElementName(schema, format.inline) && isTransparentBlock(schema, node) && node.parentElement === ed.getBody()) {\n removeNode(ed, node, format);\n return removeResult.removed();\n }\n if (!format.ceFalseOverride && node && dom.getContentEditableParent(node) === 'false') {\n return removeResult.keep();\n }\n if (node && !matchName(dom, node, format) && !isColorFormatAndAnchor(node, format)) {\n return removeResult.keep();\n }\n const elm = node;\n const preserveAttributes = format.preserve_attributes;\n if (isInlineFormat(format) && format.remove === 'all' && isArray$1(preserveAttributes)) {\n const attrsToPreserve = filter$5(dom.getAttribs(elm), attr => contains$2(preserveAttributes, attr.name.toLowerCase()));\n dom.removeAllAttribs(elm);\n each$e(attrsToPreserve, attr => dom.setAttrib(elm, attr.name, attr.value));\n if (attrsToPreserve.length > 0) {\n return removeResult.rename('span');\n }\n }\n if (format.remove !== 'all') {\n removeStyles(dom, elm, format, vars, compareNode);\n each$7(format.attributes, (value, name) => {\n const {\n name: attrName,\n value: attrValue\n } = processFormatAttrOrStyle(name, value, vars);\n if (format.remove_similar || isNull(attrValue) || !isElement$6(compareNode) || isEq$2(dom.getAttrib(compareNode, attrName), attrValue)) {\n if (attrName === 'class') {\n const currentValue = dom.getAttrib(elm, attrName);\n if (currentValue) {\n let valueOut = '';\n each$e(currentValue.split(/\\s+/), cls => {\n if (/mce\\-\\w+/.test(cls)) {\n valueOut += (valueOut ? ' ' : '') + cls;\n }\n });\n if (valueOut) {\n dom.setAttrib(elm, attrName, valueOut);\n return;\n }\n }\n }\n if (MCE_ATTR_RE.test(attrName)) {\n elm.removeAttribute('data-mce-' + attrName);\n }\n if (attrName === 'style' && matchNodeNames(['li'])(elm) && dom.getStyle(elm, 'list-style-type') === 'none') {\n elm.removeAttribute(attrName);\n dom.setStyle(elm, 'list-style-type', 'none');\n return;\n }\n if (attrName === 'class') {\n elm.removeAttribute('className');\n }\n elm.removeAttribute(attrName);\n }\n });\n each$7(format.classes, value => {\n value = replaceVars(value, vars);\n if (!isElement$6(compareNode) || dom.hasClass(compareNode, value)) {\n dom.removeClass(elm, value);\n }\n });\n const attrs = dom.getAttribs(elm);\n for (let i = 0; i < attrs.length; i++) {\n const attrName = attrs[i].nodeName;\n if (!elementUtils.isAttributeInternal(attrName)) {\n return removeResult.keep();\n }\n }\n }\n if (format.remove !== 'none') {\n removeNode(ed, elm, format);\n return removeResult.removed();\n }\n return removeResult.keep();\n };\n const findFormatRoot = (editor, container, name, vars, similar) => {\n let formatRoot;\n if (container.parentNode) {\n each$e(getParents$2(editor.dom, container.parentNode).reverse(), parent => {\n if (!formatRoot && isElement$6(parent) && parent.id !== '_start' && parent.id !== '_end') {\n const format = matchNode(editor, parent, name, vars, similar);\n if (format && format.split !== false) {\n formatRoot = parent;\n }\n }\n });\n }\n return formatRoot;\n };\n const removeNodeFormatFromClone = (editor, format, vars, clone) => removeNodeFormatInternal(editor, format, vars, clone, clone).fold(constant(clone), newName => {\n const fragment = editor.dom.createFragment();\n fragment.appendChild(clone);\n return editor.dom.rename(clone, newName);\n }, constant(null));\n const wrapAndSplit = (editor, formatList, formatRoot, container, target, split, format, vars) => {\n var _a, _b;\n let lastClone;\n let firstClone;\n const dom = editor.dom;\n if (formatRoot) {\n const formatRootParent = formatRoot.parentNode;\n for (let parent = container.parentNode; parent && parent !== formatRootParent; parent = parent.parentNode) {\n let clone = dom.clone(parent, false);\n for (let i = 0; i < formatList.length; i++) {\n clone = removeNodeFormatFromClone(editor, formatList[i], vars, clone);\n if (clone === null) {\n break;\n }\n }\n if (clone) {\n if (lastClone) {\n clone.appendChild(lastClone);\n }\n if (!firstClone) {\n firstClone = clone;\n }\n lastClone = clone;\n }\n }\n if (split && (!format.mixed || !dom.isBlock(formatRoot))) {\n container = (_a = dom.split(formatRoot, container)) !== null && _a !== void 0 ? _a : container;\n }\n if (lastClone && firstClone) {\n (_b = target.parentNode) === null || _b === void 0 ? void 0 : _b.insertBefore(lastClone, target);\n firstClone.appendChild(target);\n if (isInlineFormat(format)) {\n mergeSiblings(editor, format, vars, lastClone);\n }\n }\n }\n return container;\n };\n const removeFormatInternal = (ed, name, vars, node, similar) => {\n const formatList = ed.formatter.get(name);\n const format = formatList[0];\n const dom = ed.dom;\n const selection = ed.selection;\n const splitToFormatRoot = container => {\n const formatRoot = findFormatRoot(ed, container, name, vars, similar);\n return wrapAndSplit(ed, formatList, formatRoot, container, container, true, format, vars);\n };\n const isRemoveBookmarkNode = node => isBookmarkNode$1(node) && isElement$6(node) && (node.id === '_start' || node.id === '_end');\n const removeFormatOnNode = node => exists(formatList, fmt => removeNodeFormat(ed, fmt, vars, node, node));\n const process = node => {\n const children = from(node.childNodes);\n const removed = removeFormatOnNode(node);\n const currentNodeMatches = removed || exists(formatList, f => matchName(dom, node, f));\n const parentNode = node.parentNode;\n if (!currentNodeMatches && isNonNullable(parentNode) && shouldExpandToSelector(format)) {\n removeFormatOnNode(parentNode);\n }\n if (format.deep) {\n if (children.length) {\n for (let i = 0; i < children.length; i++) {\n process(children[i]);\n }\n }\n }\n const textDecorations = [\n 'underline',\n 'line-through',\n 'overline'\n ];\n each$e(textDecorations, decoration => {\n if (isElement$6(node) && ed.dom.getStyle(node, 'text-decoration') === decoration && node.parentNode && getTextDecoration(dom, node.parentNode) === decoration) {\n removeNodeFormat(ed, {\n deep: false,\n exact: true,\n inline: 'span',\n styles: { textDecoration: decoration }\n }, undefined, node);\n }\n });\n };\n const unwrap = start => {\n const node = dom.get(start ? '_start' : '_end');\n if (node) {\n let out = node[start ? 'firstChild' : 'lastChild'];\n if (isRemoveBookmarkNode(out)) {\n out = out[start ? 'firstChild' : 'lastChild'];\n }\n if (isText$b(out) && out.data.length === 0) {\n out = start ? node.previousSibling || node.nextSibling : node.nextSibling || node.previousSibling;\n }\n dom.remove(node, true);\n return out;\n } else {\n return null;\n }\n };\n const removeRngStyle = rng => {\n let startContainer;\n let endContainer;\n let expandedRng = expandRng(dom, rng, formatList, { includeTrailingSpace: rng.collapsed });\n if (format.split) {\n expandedRng = split(expandedRng);\n startContainer = getContainer(ed, expandedRng, true);\n endContainer = getContainer(ed, expandedRng);\n if (startContainer !== endContainer) {\n startContainer = normalizeTableSelection(startContainer, true);\n endContainer = normalizeTableSelection(endContainer, false);\n if (isChildOfInlineParent(dom, startContainer, endContainer)) {\n const marker = Optional.from(startContainer.firstChild).getOr(startContainer);\n splitToFormatRoot(wrapWithSiblings(dom, marker, true, 'span', {\n 'id': '_start',\n 'data-mce-type': 'bookmark'\n }));\n unwrap(true);\n return;\n }\n if (isChildOfInlineParent(dom, endContainer, startContainer)) {\n const marker = Optional.from(endContainer.lastChild).getOr(endContainer);\n splitToFormatRoot(wrapWithSiblings(dom, marker, false, 'span', {\n 'id': '_end',\n 'data-mce-type': 'bookmark'\n }));\n unwrap(false);\n return;\n }\n startContainer = wrap$1(dom, startContainer, 'span', {\n 'id': '_start',\n 'data-mce-type': 'bookmark'\n });\n endContainer = wrap$1(dom, endContainer, 'span', {\n 'id': '_end',\n 'data-mce-type': 'bookmark'\n });\n const newRng = dom.createRng();\n newRng.setStartAfter(startContainer);\n newRng.setEndBefore(endContainer);\n walk$3(dom, newRng, nodes => {\n each$e(nodes, n => {\n if (!isBookmarkNode$1(n) && !isBookmarkNode$1(n.parentNode)) {\n splitToFormatRoot(n);\n }\n });\n });\n splitToFormatRoot(startContainer);\n splitToFormatRoot(endContainer);\n startContainer = unwrap(true);\n endContainer = unwrap();\n } else {\n startContainer = endContainer = splitToFormatRoot(startContainer);\n }\n expandedRng.startContainer = startContainer.parentNode ? startContainer.parentNode : startContainer;\n expandedRng.startOffset = dom.nodeIndex(startContainer);\n expandedRng.endContainer = endContainer.parentNode ? endContainer.parentNode : endContainer;\n expandedRng.endOffset = dom.nodeIndex(endContainer) + 1;\n }\n walk$3(dom, expandedRng, nodes => {\n each$e(nodes, process);\n });\n };\n if (node) {\n if (isNode(node)) {\n const rng = dom.createRng();\n rng.setStartBefore(node);\n rng.setEndAfter(node);\n removeRngStyle(rng);\n } else {\n removeRngStyle(node);\n }\n fireFormatRemove(ed, name, node, vars);\n return;\n }\n if (!selection.isCollapsed() || !isInlineFormat(format) || getCellsFromEditor(ed).length) {\n preserveSelection(ed, () => runOnRanges(ed, removeRngStyle), startNode => isInlineFormat(format) && match$2(ed, name, vars, startNode));\n ed.nodeChanged();\n } else {\n removeCaretFormat(ed, name, vars, similar);\n }\n removeListStyleFormats(ed, name, vars);\n fireFormatRemove(ed, name, node, vars);\n };\n const removeFormat$1 = (ed, name, vars, node, similar) => {\n if (node || ed.selection.isEditable()) {\n removeFormatInternal(ed, name, vars, node, similar);\n }\n };\n const removeNodeFormat = (editor, format, vars, node, compareNode) => {\n return removeNodeFormatInternal(editor, format, vars, node, compareNode).fold(never, newName => {\n editor.dom.rename(node, newName);\n return true;\n }, always);\n };\n\n const each$6 = Tools.each;\n const mergeTextDecorationsAndColor = (dom, format, vars, node) => {\n const processTextDecorationsAndColor = n => {\n if (isHTMLElement(n) && isElement$6(n.parentNode) && dom.isEditable(n)) {\n const parentTextDecoration = getTextDecoration(dom, n.parentNode);\n if (dom.getStyle(n, 'color') && parentTextDecoration) {\n dom.setStyle(n, 'text-decoration', parentTextDecoration);\n } else if (dom.getStyle(n, 'text-decoration') === parentTextDecoration) {\n dom.setStyle(n, 'text-decoration', null);\n }\n }\n };\n if (format.styles && (format.styles.color || format.styles.textDecoration)) {\n Tools.walk(node, processTextDecorationsAndColor, 'childNodes');\n processTextDecorationsAndColor(node);\n }\n };\n const mergeBackgroundColorAndFontSize = (dom, format, vars, node) => {\n if (format.styles && format.styles.backgroundColor) {\n const hasFontSize = hasStyle(dom, 'fontSize');\n processChildElements(node, elm => hasFontSize(elm) && dom.isEditable(elm), applyStyle(dom, 'backgroundColor', replaceVars(format.styles.backgroundColor, vars)));\n }\n };\n const mergeSubSup = (dom, format, vars, node) => {\n if (isInlineFormat(format) && (format.inline === 'sub' || format.inline === 'sup')) {\n const hasFontSize = hasStyle(dom, 'fontSize');\n processChildElements(node, elm => hasFontSize(elm) && dom.isEditable(elm), applyStyle(dom, 'fontSize', ''));\n const inverseTagDescendants = filter$5(dom.select(format.inline === 'sup' ? 'sub' : 'sup', node), dom.isEditable);\n dom.remove(inverseTagDescendants, true);\n }\n };\n const mergeWithChildren = (editor, formatList, vars, node) => {\n each$6(formatList, format => {\n if (isInlineFormat(format)) {\n each$6(editor.dom.select(format.inline, node), child => {\n if (isElementNode(child)) {\n removeNodeFormat(editor, format, vars, child, format.exact ? child : null);\n }\n });\n }\n clearChildStyles(editor.dom, format, node);\n });\n };\n const mergeWithParents = (editor, format, name, vars, node) => {\n const parentNode = node.parentNode;\n if (matchNode(editor, parentNode, name, vars)) {\n if (removeNodeFormat(editor, format, vars, node)) {\n return;\n }\n }\n if (format.merge_with_parents && parentNode) {\n editor.dom.getParent(parentNode, parent => {\n if (matchNode(editor, parent, name, vars)) {\n removeNodeFormat(editor, format, vars, node);\n return true;\n } else {\n return false;\n }\n });\n }\n };\n\n const each$5 = Tools.each;\n const canFormatBR = (editor, format, node, parentName) => {\n if (canFormatEmptyLines(editor) && isInlineFormat(format) && node.parentNode) {\n const validBRParentElements = getTextRootBlockElements(editor.schema);\n const hasCaretNodeSibling = sibling(SugarElement.fromDom(node), sibling => isCaretNode(sibling.dom));\n return hasNonNullableKey(validBRParentElements, parentName) && isEmptyNode(editor.schema, node.parentNode, {\n skipBogus: false,\n includeZwsp: true\n }) && !hasCaretNodeSibling;\n } else {\n return false;\n }\n };\n const applyStyles = (dom, elm, format, vars) => {\n each$5(format.styles, (value, name) => {\n dom.setStyle(elm, name, replaceVars(value, vars));\n });\n if (format.styles) {\n const styleVal = dom.getAttrib(elm, 'style');\n if (styleVal) {\n dom.setAttrib(elm, 'data-mce-style', styleVal);\n }\n }\n };\n const applyFormatAction = (ed, name, vars, node) => {\n const formatList = ed.formatter.get(name);\n const format = formatList[0];\n const isCollapsed = !node && ed.selection.isCollapsed();\n const dom = ed.dom;\n const selection = ed.selection;\n const setElementFormat = (elm, fmt = format) => {\n if (isFunction(fmt.onformat)) {\n fmt.onformat(elm, fmt, vars, node);\n }\n applyStyles(dom, elm, fmt, vars);\n each$5(fmt.attributes, (value, name) => {\n dom.setAttrib(elm, name, replaceVars(value, vars));\n });\n each$5(fmt.classes, value => {\n const newValue = replaceVars(value, vars);\n if (!dom.hasClass(elm, newValue)) {\n dom.addClass(elm, newValue);\n }\n });\n };\n const applyNodeStyle = (formatList, node) => {\n let found = false;\n each$5(formatList, format => {\n if (!isSelectorFormat(format)) {\n return false;\n }\n if (dom.getContentEditable(node) === 'false' && !format.ceFalseOverride) {\n return true;\n }\n if (isNonNullable(format.collapsed) && format.collapsed !== isCollapsed) {\n return true;\n }\n if (dom.is(node, format.selector) && !isCaretNode(node)) {\n setElementFormat(node, format);\n found = true;\n return false;\n }\n return true;\n });\n return found;\n };\n const createWrapElement = wrapName => {\n if (isString(wrapName)) {\n const wrapElm = dom.create(wrapName);\n setElementFormat(wrapElm);\n return wrapElm;\n } else {\n return null;\n }\n };\n const applyRngStyle = (dom, rng, nodeSpecific) => {\n const newWrappers = [];\n let contentEditable = true;\n const wrapName = format.inline || format.block;\n const wrapElm = createWrapElement(wrapName);\n const isMatchingWrappingBlock = node => isWrappingBlockFormat(format) && matchNode(ed, node, name, vars);\n const canRenameBlock = (node, parentName, isEditableDescendant) => {\n const isValidBlockFormatForNode = isNonWrappingBlockFormat(format) && isTextBlock$1(ed.schema, node) && isValid(ed, parentName, wrapName);\n return isEditableDescendant && isValidBlockFormatForNode;\n };\n const canWrapNode = (node, parentName, isEditableDescendant, isWrappableNoneditableElm) => {\n const nodeName = node.nodeName.toLowerCase();\n const isValidWrapNode = isValid(ed, wrapName, nodeName) && isValid(ed, parentName, wrapName);\n const isZwsp$1 = !nodeSpecific && isText$b(node) && isZwsp(node.data);\n const isCaret = isCaretNode(node);\n const isCorrectFormatForNode = !isInlineFormat(format) || !dom.isBlock(node);\n return (isEditableDescendant || isWrappableNoneditableElm) && isValidWrapNode && !isZwsp$1 && !isCaret && isCorrectFormatForNode;\n };\n walk$3(dom, rng, nodes => {\n let currentWrapElm;\n const process = node => {\n let hasContentEditableState = false;\n let lastContentEditable = contentEditable;\n let isWrappableNoneditableElm = false;\n const parentNode = node.parentNode;\n const parentName = parentNode.nodeName.toLowerCase();\n const contentEditableValue = dom.getContentEditable(node);\n if (isNonNullable(contentEditableValue)) {\n lastContentEditable = contentEditable;\n contentEditable = contentEditableValue === 'true';\n hasContentEditableState = true;\n isWrappableNoneditableElm = isWrappableNoneditable(ed, node);\n }\n const isEditableDescendant = contentEditable && !hasContentEditableState;\n if (isBr$6(node) && !canFormatBR(ed, format, node, parentName)) {\n currentWrapElm = null;\n if (isBlockFormat(format)) {\n dom.remove(node);\n }\n return;\n }\n if (isMatchingWrappingBlock(node)) {\n currentWrapElm = null;\n return;\n }\n if (canRenameBlock(node, parentName, isEditableDescendant)) {\n const elm = dom.rename(node, wrapName);\n setElementFormat(elm);\n newWrappers.push(elm);\n currentWrapElm = null;\n return;\n }\n if (isSelectorFormat(format)) {\n let found = applyNodeStyle(formatList, node);\n if (!found && isNonNullable(parentNode) && shouldExpandToSelector(format)) {\n found = applyNodeStyle(formatList, parentNode);\n }\n if (!isInlineFormat(format) || found) {\n currentWrapElm = null;\n return;\n }\n }\n if (isNonNullable(wrapElm) && canWrapNode(node, parentName, isEditableDescendant, isWrappableNoneditableElm)) {\n if (!currentWrapElm) {\n currentWrapElm = dom.clone(wrapElm, false);\n parentNode.insertBefore(currentWrapElm, node);\n newWrappers.push(currentWrapElm);\n }\n if (isWrappableNoneditableElm && hasContentEditableState) {\n contentEditable = lastContentEditable;\n }\n currentWrapElm.appendChild(node);\n } else {\n currentWrapElm = null;\n each$e(from(node.childNodes), process);\n if (hasContentEditableState) {\n contentEditable = lastContentEditable;\n }\n currentWrapElm = null;\n }\n };\n each$e(nodes, process);\n });\n if (format.links === true) {\n each$e(newWrappers, node => {\n const process = node => {\n if (node.nodeName === 'A') {\n setElementFormat(node, format);\n }\n each$e(from(node.childNodes), process);\n };\n process(node);\n });\n }\n each$e(newWrappers, node => {\n const getChildCount = node => {\n let count = 0;\n each$e(node.childNodes, node => {\n if (!isEmptyTextNode$1(node) && !isBookmarkNode$1(node)) {\n count++;\n }\n });\n return count;\n };\n const mergeStyles = node => {\n const childElement = find$2(node.childNodes, isElementNode$1).filter(child => dom.getContentEditable(child) !== 'false' && matchName(dom, child, format));\n return childElement.map(child => {\n const clone = dom.clone(child, false);\n setElementFormat(clone);\n dom.replace(clone, node, true);\n dom.remove(child, true);\n return clone;\n }).getOr(node);\n };\n const childCount = getChildCount(node);\n if ((newWrappers.length > 1 || !dom.isBlock(node)) && childCount === 0) {\n dom.remove(node, true);\n return;\n }\n if (isInlineFormat(format) || isBlockFormat(format) && format.wrapper) {\n if (!format.exact && childCount === 1) {\n node = mergeStyles(node);\n }\n mergeWithChildren(ed, formatList, vars, node);\n mergeWithParents(ed, format, name, vars, node);\n mergeBackgroundColorAndFontSize(dom, format, vars, node);\n mergeTextDecorationsAndColor(dom, format, vars, node);\n mergeSubSup(dom, format, vars, node);\n mergeSiblings(ed, format, vars, node);\n }\n });\n };\n const targetNode = isNode(node) ? node : selection.getNode();\n if (dom.getContentEditable(targetNode) === 'false' && !isWrappableNoneditable(ed, targetNode)) {\n node = targetNode;\n applyNodeStyle(formatList, node);\n fireFormatApply(ed, name, node, vars);\n return;\n }\n if (format) {\n if (node) {\n if (isNode(node)) {\n if (!applyNodeStyle(formatList, node)) {\n const rng = dom.createRng();\n rng.setStartBefore(node);\n rng.setEndAfter(node);\n applyRngStyle(dom, expandRng(dom, rng, formatList), true);\n }\n } else {\n applyRngStyle(dom, node, true);\n }\n } else {\n if (!isCollapsed || !isInlineFormat(format) || getCellsFromEditor(ed).length) {\n selection.setRng(normalize(selection.getRng()));\n preserveSelection(ed, () => {\n runOnRanges(ed, (selectionRng, fake) => {\n const expandedRng = fake ? selectionRng : expandRng(dom, selectionRng, formatList);\n applyRngStyle(dom, expandedRng, false);\n });\n }, always);\n ed.nodeChanged();\n } else {\n applyCaretFormat(ed, name, vars);\n }\n getExpandedListItemFormat(ed.formatter, name).each(liFmt => {\n each$e(getFullySelectedListItems(ed.selection), li => applyStyles(dom, li, liFmt, vars));\n });\n }\n postProcess$1(name, ed);\n }\n fireFormatApply(ed, name, node, vars);\n };\n const applyFormat$1 = (editor, name, vars, node) => {\n if (node || editor.selection.isEditable()) {\n applyFormatAction(editor, name, vars, node);\n }\n };\n\n const hasVars = value => has$2(value, 'vars');\n const setup$u = (registeredFormatListeners, editor) => {\n registeredFormatListeners.set({});\n editor.on('NodeChange', e => {\n updateAndFireChangeCallbacks(editor, e.element, registeredFormatListeners.get());\n });\n editor.on('FormatApply FormatRemove', e => {\n const element = Optional.from(e.node).map(nodeOrRange => isNode(nodeOrRange) ? nodeOrRange : nodeOrRange.startContainer).bind(node => isElement$6(node) ? Optional.some(node) : Optional.from(node.parentElement)).getOrThunk(() => fallbackElement(editor));\n updateAndFireChangeCallbacks(editor, element, registeredFormatListeners.get());\n });\n };\n const fallbackElement = editor => editor.selection.getStart();\n const matchingNode = (editor, parents, format, similar, vars) => {\n const isMatchingNode = node => {\n const matchingFormat = editor.formatter.matchNode(node, format, vars !== null && vars !== void 0 ? vars : {}, similar);\n return !isUndefined(matchingFormat);\n };\n const isUnableToMatch = node => {\n if (matchesUnInheritedFormatSelector(editor, node, format)) {\n return true;\n } else {\n if (!similar) {\n return isNonNullable(editor.formatter.matchNode(node, format, vars, true));\n } else {\n return false;\n }\n }\n };\n return findUntil$1(parents, isMatchingNode, isUnableToMatch);\n };\n const getParents = (editor, elm) => {\n const element = elm !== null && elm !== void 0 ? elm : fallbackElement(editor);\n return filter$5(getParents$2(editor.dom, element), node => isElement$6(node) && !isBogus$1(node));\n };\n const updateAndFireChangeCallbacks = (editor, elm, registeredCallbacks) => {\n const parents = getParents(editor, elm);\n each$d(registeredCallbacks, (data, format) => {\n const runIfChanged = spec => {\n const match = matchingNode(editor, parents, format, spec.similar, hasVars(spec) ? spec.vars : undefined);\n const isSet = match.isSome();\n if (spec.state.get() !== isSet) {\n spec.state.set(isSet);\n const node = match.getOr(elm);\n if (hasVars(spec)) {\n spec.callback(isSet, {\n node,\n format,\n parents\n });\n } else {\n each$e(spec.callbacks, callback => callback(isSet, {\n node,\n format,\n parents\n }));\n }\n }\n };\n each$e([\n data.withSimilar,\n data.withoutSimilar\n ], runIfChanged);\n each$e(data.withVars, runIfChanged);\n });\n };\n const addListeners = (editor, registeredFormatListeners, formats, callback, similar, vars) => {\n const formatChangeItems = registeredFormatListeners.get();\n each$e(formats.split(','), format => {\n const group = get$a(formatChangeItems, format).getOrThunk(() => {\n const base = {\n withSimilar: {\n state: Cell(false),\n similar: true,\n callbacks: []\n },\n withoutSimilar: {\n state: Cell(false),\n similar: false,\n callbacks: []\n },\n withVars: []\n };\n formatChangeItems[format] = base;\n return base;\n });\n const getCurrent = () => {\n const parents = getParents(editor);\n return matchingNode(editor, parents, format, similar, vars).isSome();\n };\n if (isUndefined(vars)) {\n const toAppendTo = similar ? group.withSimilar : group.withoutSimilar;\n toAppendTo.callbacks.push(callback);\n if (toAppendTo.callbacks.length === 1) {\n toAppendTo.state.set(getCurrent());\n }\n } else {\n group.withVars.push({\n state: Cell(getCurrent()),\n similar,\n vars,\n callback\n });\n }\n });\n registeredFormatListeners.set(formatChangeItems);\n };\n const removeListeners = (registeredFormatListeners, formats, callback) => {\n const formatChangeItems = registeredFormatListeners.get();\n each$e(formats.split(','), format => get$a(formatChangeItems, format).each(group => {\n formatChangeItems[format] = {\n withSimilar: {\n ...group.withSimilar,\n callbacks: filter$5(group.withSimilar.callbacks, cb => cb !== callback)\n },\n withoutSimilar: {\n ...group.withoutSimilar,\n callbacks: filter$5(group.withoutSimilar.callbacks, cb => cb !== callback)\n },\n withVars: filter$5(group.withVars, item => item.callback !== callback)\n };\n }));\n registeredFormatListeners.set(formatChangeItems);\n };\n const formatChangedInternal = (editor, registeredFormatListeners, formats, callback, similar, vars) => {\n addListeners(editor, registeredFormatListeners, formats, callback, similar, vars);\n return { unbind: () => removeListeners(registeredFormatListeners, formats, callback) };\n };\n\n const toggle = (editor, name, vars, node) => {\n const fmt = editor.formatter.get(name);\n if (fmt) {\n if (match$2(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) {\n removeFormat$1(editor, name, vars, node);\n } else {\n applyFormat$1(editor, name, vars, node);\n }\n }\n };\n\n const explode$1 = Tools.explode;\n const create$8 = () => {\n const filters = {};\n const addFilter = (name, callback) => {\n each$e(explode$1(name), name => {\n if (!has$2(filters, name)) {\n filters[name] = {\n name,\n callbacks: []\n };\n }\n filters[name].callbacks.push(callback);\n });\n };\n const getFilters = () => values(filters);\n const removeFilter = (name, callback) => {\n each$e(explode$1(name), name => {\n if (has$2(filters, name)) {\n if (isNonNullable(callback)) {\n const filter = filters[name];\n const newCallbacks = filter$5(filter.callbacks, c => c !== callback);\n if (newCallbacks.length > 0) {\n filter.callbacks = newCallbacks;\n } else {\n delete filters[name];\n }\n } else {\n delete filters[name];\n }\n }\n });\n };\n return {\n addFilter,\n getFilters,\n removeFilter\n };\n };\n\n const removeAttrs = (node, names) => {\n each$e(names, name => {\n node.attr(name, null);\n });\n };\n const addFontToSpansFilter = (domParser, styles, fontSizes) => {\n domParser.addNodeFilter('font', nodes => {\n each$e(nodes, node => {\n const props = styles.parse(node.attr('style'));\n const color = node.attr('color');\n const face = node.attr('face');\n const size = node.attr('size');\n if (color) {\n props.color = color;\n }\n if (face) {\n props['font-family'] = face;\n }\n if (size) {\n toInt(size).each(num => {\n props['font-size'] = fontSizes[num - 1];\n });\n }\n node.name = 'span';\n node.attr('style', styles.serialize(props));\n removeAttrs(node, [\n 'color',\n 'face',\n 'size'\n ]);\n });\n });\n };\n const addStrikeFilter = (domParser, schema, styles) => {\n domParser.addNodeFilter('strike', nodes => {\n const convertToSTag = schema.type !== 'html4';\n each$e(nodes, node => {\n if (convertToSTag) {\n node.name = 's';\n } else {\n const props = styles.parse(node.attr('style'));\n props['text-decoration'] = 'line-through';\n node.name = 'span';\n node.attr('style', styles.serialize(props));\n }\n });\n });\n };\n const addFilters = (domParser, settings, schema) => {\n var _a;\n const styles = Styles();\n if (settings.convert_fonts_to_spans) {\n addFontToSpansFilter(domParser, styles, Tools.explode((_a = settings.font_size_legacy_values) !== null && _a !== void 0 ? _a : ''));\n }\n addStrikeFilter(domParser, schema, styles);\n };\n const register$5 = (domParser, settings, schema) => {\n if (settings.inline_styles) {\n addFilters(domParser, settings, schema);\n }\n };\n\n const blobUriToBlob = url => fetch(url).then(res => res.ok ? res.blob() : Promise.reject()).catch(() => Promise.reject({\n message: `Cannot convert ${ url } to Blob. Resource might not exist or is inaccessible.`,\n uriType: 'blob'\n }));\n const extractBase64Data = data => {\n const matches = /([a-z0-9+\\/=\\s]+)/i.exec(data);\n return matches ? matches[1] : '';\n };\n const decodeData = data => {\n try {\n return decodeURIComponent(data);\n } catch (_a) {\n return data;\n }\n };\n const parseDataUri = uri => {\n const [type, ...rest] = uri.split(',');\n const data = rest.join(',');\n const matches = /data:([^/]+\\/[^;]+)(;.+)?/.exec(type);\n if (matches) {\n const base64Encoded = matches[2] === ';base64';\n const decodedData = decodeData(data);\n const extractedData = base64Encoded ? extractBase64Data(decodedData) : decodedData;\n return Optional.some({\n type: matches[1],\n data: extractedData,\n base64Encoded\n });\n } else {\n return Optional.none();\n }\n };\n const buildBlob = (type, data, base64Encoded = true) => {\n let str = data;\n if (base64Encoded) {\n try {\n str = atob(data);\n } catch (_a) {\n return Optional.none();\n }\n }\n const arr = new Uint8Array(str.length);\n for (let i = 0; i < arr.length; i++) {\n arr[i] = str.charCodeAt(i);\n }\n return Optional.some(new Blob([arr], { type }));\n };\n const dataUriToBlob = uri => {\n return new Promise((resolve, reject) => {\n parseDataUri(uri).bind(({type, data, base64Encoded}) => buildBlob(type, data, base64Encoded)).fold(() => reject('Invalid data URI'), resolve);\n });\n };\n const uriToBlob = url => {\n if (startsWith(url, 'blob:')) {\n return blobUriToBlob(url);\n } else if (startsWith(url, 'data:')) {\n return dataUriToBlob(url);\n } else {\n return Promise.reject('Unknown URI format');\n }\n };\n const blobToDataUri = blob => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n resolve(reader.result);\n };\n reader.onerror = () => {\n var _a;\n reject((_a = reader.error) === null || _a === void 0 ? void 0 : _a.message);\n };\n reader.readAsDataURL(blob);\n });\n };\n\n let count$1 = 0;\n const uniqueId$1 = prefix => {\n return (prefix || 'blobid') + count$1++;\n };\n const processDataUri = (dataUri, base64Only, generateBlobInfo) => {\n return parseDataUri(dataUri).bind(({data, type, base64Encoded}) => {\n if (base64Only && !base64Encoded) {\n return Optional.none();\n } else {\n const base64 = base64Encoded ? data : btoa(data);\n return generateBlobInfo(base64, type);\n }\n });\n };\n const createBlobInfo$1 = (blobCache, blob, base64) => {\n const blobInfo = blobCache.create(uniqueId$1(), blob, base64);\n blobCache.add(blobInfo);\n return blobInfo;\n };\n const dataUriToBlobInfo = (blobCache, dataUri, base64Only = false) => {\n return processDataUri(dataUri, base64Only, (base64, type) => Optional.from(blobCache.getByData(base64, type)).orThunk(() => buildBlob(type, base64).map(blob => createBlobInfo$1(blobCache, blob, base64))));\n };\n const imageToBlobInfo = (blobCache, imageSrc) => {\n const invalidDataUri = () => Promise.reject('Invalid data URI');\n if (startsWith(imageSrc, 'blob:')) {\n const blobInfo = blobCache.getByUri(imageSrc);\n if (isNonNullable(blobInfo)) {\n return Promise.resolve(blobInfo);\n } else {\n return uriToBlob(imageSrc).then(blob => {\n return blobToDataUri(blob).then(dataUri => {\n return processDataUri(dataUri, false, base64 => {\n return Optional.some(createBlobInfo$1(blobCache, blob, base64));\n }).getOrThunk(invalidDataUri);\n });\n });\n }\n } else if (startsWith(imageSrc, 'data:')) {\n return dataUriToBlobInfo(blobCache, imageSrc).fold(invalidDataUri, blobInfo => Promise.resolve(blobInfo));\n } else {\n return Promise.reject('Unknown image data format');\n }\n };\n\n const hostCaptureRegex = /^(?:(?:(?:[A-Za-z][A-Za-z\\d.+-]{0,14}:\\/\\/(?:[-.~*+=!&;:'%@?^${}(),\\w]+@)?|www\\.|[-;:&=+$,.\\w]+@)([A-Za-z\\d-]+(?:\\.[A-Za-z\\d-]+)*))(?::\\d+)?(?:\\/(?:[-.~*+=!;:'%@$(),\\/\\w]*[-~*+=%@$()\\/\\w])?)?(?:\\?(?:[-.~*+=!&;:'%@?^${}(),\\/\\w]+)?)?(?:#(?:[-.~*+=!&;:'%@?^${}(),\\/\\w]+)?)?)$/;\n const extractHost = url => Optional.from(url.match(hostCaptureRegex)).bind(ms => get$b(ms, 1)).map(h => startsWith(h, 'www.') ? h.substring(4) : h);\n\n const sandboxIframe = (iframeNode, exclusions) => {\n if (Optional.from(iframeNode.attr('src')).bind(extractHost).forall(host => !contains$2(exclusions, host))) {\n iframeNode.attr('sandbox', '');\n }\n };\n const isMimeType = (mime, type) => startsWith(mime, `${ type }/`);\n const getEmbedType = type => {\n if (isUndefined(type)) {\n return 'iframe';\n } else if (isMimeType(type, 'image')) {\n return 'img';\n } else if (isMimeType(type, 'video')) {\n return 'video';\n } else if (isMimeType(type, 'audio')) {\n return 'audio';\n } else {\n return 'iframe';\n }\n };\n const createSafeEmbed = ({type, src, width, height} = {}, sandboxIframes, sandboxIframesExclusions) => {\n const name = getEmbedType(type);\n const embed = new AstNode(name, 1);\n embed.attr(name === 'audio' ? { src } : {\n src,\n width,\n height\n });\n if (name === 'audio' || name === 'video') {\n embed.attr('controls', '');\n }\n if (name === 'iframe' && sandboxIframes) {\n sandboxIframe(embed, sandboxIframesExclusions);\n }\n return embed;\n };\n\n const isBogusImage = img => isNonNullable(img.attr('data-mce-bogus'));\n const isInternalImageSource = img => img.attr('src') === Env.transparentSrc || isNonNullable(img.attr('data-mce-placeholder'));\n const registerBase64ImageFilter = (parser, settings) => {\n const {blob_cache: blobCache} = settings;\n if (blobCache) {\n const processImage = img => {\n const inputSrc = img.attr('src');\n if (isInternalImageSource(img) || isBogusImage(img) || isNullable(inputSrc)) {\n return;\n }\n dataUriToBlobInfo(blobCache, inputSrc, true).each(blobInfo => {\n img.attr('src', blobInfo.blobUri());\n });\n };\n parser.addAttributeFilter('src', nodes => each$e(nodes, processImage));\n }\n };\n const register$4 = (parser, settings) => {\n var _a, _b;\n const schema = parser.schema;\n parser.addAttributeFilter('href', nodes => {\n let i = nodes.length;\n const appendRel = rel => {\n const parts = rel.split(' ').filter(p => p.length > 0);\n return parts.concat(['noopener']).sort().join(' ');\n };\n const addNoOpener = rel => {\n const newRel = rel ? Tools.trim(rel) : '';\n if (!/\\b(noopener)\\b/g.test(newRel)) {\n return appendRel(newRel);\n } else {\n return newRel;\n }\n };\n if (!settings.allow_unsafe_link_target) {\n while (i--) {\n const node = nodes[i];\n if (node.name === 'a' && node.attr('target') === '_blank') {\n node.attr('rel', addNoOpener(node.attr('rel')));\n }\n }\n }\n });\n if (!settings.allow_html_in_named_anchor) {\n parser.addAttributeFilter('id,name', nodes => {\n let i = nodes.length, sibling, prevSibling, parent, node;\n while (i--) {\n node = nodes[i];\n if (node.name === 'a' && node.firstChild && !node.attr('href')) {\n parent = node.parent;\n sibling = node.lastChild;\n while (sibling && parent) {\n prevSibling = sibling.prev;\n parent.insert(sibling, node);\n sibling = prevSibling;\n }\n }\n }\n });\n }\n if (settings.fix_list_elements) {\n parser.addNodeFilter('ul,ol', nodes => {\n let i = nodes.length, node, parentNode;\n while (i--) {\n node = nodes[i];\n parentNode = node.parent;\n if (parentNode && (parentNode.name === 'ul' || parentNode.name === 'ol')) {\n if (node.prev && node.prev.name === 'li') {\n node.prev.append(node);\n } else {\n const li = new AstNode('li', 1);\n li.attr('style', 'list-style-type: none');\n node.wrap(li);\n }\n }\n }\n });\n }\n const validClasses = schema.getValidClasses();\n if (settings.validate && validClasses) {\n parser.addAttributeFilter('class', nodes => {\n var _a;\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n const clazz = (_a = node.attr('class')) !== null && _a !== void 0 ? _a : '';\n const classList = Tools.explode(clazz, ' ');\n let classValue = '';\n for (let ci = 0; ci < classList.length; ci++) {\n const className = classList[ci];\n let valid = false;\n let validClassesMap = validClasses['*'];\n if (validClassesMap && validClassesMap[className]) {\n valid = true;\n }\n validClassesMap = validClasses[node.name];\n if (!valid && validClassesMap && validClassesMap[className]) {\n valid = true;\n }\n if (valid) {\n if (classValue) {\n classValue += ' ';\n }\n classValue += className;\n }\n }\n if (!classValue.length) {\n classValue = null;\n }\n node.attr('class', classValue);\n }\n });\n }\n registerBase64ImageFilter(parser, settings);\n const shouldSandboxIframes = (_a = settings.sandbox_iframes) !== null && _a !== void 0 ? _a : false;\n const sandboxIframesExclusions = unique$1((_b = settings.sandbox_iframes_exclusions) !== null && _b !== void 0 ? _b : []);\n if (settings.convert_unsafe_embeds) {\n parser.addNodeFilter('object,embed', nodes => each$e(nodes, node => {\n node.replace(createSafeEmbed({\n type: node.attr('type'),\n src: node.name === 'object' ? node.attr('data') : node.attr('src'),\n width: node.attr('width'),\n height: node.attr('height')\n }, shouldSandboxIframes, sandboxIframesExclusions));\n }));\n }\n if (shouldSandboxIframes) {\n parser.addNodeFilter('iframe', nodes => each$e(nodes, node => sandboxIframe(node, sandboxIframesExclusions)));\n }\n };\n\n /*! @license DOMPurify 3.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 (_a) {\n return unescape(encodedUri);\n }\n };\n const isInvalidUri = (settings, uri, tagName) => {\n const decodedUri = decodeUri(uri).replace(/\\s/g, '');\n if (settings.allow_script_urls) {\n return false;\n } else if (/((java|vb)script|mhtml):/i.test(decodedUri)) {\n return true;\n } else if (settings.allow_html_data_urls) {\n return false;\n } else if (/^data:image\\//i.test(decodedUri)) {\n return blockSvgDataUris(settings.allow_svg_data_urls, tagName) && /^data:image\\/svg\\+xml/i.test(decodedUri);\n } else {\n return /^data:/i.test(decodedUri);\n }\n };\n class URI {\n static parseDataUri(uri) {\n let type;\n const uriComponents = decodeURIComponent(uri).split(',');\n const matches = /data:([^;]+)/.exec(uriComponents[0]);\n if (matches) {\n type = matches[1];\n }\n return {\n type,\n data: uriComponents[1]\n };\n }\n static isDomSafe(uri, context, options = {}) {\n if (options.allow_script_urls) {\n return true;\n } else {\n const decodedUri = Entities.decode(uri).replace(/[\\s\\u0000-\\u001F]+/g, '');\n return !isInvalidUri(options, decodedUri, context);\n }\n }\n static getDocumentBaseUrl(loc) {\n var _a;\n let baseUrl;\n if (loc.protocol.indexOf('http') !== 0 && loc.protocol !== 'file:') {\n baseUrl = (_a = loc.href) !== null && _a !== void 0 ? _a : '';\n } else {\n baseUrl = loc.protocol + '//' + loc.host + loc.pathname;\n }\n if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(baseUrl)) {\n baseUrl = baseUrl.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n if (!/[\\/\\\\]$/.test(baseUrl)) {\n baseUrl += '/';\n }\n }\n return baseUrl;\n }\n constructor(url, settings = {}) {\n this.path = '';\n this.directory = '';\n url = trim(url);\n this.settings = settings;\n const baseUri = settings.base_uri;\n const self = this;\n if (/^([\\w\\-]+):([^\\/]{2})/i.test(url) || /^\\s*#/.test(url)) {\n self.source = url;\n return;\n }\n const isProtocolRelative = url.indexOf('//') === 0;\n if (url.indexOf('/') === 0 && !isProtocolRelative) {\n url = (baseUri ? baseUri.protocol || 'http' : 'http') + '://mce_host' + url;\n }\n if (!/^[\\w\\-]*:?\\/\\//.test(url)) {\n const baseUrl = baseUri ? baseUri.path : new URI(document.location.href).directory;\n if ((baseUri === null || baseUri === void 0 ? void 0 : baseUri.protocol) === '') {\n url = '//mce_host' + self.toAbsPath(baseUrl, url);\n } else {\n const match = /([^#?]*)([#?]?.*)/.exec(url);\n if (match) {\n url = (baseUri && baseUri.protocol || 'http') + '://mce_host' + self.toAbsPath(baseUrl, match[1]) + match[2];\n }\n }\n }\n url = url.replace(/@@/g, '(mce_at)');\n const urlMatch = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@\\/]*):?([^:@\\/]*))?@)?(\\[[a-zA-Z0-9:.%]+\\]|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/.exec(url);\n if (urlMatch) {\n each$4(queryParts, (v, i) => {\n let part = urlMatch[i];\n if (part) {\n part = part.replace(/\\(mce_at\\)/g, '@@');\n }\n self[v] = part;\n });\n }\n if (baseUri) {\n if (!self.protocol) {\n self.protocol = baseUri.protocol;\n }\n if (!self.userInfo) {\n self.userInfo = baseUri.userInfo;\n }\n if (!self.port && self.host === 'mce_host') {\n self.port = baseUri.port;\n }\n if (!self.host || self.host === 'mce_host') {\n self.host = baseUri.host;\n }\n self.source = '';\n }\n if (isProtocolRelative) {\n self.protocol = '';\n }\n }\n setPath(path) {\n const pathMatch = /^(.*?)\\/?(\\w+)?$/.exec(path);\n if (pathMatch) {\n this.path = pathMatch[0];\n this.directory = pathMatch[1];\n this.file = pathMatch[2];\n }\n this.source = '';\n this.getURI();\n }\n toRelative(uri) {\n if (uri === './') {\n return uri;\n }\n const relativeUri = new URI(uri, { base_uri: this });\n if (relativeUri.host !== 'mce_host' && this.host !== relativeUri.host && relativeUri.host || this.port !== relativeUri.port || this.protocol !== relativeUri.protocol && relativeUri.protocol !== '') {\n return relativeUri.getURI();\n }\n const tu = this.getURI(), uu = relativeUri.getURI();\n if (tu === uu || tu.charAt(tu.length - 1) === '/' && tu.substr(0, tu.length - 1) === uu) {\n return tu;\n }\n let output = this.toRelPath(this.path, relativeUri.path);\n if (relativeUri.query) {\n output += '?' + relativeUri.query;\n }\n if (relativeUri.anchor) {\n output += '#' + relativeUri.anchor;\n }\n return output;\n }\n toAbsolute(uri, noHost) {\n const absoluteUri = new URI(uri, { base_uri: this });\n return absoluteUri.getURI(noHost && this.isSameOrigin(absoluteUri));\n }\n isSameOrigin(uri) {\n if (this.host == uri.host && this.protocol == uri.protocol) {\n if (this.port == uri.port) {\n return true;\n }\n const defaultPort = this.protocol ? DEFAULT_PORTS[this.protocol] : null;\n if (defaultPort && (this.port || defaultPort) == (uri.port || defaultPort)) {\n return true;\n }\n }\n return false;\n }\n toRelPath(base, path) {\n let breakPoint = 0, out = '', i, l;\n const normalizedBase = base.substring(0, base.lastIndexOf('/')).split('/');\n const items = path.split('/');\n if (normalizedBase.length >= items.length) {\n for (i = 0, l = normalizedBase.length; i < l; i++) {\n if (i >= items.length || normalizedBase[i] !== items[i]) {\n breakPoint = i + 1;\n break;\n }\n }\n }\n if (normalizedBase.length < items.length) {\n for (i = 0, l = items.length; i < l; i++) {\n if (i >= normalizedBase.length || normalizedBase[i] !== items[i]) {\n breakPoint = i + 1;\n break;\n }\n }\n }\n if (breakPoint === 1) {\n return path;\n }\n for (i = 0, l = normalizedBase.length - (breakPoint - 1); i < l; i++) {\n out += '../';\n }\n for (i = breakPoint - 1, l = items.length; i < l; i++) {\n if (i !== breakPoint - 1) {\n out += '/' + items[i];\n } else {\n out += items[i];\n }\n }\n return out;\n }\n toAbsPath(base, path) {\n let nb = 0;\n const tr = /\\/$/.test(path) ? '/' : '';\n const normalizedBase = base.split('/');\n const normalizedPath = path.split('/');\n const baseParts = [];\n each$4(normalizedBase, k => {\n if (k) {\n baseParts.push(k);\n }\n });\n const pathParts = [];\n for (let i = normalizedPath.length - 1; i >= 0; i--) {\n if (normalizedPath[i].length === 0 || normalizedPath[i] === '.') {\n continue;\n }\n if (normalizedPath[i] === '..') {\n nb++;\n continue;\n }\n if (nb > 0) {\n nb--;\n continue;\n }\n pathParts.push(normalizedPath[i]);\n }\n const i = baseParts.length - nb;\n let outPath;\n if (i <= 0) {\n outPath = reverse(pathParts).join('/');\n } else {\n outPath = baseParts.slice(0, i).join('/') + '/' + reverse(pathParts).join('/');\n }\n if (outPath.indexOf('/') !== 0) {\n outPath = '/' + outPath;\n }\n if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) {\n outPath += tr;\n }\n return outPath;\n }\n getURI(noProtoHost = false) {\n let s;\n if (!this.source || noProtoHost) {\n s = '';\n if (!noProtoHost) {\n if (this.protocol) {\n s += this.protocol + '://';\n } else {\n s += '//';\n }\n if (this.userInfo) {\n s += this.userInfo + '@';\n }\n if (this.host) {\n s += this.host;\n }\n if (this.port) {\n s += ':' + this.port;\n }\n }\n if (this.path) {\n s += this.path;\n }\n if (this.query) {\n s += '?' + this.query;\n }\n if (this.anchor) {\n s += '#' + this.anchor;\n }\n this.source = s;\n }\n return this.source;\n }\n }\n\n const filteredUrlAttrs = Tools.makeMap('src,href,data,background,action,formaction,poster,xlink:href');\n const internalElementAttr = 'data-mce-type';\n let uid = 0;\n const processNode = (node, settings, schema, scope, evt) => {\n var _a, _b, _c, _d;\n const validate = settings.validate;\n const specialElements = schema.getSpecialElements();\n if (node.nodeType === COMMENT && !settings.allow_conditional_comments && /^\\[if/i.test((_a = node.nodeValue) !== null && _a !== void 0 ? _a : '')) {\n node.nodeValue = ' ' + node.nodeValue;\n }\n const lcTagName = (_b = evt === null || evt === void 0 ? void 0 : evt.tagName) !== null && _b !== void 0 ? _b : node.nodeName.toLowerCase();\n if (scope !== 'html' && schema.isValid(scope)) {\n if (isNonNullable(evt)) {\n evt.allowedTags[lcTagName] = true;\n }\n return;\n }\n if (node.nodeType !== ELEMENT || lcTagName === 'body') {\n return;\n }\n const element = SugarElement.fromDom(node);\n const isInternalElement = has$1(element, internalElementAttr);\n const bogus = get$9(element, 'data-mce-bogus');\n if (!isInternalElement && isString(bogus)) {\n if (bogus === 'all') {\n remove$4(element);\n } else {\n unwrap(element);\n }\n return;\n }\n const rule = schema.getElementRule(lcTagName);\n if (validate && !rule) {\n if (has$2(specialElements, lcTagName)) {\n remove$4(element);\n } else {\n unwrap(element);\n }\n return;\n } else {\n if (isNonNullable(evt)) {\n evt.allowedTags[lcTagName] = true;\n }\n }\n if (validate && rule && !isInternalElement) {\n each$e((_c = rule.attributesForced) !== null && _c !== void 0 ? _c : [], attr => {\n set$4(element, attr.name, attr.value === '{$uid}' ? `mce_${ uid++ }` : attr.value);\n });\n each$e((_d = rule.attributesDefault) !== null && _d !== void 0 ? _d : [], attr => {\n if (!has$1(element, attr.name)) {\n set$4(element, attr.name, attr.value === '{$uid}' ? `mce_${ uid++ }` : attr.value);\n }\n });\n if (rule.attributesRequired && !exists(rule.attributesRequired, attr => has$1(element, attr))) {\n unwrap(element);\n return;\n }\n if (rule.removeEmptyAttrs && hasNone(element)) {\n unwrap(element);\n return;\n }\n if (rule.outputName && rule.outputName !== lcTagName) {\n mutate(element, rule.outputName);\n }\n }\n };\n const processAttr = (ele, settings, schema, scope, evt) => {\n const tagName = ele.tagName.toLowerCase();\n const {attrName, attrValue} = evt;\n evt.keepAttr = shouldKeepAttribute(settings, schema, scope, tagName, attrName, attrValue);\n if (evt.keepAttr) {\n evt.allowedAttributes[attrName] = true;\n if (isBooleanAttribute(attrName, schema)) {\n evt.attrValue = attrName;\n }\n if (settings.allow_svg_data_urls && startsWith(attrValue, 'data:image/svg+xml')) {\n evt.forceKeepAttr = true;\n }\n } else if (isRequiredAttributeOfInternalElement(ele, attrName)) {\n evt.forceKeepAttr = true;\n }\n };\n const shouldKeepAttribute = (settings, schema, scope, tagName, attrName, attrValue) => {\n if (scope !== 'html' && !isNonHtmlElementRootName(tagName)) {\n return true;\n }\n return !(attrName in filteredUrlAttrs && isInvalidUri(settings, attrValue, tagName)) && (!settings.validate || schema.isValid(tagName, attrName) || startsWith(attrName, 'data-') || startsWith(attrName, 'aria-'));\n };\n const isRequiredAttributeOfInternalElement = (ele, attrName) => ele.hasAttribute(internalElementAttr) && (attrName === 'id' || attrName === 'class' || attrName === 'style');\n const isBooleanAttribute = (attrName, schema) => attrName in schema.getBoolAttrs();\n const filterAttributes = (ele, settings, schema, scope) => {\n const {attributes} = ele;\n for (let i = attributes.length - 1; i >= 0; i--) {\n const attr = attributes[i];\n const attrName = attr.name;\n const attrValue = attr.value;\n if (!shouldKeepAttribute(settings, schema, scope, ele.tagName.toLowerCase(), attrName, attrValue) && !isRequiredAttributeOfInternalElement(ele, attrName)) {\n ele.removeAttribute(attrName);\n } else if (isBooleanAttribute(attrName, schema)) {\n ele.setAttribute(attrName, attrName);\n }\n }\n };\n const setupPurify = (settings, schema, namespaceTracker) => {\n const purify$1 = purify();\n purify$1.addHook('uponSanitizeElement', (ele, evt) => {\n processNode(ele, settings, schema, namespaceTracker.track(ele), evt);\n });\n purify$1.addHook('uponSanitizeAttribute', (ele, evt) => {\n processAttr(ele, settings, schema, namespaceTracker.current(), evt);\n });\n return purify$1;\n };\n const getPurifyConfig = (settings, mimeType) => {\n const basePurifyConfig = {\n IN_PLACE: true,\n ALLOW_UNKNOWN_PROTOCOLS: true,\n ALLOWED_TAGS: [\n '#comment',\n '#cdata-section',\n 'body'\n ],\n ALLOWED_ATTR: [],\n SAFE_FOR_XML: false\n };\n const config = { ...basePurifyConfig };\n config.PARSER_MEDIA_TYPE = mimeType;\n if (settings.allow_script_urls) {\n config.ALLOWED_URI_REGEXP = /.*/;\n } else if (settings.allow_html_data_urls) {\n config.ALLOWED_URI_REGEXP = /^(?!(\\w+script|mhtml):)/i;\n }\n return config;\n };\n const sanitizeSvgElement = ele => {\n const xlinkAttrs = [\n 'type',\n 'href',\n 'role',\n 'arcrole',\n 'title',\n 'show',\n 'actuate',\n 'label',\n 'from',\n 'to'\n ].map(name => `xlink:${ name }`);\n const config = {\n IN_PLACE: true,\n USE_PROFILES: {\n html: true,\n svg: true,\n svgFilters: true\n },\n ALLOWED_ATTR: xlinkAttrs\n };\n purify().sanitize(ele, config);\n };\n const sanitizeMathmlElement = (node, settings) => {\n const config = {\n IN_PLACE: true,\n USE_PROFILES: { mathMl: true }\n };\n const purify$1 = purify();\n const allowedEncodings = settings.allow_mathml_annotation_encodings;\n const hasAllowedEncodings = isArray$1(allowedEncodings) && allowedEncodings.length > 0;\n const hasValidEncoding = el => {\n const encoding = el.getAttribute('encoding');\n return hasAllowedEncodings && isString(encoding) && contains$2(allowedEncodings, encoding);\n };\n purify$1.addHook('uponSanitizeElement', (node, evt) => {\n var _a;\n const lcTagName = (_a = evt.tagName) !== null && _a !== void 0 ? _a : node.nodeName.toLowerCase();\n if (hasAllowedEncodings && lcTagName === 'semantics') {\n evt.allowedTags[lcTagName] = true;\n }\n if (lcTagName === 'annotation') {\n const keepElement = hasValidEncoding(node);\n evt.allowedTags[lcTagName] = keepElement;\n if (!keepElement) {\n node.remove();\n }\n }\n });\n purify$1.sanitize(node, config);\n };\n const mkSanitizeNamespaceElement = settings => ele => {\n const namespaceType = toScopeType(ele);\n if (namespaceType === 'svg') {\n sanitizeSvgElement(ele);\n } else if (namespaceType === 'math') {\n sanitizeMathmlElement(ele, settings);\n } else {\n throw new Error('Not a namespace element');\n }\n };\n const getSanitizer = (settings, schema) => {\n const namespaceTracker = createNamespaceTracker();\n if (settings.sanitize) {\n const purify = setupPurify(settings, schema, namespaceTracker);\n const sanitizeHtmlElement = (body, mimeType) => {\n purify.sanitize(body, getPurifyConfig(settings, mimeType));\n purify.removed = [];\n namespaceTracker.reset();\n };\n return {\n sanitizeHtmlElement,\n sanitizeNamespaceElement: mkSanitizeNamespaceElement(settings)\n };\n } else {\n const sanitizeHtmlElement = (body, _mimeType) => {\n const nodeIterator = document.createNodeIterator(body, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT);\n let node;\n while (node = nodeIterator.nextNode()) {\n const currentScope = namespaceTracker.track(node);\n processNode(node, settings, schema, currentScope);\n if (isElement$6(node)) {\n filterAttributes(node, settings, schema, currentScope);\n }\n }\n namespaceTracker.reset();\n };\n const sanitizeNamespaceElement = noop;\n return {\n sanitizeHtmlElement,\n sanitizeNamespaceElement\n };\n }\n };\n\n const makeMap = Tools.makeMap, extend$1 = Tools.extend;\n const transferChildren = (parent, nativeParent, specialElements, nsSanitizer) => {\n const parentName = parent.name;\n const isSpecial = parentName in specialElements && parentName !== 'title' && parentName !== 'textarea' && parentName !== 'noscript';\n const childNodes = nativeParent.childNodes;\n for (let ni = 0, nl = childNodes.length; ni < nl; ni++) {\n const nativeChild = childNodes[ni];\n const child = new AstNode(nativeChild.nodeName.toLowerCase(), nativeChild.nodeType);\n if (isElement$6(nativeChild)) {\n const attributes = nativeChild.attributes;\n for (let ai = 0, al = attributes.length; ai < al; ai++) {\n const attr = attributes[ai];\n child.attr(attr.name, attr.value);\n }\n if (isNonHtmlElementRootName(child.name)) {\n nsSanitizer(nativeChild);\n child.value = nativeChild.innerHTML;\n }\n } else if (isText$b(nativeChild)) {\n child.value = nativeChild.data;\n if (isSpecial) {\n child.raw = true;\n }\n } else if (isComment(nativeChild) || isCData(nativeChild) || isPi(nativeChild)) {\n child.value = nativeChild.data;\n }\n if (!isNonHtmlElementRootName(child.name)) {\n transferChildren(child, nativeChild, specialElements, nsSanitizer);\n }\n parent.append(child);\n }\n };\n const walkTree = (root, preprocessors, postprocessors) => {\n const traverseOrder = [];\n for (let node = root, lastNode = node; node; lastNode = node, node = node.walk()) {\n const tempNode = node;\n each$e(preprocessors, preprocess => preprocess(tempNode));\n if (isNullable(tempNode.parent) && tempNode !== root) {\n node = lastNode;\n } else {\n traverseOrder.push(tempNode);\n }\n }\n for (let i = traverseOrder.length - 1; i >= 0; i--) {\n const node = traverseOrder[i];\n each$e(postprocessors, postprocess => postprocess(node));\n }\n };\n const whitespaceCleaner = (root, schema, settings, args) => {\n const validate = settings.validate;\n const nonEmptyElements = schema.getNonEmptyElements();\n const whitespaceElements = schema.getWhitespaceElements();\n const blockElements = extend$1(makeMap('script,style,head,html,body,title,meta,param'), schema.getBlockElements());\n const textRootBlockElements = getTextRootBlockElements(schema);\n const allWhiteSpaceRegExp = /[ \\t\\r\\n]+/g;\n const startWhiteSpaceRegExp = /^[ \\t\\r\\n]+/;\n const endWhiteSpaceRegExp = /[ \\t\\r\\n]+$/;\n const hasWhitespaceParent = node => {\n let tempNode = node.parent;\n while (isNonNullable(tempNode)) {\n if (tempNode.name in whitespaceElements) {\n return true;\n } else {\n tempNode = tempNode.parent;\n }\n }\n return false;\n };\n const isTextRootBlockEmpty = node => {\n let tempNode = node;\n while (isNonNullable(tempNode)) {\n if (tempNode.name in textRootBlockElements) {\n return isEmpty(schema, nonEmptyElements, whitespaceElements, tempNode);\n } else {\n tempNode = tempNode.parent;\n }\n }\n return false;\n };\n const isBlock = node => node.name in blockElements || isTransparentAstBlock(schema, node) || isNonHtmlElementRootName(node.name) && node.parent === root;\n const isAtEdgeOfBlock = (node, start) => {\n const neighbour = start ? node.prev : node.next;\n if (isNonNullable(neighbour) || isNullable(node.parent)) {\n return false;\n }\n return isBlock(node.parent) && (node.parent !== root || args.isRootContent === true);\n };\n const preprocess = node => {\n var _a;\n if (node.type === 3) {\n if (!hasWhitespaceParent(node)) {\n let text = (_a = node.value) !== null && _a !== void 0 ? _a : '';\n text = text.replace(allWhiteSpaceRegExp, ' ');\n if (isLineBreakNode(node.prev, isBlock) || isAtEdgeOfBlock(node, true)) {\n text = text.replace(startWhiteSpaceRegExp, '');\n }\n if (text.length === 0) {\n node.remove();\n } else if (text === ' ' && node.prev && node.prev.type === COMMENT && node.next && node.next.type === COMMENT) {\n node.remove();\n } else {\n node.value = text;\n }\n }\n }\n };\n const postprocess = node => {\n var _a;\n if (node.type === 1) {\n const elementRule = schema.getElementRule(node.name);\n if (validate && elementRule) {\n const isNodeEmpty = isEmpty(schema, nonEmptyElements, whitespaceElements, node);\n if (elementRule.paddInEmptyBlock && isNodeEmpty && isTextRootBlockEmpty(node)) {\n paddEmptyNode(settings, args, isBlock, node);\n } else if (elementRule.removeEmpty && isNodeEmpty) {\n if (isBlock(node)) {\n node.remove();\n } else {\n node.unwrap();\n }\n } else if (elementRule.paddEmpty && (isNodeEmpty || isPaddedWithNbsp(node))) {\n paddEmptyNode(settings, args, isBlock, node);\n }\n }\n } else if (node.type === 3) {\n if (!hasWhitespaceParent(node)) {\n let text = (_a = node.value) !== null && _a !== void 0 ? _a : '';\n if (node.next && isBlock(node.next) || isAtEdgeOfBlock(node, false)) {\n text = text.replace(endWhiteSpaceRegExp, '');\n }\n if (text.length === 0) {\n node.remove();\n } else {\n node.value = text;\n }\n }\n }\n };\n return [\n preprocess,\n postprocess\n ];\n };\n const getRootBlockName = (settings, args) => {\n var _a;\n const name = (_a = args.forced_root_block) !== null && _a !== void 0 ? _a : settings.forced_root_block;\n if (name === false) {\n return '';\n } else if (name === true) {\n return 'p';\n } else {\n return name;\n }\n };\n const DomParser = (settings = {}, schema = Schema()) => {\n const nodeFilterRegistry = create$8();\n const attributeFilterRegistry = create$8();\n const defaultedSettings = {\n validate: true,\n root_name: 'body',\n sanitize: true,\n ...settings\n };\n const parser = new DOMParser();\n const sanitizer = getSanitizer(defaultedSettings, schema);\n const parseAndSanitizeWithContext = (html, rootName, format = 'html') => {\n const mimeType = format === 'xhtml' ? 'application/xhtml+xml' : 'text/html';\n const isSpecialRoot = has$2(schema.getSpecialElements(), rootName.toLowerCase());\n const content = isSpecialRoot ? `<${ rootName }>${ html }` : html;\n const makeWrap = () => {\n if (format === 'xhtml') {\n return `${ content }`;\n } else if (/^[\\s]*${ content }`;\n } else {\n return `${ content }`;\n }\n };\n const body = parser.parseFromString(makeWrap(), mimeType).body;\n sanitizer.sanitizeHtmlElement(body, mimeType);\n return isSpecialRoot ? body.firstChild : body;\n };\n const addNodeFilter = nodeFilterRegistry.addFilter;\n const getNodeFilters = nodeFilterRegistry.getFilters;\n const removeNodeFilter = nodeFilterRegistry.removeFilter;\n const addAttributeFilter = attributeFilterRegistry.addFilter;\n const getAttributeFilters = attributeFilterRegistry.getFilters;\n const removeAttributeFilter = attributeFilterRegistry.removeFilter;\n const findInvalidChildren = (node, invalidChildren) => {\n if (isInvalid(schema, node)) {\n invalidChildren.push(node);\n }\n };\n const isWrappableNode = (blockElements, node) => {\n const isInternalElement = isString(node.attr(internalElementAttr));\n const isInlineElement = node.type === 1 && (!has$2(blockElements, node.name) && !isTransparentAstBlock(schema, node)) && !isNonHtmlElementRootName(node.name);\n return node.type === 3 || isInlineElement && !isInternalElement;\n };\n const addRootBlocks = (rootNode, rootBlockName) => {\n const blockElements = extend$1(makeMap('script,style,head,html,body,title,meta,param'), schema.getBlockElements());\n const startWhiteSpaceRegExp = /^[ \\t\\r\\n]+/;\n const endWhiteSpaceRegExp = /[ \\t\\r\\n]+$/;\n let node = rootNode.firstChild, rootBlockNode = null;\n const trim = rootBlock => {\n var _a, _b;\n if (rootBlock) {\n node = rootBlock.firstChild;\n if (node && node.type === 3) {\n node.value = (_a = node.value) === null || _a === void 0 ? void 0 : _a.replace(startWhiteSpaceRegExp, '');\n }\n node = rootBlock.lastChild;\n if (node && node.type === 3) {\n node.value = (_b = node.value) === null || _b === void 0 ? void 0 : _b.replace(endWhiteSpaceRegExp, '');\n }\n }\n };\n if (!schema.isValidChild(rootNode.name, rootBlockName.toLowerCase())) {\n return;\n }\n while (node) {\n const next = node.next;\n if (isWrappableNode(blockElements, node)) {\n if (!rootBlockNode) {\n rootBlockNode = new AstNode(rootBlockName, 1);\n rootBlockNode.attr(defaultedSettings.forced_root_block_attrs);\n rootNode.insert(rootBlockNode, node);\n rootBlockNode.append(node);\n } else {\n rootBlockNode.append(node);\n }\n } else {\n trim(rootBlockNode);\n rootBlockNode = null;\n }\n node = next;\n }\n trim(rootBlockNode);\n };\n const parse = (html, args = {}) => {\n var _a;\n const validate = defaultedSettings.validate;\n const rootName = (_a = args.context) !== null && _a !== void 0 ? _a : defaultedSettings.root_name;\n const element = parseAndSanitizeWithContext(html, rootName, args.format);\n updateChildren(schema, element);\n const rootNode = new AstNode(rootName, 11);\n transferChildren(rootNode, element, schema.getSpecialElements(), sanitizer.sanitizeNamespaceElement);\n element.innerHTML = '';\n const [whitespacePre, whitespacePost] = whitespaceCleaner(rootNode, schema, defaultedSettings, args);\n const invalidChildren = [];\n const invalidFinder = validate ? node => findInvalidChildren(node, invalidChildren) : noop;\n const matches = {\n nodes: {},\n attributes: {}\n };\n const matchFinder = node => matchNode$1(getNodeFilters(), getAttributeFilters(), node, matches);\n walkTree(rootNode, [\n whitespacePre,\n matchFinder\n ], [\n whitespacePost,\n invalidFinder\n ]);\n invalidChildren.reverse();\n if (validate && invalidChildren.length > 0) {\n if (args.context) {\n const {\n pass: topLevelChildren,\n fail: otherChildren\n } = partition$2(invalidChildren, child => child.parent === rootNode);\n cleanInvalidNodes(otherChildren, schema, rootNode, matchFinder);\n args.invalid = topLevelChildren.length > 0;\n } else {\n cleanInvalidNodes(invalidChildren, schema, rootNode, matchFinder);\n }\n }\n const rootBlockName = getRootBlockName(defaultedSettings, args);\n if (rootBlockName && (rootNode.name === 'body' || args.isRootContent)) {\n addRootBlocks(rootNode, rootBlockName);\n }\n if (!args.invalid) {\n runFilters(matches, args);\n }\n return rootNode;\n };\n const exports = {\n schema,\n addAttributeFilter,\n getAttributeFilters,\n removeAttributeFilter,\n addNodeFilter,\n getNodeFilters,\n removeNodeFilter,\n parse\n };\n register$4(exports, defaultedSettings);\n register$5(exports, defaultedSettings, schema);\n return exports;\n };\n\n const serializeContent = content => isTreeNode(content) ? HtmlSerializer({ validate: false }).serialize(content) : content;\n const withSerializedContent = (content, fireEvent, parserSettings) => {\n const serializedContent = serializeContent(content);\n const eventArgs = fireEvent(serializedContent);\n if (eventArgs.isDefaultPrevented()) {\n return eventArgs;\n } else if (isTreeNode(content)) {\n if (eventArgs.content !== serializedContent) {\n const rootNode = DomParser({\n validate: false,\n forced_root_block: false,\n ...parserSettings\n }).parse(eventArgs.content, { context: content.name });\n return {\n ...eventArgs,\n content: rootNode\n };\n } else {\n return {\n ...eventArgs,\n content\n };\n }\n } else {\n return eventArgs;\n }\n };\n const makeParserSettings = editor => ({\n sanitize: shouldSanitizeXss(editor),\n sandbox_iframes: shouldSandboxIframes(editor),\n sandbox_iframes_exclusions: getSandboxIframesExclusions(editor)\n });\n const preProcessGetContent = (editor, args) => {\n if (args.no_events) {\n return Result.value(args);\n } else {\n const eventArgs = fireBeforeGetContent(editor, args);\n if (eventArgs.isDefaultPrevented()) {\n return Result.error(fireGetContent(editor, {\n content: '',\n ...eventArgs\n }).content);\n } else {\n return Result.value(eventArgs);\n }\n }\n };\n const postProcessGetContent = (editor, content, args) => {\n if (args.no_events) {\n return content;\n } else {\n const processedEventArgs = withSerializedContent(content, content => fireGetContent(editor, {\n ...args,\n content\n }), makeParserSettings(editor));\n return processedEventArgs.content;\n }\n };\n const preProcessSetContent = (editor, args) => {\n if (args.no_events) {\n return Result.value(args);\n } else {\n const processedEventArgs = withSerializedContent(args.content, content => fireBeforeSetContent(editor, {\n ...args,\n content\n }), makeParserSettings(editor));\n if (processedEventArgs.isDefaultPrevented()) {\n fireSetContent(editor, processedEventArgs);\n return Result.error(undefined);\n } else {\n return Result.value(processedEventArgs);\n }\n }\n };\n const postProcessSetContent = (editor, content, args) => {\n if (!args.no_events) {\n fireSetContent(editor, {\n ...args,\n content\n });\n }\n };\n\n const tableModel = (element, width, rows) => ({\n element,\n width,\n rows\n });\n const tableRow = (element, cells) => ({\n element,\n cells\n });\n const cellPosition = (x, y) => ({\n x,\n y\n });\n const getSpan = (td, key) => {\n return getOpt(td, key).bind(toInt).getOr(1);\n };\n const fillout = (table, x, y, tr, td) => {\n const rowspan = getSpan(td, 'rowspan');\n const colspan = getSpan(td, 'colspan');\n const rows = table.rows;\n for (let y2 = y; y2 < y + rowspan; y2++) {\n if (!rows[y2]) {\n rows[y2] = tableRow(deep$1(tr), []);\n }\n for (let x2 = x; x2 < x + colspan; x2++) {\n const cells = rows[y2].cells;\n cells[x2] = y2 === y && x2 === x ? td : shallow$1(td);\n }\n }\n };\n const cellExists = (table, x, y) => {\n const rows = table.rows;\n const cells = rows[y] ? rows[y].cells : [];\n return !!cells[x];\n };\n const skipCellsX = (table, x, y) => {\n while (cellExists(table, x, y)) {\n x++;\n }\n return x;\n };\n const getWidth = rows => {\n return foldl(rows, (acc, row) => {\n return row.cells.length > acc ? row.cells.length : acc;\n }, 0);\n };\n const findElementPos = (table, element) => {\n const rows = table.rows;\n for (let y = 0; y < rows.length; y++) {\n const cells = rows[y].cells;\n for (let x = 0; x < cells.length; x++) {\n if (eq(cells[x], element)) {\n return Optional.some(cellPosition(x, y));\n }\n }\n }\n return Optional.none();\n };\n const extractRows = (table, sx, sy, ex, ey) => {\n const newRows = [];\n const rows = table.rows;\n for (let y = sy; y <= ey; y++) {\n const cells = rows[y].cells;\n const slice = sx < ex ? cells.slice(sx, ex + 1) : cells.slice(ex, sx + 1);\n newRows.push(tableRow(rows[y].element, slice));\n }\n return newRows;\n };\n const subTable = (table, startPos, endPos) => {\n const sx = startPos.x, sy = startPos.y;\n const ex = endPos.x, ey = endPos.y;\n const newRows = sy < ey ? extractRows(table, sx, sy, ex, ey) : extractRows(table, sx, ey, ex, sy);\n return tableModel(table.element, getWidth(newRows), newRows);\n };\n const createDomTable = (table, rows) => {\n const tableElement = shallow$1(table.element);\n const tableBody = SugarElement.fromTag('tbody');\n append(tableBody, rows);\n append$1(tableElement, tableBody);\n return tableElement;\n };\n const modelRowsToDomRows = table => {\n return map$3(table.rows, row => {\n const cells = map$3(row.cells, cell => {\n const td = deep$1(cell);\n remove$9(td, 'colspan');\n remove$9(td, 'rowspan');\n return td;\n });\n const tr = shallow$1(row.element);\n append(tr, cells);\n return tr;\n });\n };\n const fromDom = tableElm => {\n const table = tableModel(shallow$1(tableElm), 0, []);\n each$e(descendants(tableElm, 'tr'), (tr, y) => {\n each$e(descendants(tr, 'td,th'), (td, x) => {\n fillout(table, skipCellsX(table, x, y), y, tr, td);\n });\n });\n return tableModel(table.element, getWidth(table.rows), table.rows);\n };\n const toDom = table => {\n return createDomTable(table, modelRowsToDomRows(table));\n };\n const subsection = (table, startElement, endElement) => {\n return findElementPos(table, startElement).bind(startPos => {\n return findElementPos(table, endElement).map(endPos => {\n return subTable(table, startPos, endPos);\n });\n });\n };\n\n const findParentListContainer = parents => find$2(parents, elm => name(elm) === 'ul' || name(elm) === 'ol');\n const getFullySelectedListWrappers = (parents, rng) => find$2(parents, elm => name(elm) === 'li' && hasAllContentsSelected(elm, rng)).fold(constant([]), _li => findParentListContainer(parents).map(listCont => {\n const listElm = SugarElement.fromTag(name(listCont));\n const listStyles = filter$4(getAllRaw(listCont), (_style, name) => startsWith(name, 'list-style'));\n setAll(listElm, listStyles);\n return [\n SugarElement.fromTag('li'),\n listElm\n ];\n }).getOr([]));\n const wrap = (innerElm, elms) => {\n const wrapped = foldl(elms, (acc, elm) => {\n append$1(elm, acc);\n return elm;\n }, innerElm);\n return elms.length > 0 ? fromElements([wrapped]) : wrapped;\n };\n const directListWrappers = commonAnchorContainer => {\n if (isListItem$1(commonAnchorContainer)) {\n return parent(commonAnchorContainer).filter(isList).fold(constant([]), listElm => [\n commonAnchorContainer,\n listElm\n ]);\n } else {\n return isList(commonAnchorContainer) ? [commonAnchorContainer] : [];\n }\n };\n const getWrapElements = (rootNode, rng, schema) => {\n const commonAnchorContainer = SugarElement.fromDom(rng.commonAncestorContainer);\n const parents = parentsAndSelf(commonAnchorContainer, rootNode);\n const wrapElements = filter$5(parents, el => schema.isWrapper(name(el)));\n const listWrappers = getFullySelectedListWrappers(parents, rng);\n const allWrappers = wrapElements.concat(listWrappers.length ? listWrappers : directListWrappers(commonAnchorContainer));\n return map$3(allWrappers, shallow$1);\n };\n const emptyFragment = () => fromElements([]);\n const getFragmentFromRange = (rootNode, rng, schema) => wrap(SugarElement.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng, schema));\n const getParentTable = (rootElm, cell) => ancestor$3(cell, 'table', curry(eq, rootElm));\n const getTableFragment = (rootNode, selectedTableCells) => getParentTable(rootNode, selectedTableCells[0]).bind(tableElm => {\n const firstCell = selectedTableCells[0];\n const lastCell = selectedTableCells[selectedTableCells.length - 1];\n const fullTableModel = fromDom(tableElm);\n return subsection(fullTableModel, firstCell, lastCell).map(sectionedTableModel => fromElements([toDom(sectionedTableModel)]));\n }).getOrThunk(emptyFragment);\n const getSelectionFragment = (rootNode, ranges, schema) => ranges.length > 0 && ranges[0].collapsed ? emptyFragment() : getFragmentFromRange(rootNode, ranges[0], schema);\n const read$3 = (rootNode, ranges, schema) => {\n const selectedCells = getCellsFromElementOrRanges(ranges, rootNode);\n return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges, schema);\n };\n\n const isCollapsibleWhitespace = (text, index) => index >= 0 && index < text.length && isWhiteSpace(text.charAt(index));\n const getInnerText = bin => {\n return trim$2(bin.innerText);\n };\n const getContextNodeName = parentBlockOpt => parentBlockOpt.map(block => block.nodeName).getOr('div').toLowerCase();\n const getTextContent = editor => Optional.from(editor.selection.getRng()).map(rng => {\n var _a;\n const parentBlockOpt = Optional.from(editor.dom.getParent(rng.commonAncestorContainer, editor.dom.isBlock));\n const body = editor.getBody();\n const contextNodeName = getContextNodeName(parentBlockOpt);\n const rangeContentClone = SugarElement.fromDom(rng.cloneContents());\n cleanupBogusElements(rangeContentClone);\n cleanupInputNames(rangeContentClone);\n const bin = editor.dom.add(body, contextNodeName, {\n 'data-mce-bogus': 'all',\n 'style': 'overflow: hidden; opacity: 0;'\n }, rangeContentClone.dom);\n const text = getInnerText(bin);\n const nonRenderedText = trim$2((_a = bin.textContent) !== null && _a !== void 0 ? _a : '');\n editor.dom.remove(bin);\n if (isCollapsibleWhitespace(nonRenderedText, 0) || isCollapsibleWhitespace(nonRenderedText, nonRenderedText.length - 1)) {\n const parentBlock = parentBlockOpt.getOr(body);\n const parentBlockText = getInnerText(parentBlock);\n const textIndex = parentBlockText.indexOf(text);\n if (textIndex === -1) {\n return text;\n } else {\n const hasProceedingSpace = isCollapsibleWhitespace(parentBlockText, textIndex - 1);\n const hasTrailingSpace = isCollapsibleWhitespace(parentBlockText, textIndex + text.length);\n return (hasProceedingSpace ? ' ' : '') + text + (hasTrailingSpace ? ' ' : '');\n }\n } else {\n return text;\n }\n }).getOr('');\n const getSerializedContent = (editor, args) => {\n const rng = editor.selection.getRng(), tmpElm = editor.dom.create('body');\n const sel = editor.selection.getSel();\n const ranges = processRanges(editor, getRanges$1(sel));\n const fragment = args.contextual ? read$3(SugarElement.fromDom(editor.getBody()), ranges, editor.schema).dom : rng.cloneContents();\n if (fragment) {\n tmpElm.appendChild(fragment);\n }\n return editor.selection.serializer.serialize(tmpElm, args);\n };\n const extractSelectedContent = (editor, args) => {\n if (args.format === 'text') {\n return getTextContent(editor);\n } else {\n const content = getSerializedContent(editor, args);\n if (args.format === 'tree') {\n return content;\n } else {\n return editor.selection.isCollapsed() ? '' : content;\n }\n }\n };\n const setupArgs$3 = (args, format) => ({\n ...args,\n format,\n get: true,\n selection: true,\n getInner: true\n });\n const getSelectedContentInternal = (editor, format, args = {}) => {\n const defaultedArgs = setupArgs$3(args, format);\n return preProcessGetContent(editor, defaultedArgs).fold(identity, updatedArgs => {\n const content = extractSelectedContent(editor, updatedArgs);\n return postProcessGetContent(editor, content, updatedArgs);\n });\n };\n\n const KEEP = 0, INSERT = 1, DELETE = 2;\n const diff = (left, right) => {\n const size = left.length + right.length + 2;\n const vDown = new Array(size);\n const vUp = new Array(size);\n const snake = (start, end, diag) => {\n return {\n start,\n end,\n diag\n };\n };\n const buildScript = (start1, end1, start2, end2, script) => {\n const middle = getMiddleSnake(start1, end1, start2, end2);\n if (middle === null || middle.start === end1 && middle.diag === end1 - end2 || middle.end === start1 && middle.diag === start1 - start2) {\n let i = start1;\n let j = start2;\n while (i < end1 || j < end2) {\n if (i < end1 && j < end2 && left[i] === right[j]) {\n script.push([\n KEEP,\n left[i]\n ]);\n ++i;\n ++j;\n } else {\n if (end1 - start1 > end2 - start2) {\n script.push([\n DELETE,\n left[i]\n ]);\n ++i;\n } else {\n script.push([\n INSERT,\n right[j]\n ]);\n ++j;\n }\n }\n }\n } else {\n buildScript(start1, middle.start, start2, middle.start - middle.diag, script);\n for (let i2 = middle.start; i2 < middle.end; ++i2) {\n script.push([\n KEEP,\n left[i2]\n ]);\n }\n buildScript(middle.end, end1, middle.end - middle.diag, end2, script);\n }\n };\n const buildSnake = (start, diag, end1, end2) => {\n let end = start;\n while (end - diag < end2 && end < end1 && left[end] === right[end - diag]) {\n ++end;\n }\n return snake(start, end, diag);\n };\n const getMiddleSnake = (start1, end1, start2, end2) => {\n const m = end1 - start1;\n const n = end2 - start2;\n if (m === 0 || n === 0) {\n return null;\n }\n const delta = m - n;\n const sum = n + m;\n const offset = (sum % 2 === 0 ? sum : sum + 1) / 2;\n vDown[1 + offset] = start1;\n vUp[1 + offset] = end1 + 1;\n let d, k, i, x, y;\n for (d = 0; d <= offset; ++d) {\n for (k = -d; k <= d; k += 2) {\n i = k + offset;\n if (k === -d || k !== d && vDown[i - 1] < vDown[i + 1]) {\n vDown[i] = vDown[i + 1];\n } else {\n vDown[i] = vDown[i - 1] + 1;\n }\n x = vDown[i];\n y = x - start1 + start2 - k;\n while (x < end1 && y < end2 && left[x] === right[y]) {\n vDown[i] = ++x;\n ++y;\n }\n if (delta % 2 !== 0 && delta - d <= k && k <= delta + d) {\n if (vUp[i - delta] <= vDown[i]) {\n return buildSnake(vUp[i - delta], k + start1 - start2, end1, end2);\n }\n }\n }\n for (k = delta - d; k <= delta + d; k += 2) {\n i = k + offset - delta;\n if (k === delta - d || k !== delta + d && vUp[i + 1] <= vUp[i - 1]) {\n vUp[i] = vUp[i + 1] - 1;\n } else {\n vUp[i] = vUp[i - 1];\n }\n x = vUp[i] - 1;\n y = x - start1 + start2 - k;\n while (x >= start1 && y >= start2 && left[x] === right[y]) {\n vUp[i] = x--;\n y--;\n }\n if (delta % 2 === 0 && -d <= k && k <= d) {\n if (vUp[i] <= vDown[i + delta]) {\n return buildSnake(vUp[i], k + start1 - start2, end1, end2);\n }\n }\n }\n }\n return null;\n };\n const script = [];\n buildScript(0, left.length, 0, right.length, script);\n return script;\n };\n\n const getOuterHtml = elm => {\n if (isElement$6(elm)) {\n return elm.outerHTML;\n } else if (isText$b(elm)) {\n return Entities.encodeRaw(elm.data, false);\n } else if (isComment(elm)) {\n return '';\n }\n return '';\n };\n const createFragment = html => {\n let node;\n const container = document.createElement('div');\n const frag = document.createDocumentFragment();\n if (html) {\n container.innerHTML = html;\n }\n while (node = container.firstChild) {\n frag.appendChild(node);\n }\n return frag;\n };\n const insertAt = (elm, html, index) => {\n const fragment = createFragment(html);\n if (elm.hasChildNodes() && index < elm.childNodes.length) {\n const target = elm.childNodes[index];\n elm.insertBefore(fragment, target);\n } else {\n elm.appendChild(fragment);\n }\n };\n const removeAt = (elm, index) => {\n if (elm.hasChildNodes() && index < elm.childNodes.length) {\n const target = elm.childNodes[index];\n elm.removeChild(target);\n }\n };\n const applyDiff = (diff, elm) => {\n let index = 0;\n each$e(diff, action => {\n if (action[0] === KEEP) {\n index++;\n } else if (action[0] === INSERT) {\n insertAt(elm, action[1], index);\n index++;\n } else if (action[0] === DELETE) {\n removeAt(elm, index);\n }\n });\n };\n const read$2 = (elm, trimZwsp) => filter$5(map$3(from(elm.childNodes), trimZwsp ? compose(trim$2, getOuterHtml) : getOuterHtml), item => {\n return item.length > 0;\n });\n const write = (fragments, elm) => {\n const currentFragments = map$3(from(elm.childNodes), getOuterHtml);\n applyDiff(diff(currentFragments, fragments), elm);\n return elm;\n };\n\n const lazyTempDocument = cached(() => document.implementation.createHTMLDocument('undo'));\n const hasIframes = body => body.querySelector('iframe') !== null;\n const createFragmentedLevel = fragments => {\n return {\n type: 'fragmented',\n fragments,\n content: '',\n bookmark: null,\n beforeBookmark: null\n };\n };\n const createCompleteLevel = content => {\n return {\n type: 'complete',\n fragments: null,\n content,\n bookmark: null,\n beforeBookmark: null\n };\n };\n const createFromEditor = editor => {\n const tempAttrs = editor.serializer.getTempAttrs();\n const body = trim$1(editor.getBody(), tempAttrs);\n return hasIframes(body) ? createFragmentedLevel(read$2(body, true)) : createCompleteLevel(trim$2(body.innerHTML));\n };\n const applyToEditor = (editor, level, before) => {\n const bookmark = before ? level.beforeBookmark : level.bookmark;\n if (level.type === 'fragmented') {\n write(level.fragments, editor.getBody());\n } else {\n editor.setContent(level.content, {\n format: 'raw',\n no_selection: isNonNullable(bookmark) && isPathBookmark(bookmark) ? !bookmark.isFakeCaret : true\n });\n }\n if (bookmark) {\n editor.selection.moveToBookmark(bookmark);\n editor.selection.scrollIntoView();\n }\n };\n const getLevelContent = level => {\n return level.type === 'fragmented' ? level.fragments.join('') : level.content;\n };\n const getCleanLevelContent = level => {\n const elm = SugarElement.fromTag('body', lazyTempDocument());\n set$1(elm, getLevelContent(level));\n each$e(descendants(elm, '*[data-mce-bogus]'), unwrap);\n return get$6(elm);\n };\n const hasEqualContent = (level1, level2) => getLevelContent(level1) === getLevelContent(level2);\n const hasEqualCleanedContent = (level1, level2) => getCleanLevelContent(level1) === getCleanLevelContent(level2);\n const isEq$1 = (level1, level2) => {\n if (!level1 || !level2) {\n return false;\n } else if (hasEqualContent(level1, level2)) {\n return true;\n } else {\n return hasEqualCleanedContent(level1, level2);\n }\n };\n\n const isUnlocked = locks => locks.get() === 0;\n\n const setTyping = (undoManager, typing, locks) => {\n if (isUnlocked(locks)) {\n undoManager.typing = typing;\n }\n };\n const endTyping = (undoManager, locks) => {\n if (undoManager.typing) {\n setTyping(undoManager, false, locks);\n undoManager.add();\n }\n };\n const endTypingLevelIgnoreLocks = undoManager => {\n if (undoManager.typing) {\n undoManager.typing = false;\n undoManager.add();\n }\n };\n\n const beforeChange$1 = (editor, locks, beforeBookmark) => {\n if (isUnlocked(locks)) {\n beforeBookmark.set(getUndoBookmark(editor.selection));\n }\n };\n const addUndoLevel$1 = (editor, undoManager, index, locks, beforeBookmark, level, event) => {\n const currentLevel = createFromEditor(editor);\n const newLevel = Tools.extend(level || {}, currentLevel);\n if (!isUnlocked(locks) || editor.removed) {\n return null;\n }\n const lastLevel = undoManager.data[index.get()];\n if (editor.dispatch('BeforeAddUndo', {\n level: newLevel,\n lastLevel,\n originalEvent: event\n }).isDefaultPrevented()) {\n return null;\n }\n if (lastLevel && isEq$1(lastLevel, newLevel)) {\n return null;\n }\n if (undoManager.data[index.get()]) {\n beforeBookmark.get().each(bm => {\n undoManager.data[index.get()].beforeBookmark = bm;\n });\n }\n const customUndoRedoLevels = getCustomUndoRedoLevels(editor);\n if (customUndoRedoLevels) {\n if (undoManager.data.length > customUndoRedoLevels) {\n for (let i = 0; i < undoManager.data.length - 1; i++) {\n undoManager.data[i] = undoManager.data[i + 1];\n }\n undoManager.data.length--;\n index.set(undoManager.data.length);\n }\n }\n newLevel.bookmark = getUndoBookmark(editor.selection);\n if (index.get() < undoManager.data.length - 1) {\n undoManager.data.length = index.get() + 1;\n }\n undoManager.data.push(newLevel);\n index.set(undoManager.data.length - 1);\n const args = {\n level: newLevel,\n lastLevel,\n originalEvent: event\n };\n if (index.get() > 0) {\n editor.setDirty(true);\n editor.dispatch('AddUndo', args);\n editor.dispatch('change', args);\n } else {\n editor.dispatch('AddUndo', args);\n }\n return newLevel;\n };\n const clear$1 = (editor, undoManager, index) => {\n undoManager.data = [];\n index.set(0);\n undoManager.typing = false;\n editor.dispatch('ClearUndos');\n };\n const extra$1 = (editor, undoManager, index, callback1, callback2) => {\n if (undoManager.transact(callback1)) {\n const bookmark = undoManager.data[index.get()].bookmark;\n const lastLevel = undoManager.data[index.get() - 1];\n applyToEditor(editor, lastLevel, true);\n if (undoManager.transact(callback2)) {\n undoManager.data[index.get() - 1].beforeBookmark = bookmark;\n }\n }\n };\n const redo$1 = (editor, index, data) => {\n let level;\n if (index.get() < data.length - 1) {\n index.set(index.get() + 1);\n level = data[index.get()];\n applyToEditor(editor, level, false);\n editor.setDirty(true);\n editor.dispatch('Redo', { level });\n }\n return level;\n };\n const undo$1 = (editor, undoManager, locks, index) => {\n let level;\n if (undoManager.typing) {\n undoManager.add();\n undoManager.typing = false;\n setTyping(undoManager, false, locks);\n }\n if (index.get() > 0) {\n index.set(index.get() - 1);\n level = undoManager.data[index.get()];\n applyToEditor(editor, level, true);\n editor.setDirty(true);\n editor.dispatch('Undo', { level });\n }\n return level;\n };\n const reset$1 = undoManager => {\n undoManager.clear();\n undoManager.add();\n };\n const hasUndo$1 = (editor, undoManager, index) => index.get() > 0 || undoManager.typing && undoManager.data[0] && !isEq$1(createFromEditor(editor), undoManager.data[0]);\n const hasRedo$1 = (undoManager, index) => index.get() < undoManager.data.length - 1 && !undoManager.typing;\n const transact$1 = (undoManager, locks, callback) => {\n endTyping(undoManager, locks);\n undoManager.beforeChange();\n undoManager.ignore(callback);\n return undoManager.add();\n };\n const ignore$1 = (locks, callback) => {\n try {\n locks.set(locks.get() + 1);\n callback();\n } finally {\n locks.set(locks.get() - 1);\n }\n };\n\n const addVisualInternal = (editor, elm) => {\n const dom = editor.dom;\n const scope = isNonNullable(elm) ? elm : editor.getBody();\n each$e(dom.select('table,a', scope), matchedElm => {\n switch (matchedElm.nodeName) {\n case 'TABLE':\n const cls = getVisualAidsTableClass(editor);\n const value = dom.getAttrib(matchedElm, 'border');\n if ((!value || value === '0') && editor.hasVisual) {\n dom.addClass(matchedElm, cls);\n } else {\n dom.removeClass(matchedElm, cls);\n }\n break;\n case 'A':\n if (!dom.getAttrib(matchedElm, 'href')) {\n const value = dom.getAttrib(matchedElm, 'name') || matchedElm.id;\n const cls = getVisualAidsAnchorClass(editor);\n if (value && editor.hasVisual) {\n dom.addClass(matchedElm, cls);\n } else {\n dom.removeClass(matchedElm, cls);\n }\n }\n break;\n }\n });\n editor.dispatch('VisualAid', {\n element: elm,\n hasVisual: editor.hasVisual\n });\n };\n\n const makePlainAdaptor = editor => ({\n init: { bindEvents: noop },\n undoManager: {\n beforeChange: (locks, beforeBookmark) => beforeChange$1(editor, locks, beforeBookmark),\n add: (undoManager, index, locks, beforeBookmark, level, event) => addUndoLevel$1(editor, undoManager, index, locks, beforeBookmark, level, event),\n undo: (undoManager, locks, index) => undo$1(editor, undoManager, locks, index),\n redo: (index, data) => redo$1(editor, index, data),\n clear: (undoManager, index) => clear$1(editor, undoManager, index),\n reset: undoManager => reset$1(undoManager),\n hasUndo: (undoManager, index) => hasUndo$1(editor, undoManager, index),\n hasRedo: (undoManager, index) => hasRedo$1(undoManager, index),\n transact: (undoManager, locks, callback) => transact$1(undoManager, locks, callback),\n ignore: (locks, callback) => ignore$1(locks, callback),\n extra: (undoManager, index, callback1, callback2) => extra$1(editor, undoManager, index, callback1, callback2)\n },\n formatter: {\n match: (name, vars, node, similar) => match$2(editor, name, vars, node, similar),\n matchAll: (names, vars) => matchAll(editor, names, vars),\n matchNode: (node, name, vars, similar) => matchNode(editor, node, name, vars, similar),\n canApply: name => canApply(editor, name),\n closest: names => closest(editor, names),\n apply: (name, vars, node) => applyFormat$1(editor, name, vars, node),\n remove: (name, vars, node, similar) => removeFormat$1(editor, name, vars, node, similar),\n toggle: (name, vars, node) => toggle(editor, name, vars, node),\n formatChanged: (registeredFormatListeners, formats, callback, similar, vars) => formatChangedInternal(editor, registeredFormatListeners, formats, callback, similar, vars)\n },\n editor: {\n getContent: args => getContentInternal(editor, args),\n setContent: (content, args) => setContentInternal(editor, content, args),\n insertContent: (value, details) => insertHtmlAtCaret(editor, value, details),\n addVisual: elm => addVisualInternal(editor, elm)\n },\n selection: { getContent: (format, args) => getSelectedContentInternal(editor, format, args) },\n autocompleter: {\n addDecoration: noop,\n removeDecoration: noop\n },\n raw: { getModel: () => Optional.none() }\n });\n const makeRtcAdaptor = rtcEditor => {\n const defaultVars = vars => isObject(vars) ? vars : {};\n const {init, undoManager, formatter, editor, selection, autocompleter, raw} = rtcEditor;\n return {\n init: { bindEvents: init.bindEvents },\n undoManager: {\n beforeChange: undoManager.beforeChange,\n add: undoManager.add,\n undo: undoManager.undo,\n redo: undoManager.redo,\n clear: undoManager.clear,\n reset: undoManager.reset,\n hasUndo: undoManager.hasUndo,\n hasRedo: undoManager.hasRedo,\n transact: (_undoManager, _locks, fn) => undoManager.transact(fn),\n ignore: (_locks, callback) => undoManager.ignore(callback),\n extra: (_undoManager, _index, callback1, callback2) => undoManager.extra(callback1, callback2)\n },\n formatter: {\n match: (name, vars, _node, similar) => formatter.match(name, defaultVars(vars), similar),\n matchAll: formatter.matchAll,\n matchNode: formatter.matchNode,\n canApply: name => formatter.canApply(name),\n closest: names => formatter.closest(names),\n apply: (name, vars, _node) => formatter.apply(name, defaultVars(vars)),\n remove: (name, vars, _node, _similar) => formatter.remove(name, defaultVars(vars)),\n toggle: (name, vars, _node) => formatter.toggle(name, defaultVars(vars)),\n formatChanged: (_rfl, formats, callback, similar, vars) => formatter.formatChanged(formats, callback, similar, vars)\n },\n editor: {\n getContent: args => editor.getContent(args),\n setContent: (content, args) => {\n return {\n content: editor.setContent(content, args),\n html: ''\n };\n },\n insertContent: (content, _details) => {\n editor.insertContent(content);\n return '';\n },\n addVisual: editor.addVisual\n },\n selection: { getContent: (_format, args) => selection.getContent(args) },\n autocompleter: {\n addDecoration: autocompleter.addDecoration,\n removeDecoration: autocompleter.removeDecoration\n },\n raw: { getModel: () => Optional.some(raw.getRawModel()) }\n };\n };\n const makeNoopAdaptor = () => {\n const nul = constant(null);\n const empty = constant('');\n return {\n init: { bindEvents: noop },\n undoManager: {\n beforeChange: noop,\n add: nul,\n undo: nul,\n redo: nul,\n clear: noop,\n reset: noop,\n hasUndo: never,\n hasRedo: never,\n transact: nul,\n ignore: noop,\n extra: noop\n },\n formatter: {\n match: never,\n matchAll: constant([]),\n matchNode: constant(undefined),\n canApply: never,\n closest: empty,\n apply: noop,\n remove: noop,\n toggle: noop,\n formatChanged: constant({ unbind: noop })\n },\n editor: {\n getContent: empty,\n setContent: constant({\n content: '',\n html: ''\n }),\n insertContent: constant(''),\n addVisual: noop\n },\n selection: { getContent: empty },\n autocompleter: {\n addDecoration: noop,\n removeDecoration: noop\n },\n raw: { getModel: constant(Optional.none()) }\n };\n };\n const isRtc = editor => has$2(editor.plugins, 'rtc');\n const getRtcSetup = editor => get$a(editor.plugins, 'rtc').bind(rtcPlugin => Optional.from(rtcPlugin.setup));\n const setup$t = editor => {\n const editorCast = editor;\n return getRtcSetup(editor).fold(() => {\n editorCast.rtcInstance = makePlainAdaptor(editor);\n return Optional.none();\n }, setup => {\n editorCast.rtcInstance = makeNoopAdaptor();\n return Optional.some(() => setup().then(rtcEditor => {\n editorCast.rtcInstance = makeRtcAdaptor(rtcEditor);\n return rtcEditor.rtc.isRemote;\n }));\n });\n };\n const getRtcInstanceWithFallback = editor => editor.rtcInstance ? editor.rtcInstance : makePlainAdaptor(editor);\n const getRtcInstanceWithError = editor => {\n const rtcInstance = editor.rtcInstance;\n if (!rtcInstance) {\n throw new Error('Failed to get RTC instance not yet initialized.');\n } else {\n return rtcInstance;\n }\n };\n const beforeChange = (editor, locks, beforeBookmark) => {\n getRtcInstanceWithError(editor).undoManager.beforeChange(locks, beforeBookmark);\n };\n const addUndoLevel = (editor, undoManager, index, locks, beforeBookmark, level, event) => getRtcInstanceWithError(editor).undoManager.add(undoManager, index, locks, beforeBookmark, level, event);\n const undo = (editor, undoManager, locks, index) => getRtcInstanceWithError(editor).undoManager.undo(undoManager, locks, index);\n const redo = (editor, index, data) => getRtcInstanceWithError(editor).undoManager.redo(index, data);\n const clear = (editor, undoManager, index) => {\n getRtcInstanceWithError(editor).undoManager.clear(undoManager, index);\n };\n const reset = (editor, undoManager) => {\n getRtcInstanceWithError(editor).undoManager.reset(undoManager);\n };\n const hasUndo = (editor, undoManager, index) => getRtcInstanceWithError(editor).undoManager.hasUndo(undoManager, index);\n const hasRedo = (editor, undoManager, index) => getRtcInstanceWithError(editor).undoManager.hasRedo(undoManager, index);\n const transact = (editor, undoManager, locks, callback) => getRtcInstanceWithError(editor).undoManager.transact(undoManager, locks, callback);\n const ignore = (editor, locks, callback) => {\n getRtcInstanceWithError(editor).undoManager.ignore(locks, callback);\n };\n const extra = (editor, undoManager, index, callback1, callback2) => {\n getRtcInstanceWithError(editor).undoManager.extra(undoManager, index, callback1, callback2);\n };\n const matchFormat = (editor, name, vars, node, similar) => getRtcInstanceWithError(editor).formatter.match(name, vars, node, similar);\n const matchAllFormats = (editor, names, vars) => getRtcInstanceWithError(editor).formatter.matchAll(names, vars);\n const matchNodeFormat = (editor, node, name, vars, similar) => getRtcInstanceWithError(editor).formatter.matchNode(node, name, vars, similar);\n const canApplyFormat = (editor, name) => getRtcInstanceWithError(editor).formatter.canApply(name);\n const closestFormat = (editor, names) => getRtcInstanceWithError(editor).formatter.closest(names);\n const applyFormat = (editor, name, vars, node) => {\n getRtcInstanceWithError(editor).formatter.apply(name, vars, node);\n };\n const removeFormat = (editor, name, vars, node, similar) => {\n getRtcInstanceWithError(editor).formatter.remove(name, vars, node, similar);\n };\n const toggleFormat = (editor, name, vars, node) => {\n getRtcInstanceWithError(editor).formatter.toggle(name, vars, node);\n };\n const formatChanged = (editor, registeredFormatListeners, formats, callback, similar, vars) => getRtcInstanceWithError(editor).formatter.formatChanged(registeredFormatListeners, formats, callback, similar, vars);\n const getContent$2 = (editor, args) => getRtcInstanceWithFallback(editor).editor.getContent(args);\n const setContent$2 = (editor, content, args) => getRtcInstanceWithFallback(editor).editor.setContent(content, args);\n const insertContent$1 = (editor, value, details) => getRtcInstanceWithFallback(editor).editor.insertContent(value, details);\n const getSelectedContent = (editor, format, args) => getRtcInstanceWithError(editor).selection.getContent(format, args);\n const addVisual$1 = (editor, elm) => getRtcInstanceWithError(editor).editor.addVisual(elm);\n const bindEvents = editor => getRtcInstanceWithError(editor).init.bindEvents();\n\n const getContent$1 = (editor, args = {}) => {\n const format = args.format ? args.format : 'html';\n return getSelectedContent(editor, format, args);\n };\n\n const removeEmpty = text => {\n if (text.dom.length === 0) {\n remove$4(text);\n return Optional.none();\n } else {\n return Optional.some(text);\n }\n };\n const walkPastBookmark = (node, start) => node.filter(elm => BookmarkManager.isBookmarkNode(elm.dom)).bind(start ? nextSibling : prevSibling);\n const merge$1 = (outer, inner, rng, start, schema) => {\n const outerElm = outer.dom;\n const innerElm = inner.dom;\n const oldLength = start ? outerElm.length : innerElm.length;\n if (start) {\n mergeTextNodes(outerElm, innerElm, schema, false, !start);\n rng.setStart(innerElm, oldLength);\n } else {\n mergeTextNodes(innerElm, outerElm, schema, false, !start);\n rng.setEnd(innerElm, oldLength);\n }\n };\n const normalizeTextIfRequired = (inner, start, schema) => {\n parent(inner).each(root => {\n const text = inner.dom;\n if (start && needsToBeNbspLeft(root, CaretPosition(text, 0), schema)) {\n normalizeWhitespaceAfter(text, 0, schema);\n } else if (!start && needsToBeNbspRight(root, CaretPosition(text, text.length), schema)) {\n normalizeWhitespaceBefore(text, text.length, schema);\n }\n });\n };\n const mergeAndNormalizeText = (outerNode, innerNode, rng, start, schema) => {\n outerNode.bind(outer => {\n const normalizer = start ? normalizeWhitespaceBefore : normalizeWhitespaceAfter;\n normalizer(outer.dom, start ? outer.dom.length : 0, schema);\n return innerNode.filter(isText$c).map(inner => merge$1(outer, inner, rng, start, schema));\n }).orThunk(() => {\n const innerTextNode = walkPastBookmark(innerNode, start).or(innerNode).filter(isText$c);\n return innerTextNode.map(inner => normalizeTextIfRequired(inner, start, schema));\n });\n };\n const rngSetContent = (rng, fragment, schema) => {\n const firstChild = Optional.from(fragment.firstChild).map(SugarElement.fromDom);\n const lastChild = Optional.from(fragment.lastChild).map(SugarElement.fromDom);\n rng.deleteContents();\n rng.insertNode(fragment);\n const prevText = firstChild.bind(prevSibling).filter(isText$c).bind(removeEmpty);\n const nextText = lastChild.bind(nextSibling).filter(isText$c).bind(removeEmpty);\n mergeAndNormalizeText(prevText, firstChild, rng, true, schema);\n mergeAndNormalizeText(nextText, lastChild, rng, false, schema);\n rng.collapse(false);\n };\n const setupArgs$2 = (args, content) => ({\n format: 'html',\n ...args,\n set: true,\n selection: true,\n content\n });\n const cleanContent = (editor, args) => {\n if (args.format !== 'raw') {\n const rng = editor.selection.getRng();\n const contextBlock = editor.dom.getParent(rng.commonAncestorContainer, editor.dom.isBlock);\n const contextArgs = contextBlock ? { context: contextBlock.nodeName.toLowerCase() } : {};\n const node = editor.parser.parse(args.content, {\n forced_root_block: false,\n ...contextArgs,\n ...args\n });\n return HtmlSerializer({ validate: false }, editor.schema).serialize(node);\n } else {\n return args.content;\n }\n };\n const setContent$1 = (editor, content, args = {}) => {\n const defaultedArgs = setupArgs$2(args, content);\n preProcessSetContent(editor, defaultedArgs).each(updatedArgs => {\n const cleanedContent = cleanContent(editor, updatedArgs);\n const rng = editor.selection.getRng();\n rngSetContent(rng, rng.createContextualFragment(cleanedContent), editor.schema);\n editor.selection.setRng(rng);\n scrollRangeIntoView(editor, rng);\n postProcessSetContent(editor, cleanedContent, updatedArgs);\n });\n };\n\n const deleteFromCallbackMap = (callbackMap, selector, callback) => {\n if (has$2(callbackMap, selector)) {\n const newCallbacks = filter$5(callbackMap[selector], cb => cb !== callback);\n if (newCallbacks.length === 0) {\n delete callbackMap[selector];\n } else {\n callbackMap[selector] = newCallbacks;\n }\n }\n };\n var SelectorChanged = (dom, editor) => {\n let selectorChangedData;\n let currentSelectors;\n const findMatchingNode = (selector, nodes) => find$2(nodes, node => dom.is(node, selector));\n const getParents = elem => dom.getParents(elem, undefined, dom.getRoot());\n const setup = () => {\n selectorChangedData = {};\n currentSelectors = {};\n editor.on('NodeChange', e => {\n const node = e.element;\n const parents = getParents(node);\n const matchedSelectors = {};\n each$d(selectorChangedData, (callbacks, selector) => {\n findMatchingNode(selector, parents).each(node => {\n if (!currentSelectors[selector]) {\n each$e(callbacks, callback => {\n callback(true, {\n node,\n selector,\n parents\n });\n });\n currentSelectors[selector] = callbacks;\n }\n matchedSelectors[selector] = callbacks;\n });\n });\n each$d(currentSelectors, (callbacks, selector) => {\n if (!matchedSelectors[selector]) {\n delete currentSelectors[selector];\n each$e(callbacks, callback => {\n callback(false, {\n node,\n selector,\n parents\n });\n });\n }\n });\n });\n };\n return {\n selectorChangedWithUnbind: (selector, callback) => {\n if (!selectorChangedData) {\n setup();\n }\n if (!selectorChangedData[selector]) {\n selectorChangedData[selector] = [];\n }\n selectorChangedData[selector].push(callback);\n findMatchingNode(selector, getParents(editor.selection.getStart())).each(() => {\n currentSelectors[selector] = selectorChangedData[selector];\n });\n return {\n unbind: () => {\n deleteFromCallbackMap(selectorChangedData, selector, callback);\n deleteFromCallbackMap(currentSelectors, selector, callback);\n }\n };\n }\n };\n };\n\n const isAttachedToDom = node => {\n return !!(node && node.ownerDocument) && contains(SugarElement.fromDom(node.ownerDocument), SugarElement.fromDom(node));\n };\n const isValidRange = rng => {\n if (!rng) {\n return false;\n } else {\n return isAttachedToDom(rng.startContainer) && isAttachedToDom(rng.endContainer);\n }\n };\n const EditorSelection = (dom, win, serializer, editor) => {\n let selectedRange;\n let explicitRange;\n const {selectorChangedWithUnbind} = SelectorChanged(dom, editor);\n const setCursorLocation = (node, offset) => {\n const rng = dom.createRng();\n if (isNonNullable(node) && isNonNullable(offset)) {\n rng.setStart(node, offset);\n rng.setEnd(node, offset);\n setRng(rng);\n collapse(false);\n } else {\n moveEndPoint(dom, rng, editor.getBody(), true);\n setRng(rng);\n }\n };\n const getContent = args => getContent$1(editor, args);\n const setContent = (content, args) => setContent$1(editor, content, args);\n const getStart$1 = real => getStart(editor.getBody(), getRng$1(), real);\n const getEnd$1 = real => getEnd(editor.getBody(), getRng$1(), real);\n const getBookmark = (type, normalized) => bookmarkManager.getBookmark(type, normalized);\n const moveToBookmark = bookmark => bookmarkManager.moveToBookmark(bookmark);\n const select$1 = (node, content) => {\n select(dom, node, content).each(setRng);\n return node;\n };\n const isCollapsed = () => {\n const rng = getRng$1(), sel = getSel();\n if (!rng || rng.item) {\n return false;\n }\n if (rng.compareEndPoints) {\n return rng.compareEndPoints('StartToEnd', rng) === 0;\n }\n return !sel || rng.collapsed;\n };\n const isEditable = () => {\n if (editor.mode.isReadOnly()) {\n return false;\n }\n const rng = getRng$1();\n const fakeSelectedElements = editor.getBody().querySelectorAll('[data-mce-selected=\"1\"]');\n if (fakeSelectedElements.length > 0) {\n return forall(fakeSelectedElements, el => dom.isEditable(el.parentElement));\n } else {\n return isEditableRange(dom, rng);\n }\n };\n const collapse = toStart => {\n const rng = getRng$1();\n rng.collapse(!!toStart);\n setRng(rng);\n };\n const getSel = () => win.getSelection ? win.getSelection() : win.document.selection;\n const getRng$1 = () => {\n let rng;\n const tryCompareBoundaryPoints = (how, sourceRange, destinationRange) => {\n try {\n return sourceRange.compareBoundaryPoints(how, destinationRange);\n } catch (_a) {\n return -1;\n }\n };\n const doc = win.document;\n if (isNonNullable(editor.bookmark) && !hasFocus(editor)) {\n const bookmark = getRng(editor);\n if (bookmark.isSome()) {\n return bookmark.map(r => processRanges(editor, [r])[0]).getOr(doc.createRange());\n }\n }\n try {\n const selection = getSel();\n if (selection && !isRestrictedNode(selection.anchorNode)) {\n if (selection.rangeCount > 0) {\n rng = selection.getRangeAt(0);\n } else {\n rng = doc.createRange();\n }\n rng = processRanges(editor, [rng])[0];\n }\n } catch (_a) {\n }\n if (!rng) {\n rng = doc.createRange();\n }\n if (isDocument$1(rng.startContainer) && rng.collapsed) {\n const elm = dom.getRoot();\n rng.setStart(elm, 0);\n rng.setEnd(elm, 0);\n }\n if (selectedRange && explicitRange) {\n if (tryCompareBoundaryPoints(rng.START_TO_START, rng, selectedRange) === 0 && tryCompareBoundaryPoints(rng.END_TO_END, rng, selectedRange) === 0) {\n rng = explicitRange;\n } else {\n selectedRange = null;\n explicitRange = null;\n }\n }\n return rng;\n };\n const setRng = (rng, forward) => {\n if (!isValidRange(rng)) {\n return;\n }\n const sel = getSel();\n const evt = editor.dispatch('SetSelectionRange', {\n range: rng,\n forward\n });\n rng = evt.range;\n if (sel) {\n explicitRange = rng;\n try {\n sel.removeAllRanges();\n sel.addRange(rng);\n } catch (_a) {\n }\n if (forward === false && sel.extend) {\n sel.collapse(rng.endContainer, rng.endOffset);\n sel.extend(rng.startContainer, rng.startOffset);\n }\n selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;\n }\n if (!rng.collapsed && rng.startContainer === rng.endContainer && (sel === null || sel === void 0 ? void 0 : sel.setBaseAndExtent)) {\n if (rng.endOffset - rng.startOffset < 2) {\n if (rng.startContainer.hasChildNodes()) {\n const node = rng.startContainer.childNodes[rng.startOffset];\n if (node && node.nodeName === 'IMG') {\n sel.setBaseAndExtent(rng.startContainer, rng.startOffset, rng.endContainer, rng.endOffset);\n if (sel.anchorNode !== rng.startContainer || sel.focusNode !== rng.endContainer) {\n sel.setBaseAndExtent(node, 0, node, 1);\n }\n }\n }\n }\n }\n editor.dispatch('AfterSetSelectionRange', {\n range: rng,\n forward\n });\n };\n const setNode = elm => {\n setContent(dom.getOuterHTML(elm));\n return elm;\n };\n const getNode$1 = () => getNode(editor.getBody(), getRng$1());\n const getSelectedBlocks$1 = (startElm, endElm) => getSelectedBlocks(dom, getRng$1(), startElm, endElm);\n const isForward = () => {\n const sel = getSel();\n const anchorNode = sel === null || sel === void 0 ? void 0 : sel.anchorNode;\n const focusNode = sel === null || sel === void 0 ? void 0 : sel.focusNode;\n if (!sel || !anchorNode || !focusNode || isRestrictedNode(anchorNode) || isRestrictedNode(focusNode)) {\n return true;\n }\n const anchorRange = dom.createRng();\n const focusRange = dom.createRng();\n try {\n anchorRange.setStart(anchorNode, sel.anchorOffset);\n anchorRange.collapse(true);\n focusRange.setStart(focusNode, sel.focusOffset);\n focusRange.collapse(true);\n } catch (_a) {\n return true;\n }\n return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0;\n };\n const normalize = () => {\n const rng = getRng$1();\n const sel = getSel();\n if (!hasMultipleRanges(sel) && hasAnyRanges(editor)) {\n const normRng = normalize$2(dom, rng);\n normRng.each(normRng => {\n setRng(normRng, isForward());\n });\n return normRng.getOr(rng);\n }\n return rng;\n };\n const selectorChanged = (selector, callback) => {\n selectorChangedWithUnbind(selector, callback);\n return exports;\n };\n const getScrollContainer = () => {\n let scrollContainer;\n let node = dom.getRoot();\n while (node && node.nodeName !== 'BODY') {\n if (node.scrollHeight > node.clientHeight) {\n scrollContainer = node;\n break;\n }\n node = node.parentNode;\n }\n return scrollContainer;\n };\n const scrollIntoView = (elm, alignToTop) => {\n if (isNonNullable(elm)) {\n scrollElementIntoView(editor, elm, alignToTop);\n } else {\n scrollRangeIntoView(editor, getRng$1(), alignToTop);\n }\n };\n const placeCaretAt = (clientX, clientY) => setRng(fromPoint(clientX, clientY, editor.getDoc()));\n const getBoundingClientRect = () => {\n const rng = getRng$1();\n return rng.collapsed ? CaretPosition.fromRangeStart(rng).getClientRects()[0] : rng.getBoundingClientRect();\n };\n const destroy = () => {\n win = selectedRange = explicitRange = null;\n controlSelection.destroy();\n };\n const expand = (options = { type: 'word' }) => setRng(RangeUtils(dom).expand(getRng$1(), options));\n const exports = {\n dom,\n win,\n serializer,\n editor,\n expand,\n collapse,\n setCursorLocation,\n getContent,\n setContent,\n getBookmark,\n moveToBookmark,\n select: select$1,\n isCollapsed,\n isEditable,\n isForward,\n setNode,\n getNode: getNode$1,\n getSel,\n setRng,\n getRng: getRng$1,\n getStart: getStart$1,\n getEnd: getEnd$1,\n getSelectedBlocks: getSelectedBlocks$1,\n normalize,\n selectorChanged,\n selectorChangedWithUnbind,\n getScrollContainer,\n scrollIntoView,\n placeCaretAt,\n getBoundingClientRect,\n destroy\n };\n const bookmarkManager = BookmarkManager(exports);\n const controlSelection = ControlSelection(exports, editor);\n exports.bookmarkManager = bookmarkManager;\n exports.controlSelection = controlSelection;\n return exports;\n };\n\n const addNodeFilter = (settings, htmlParser, schema) => {\n htmlParser.addNodeFilter('br', (nodes, _, args) => {\n const blockElements = Tools.extend({}, schema.getBlockElements());\n const nonEmptyElements = schema.getNonEmptyElements();\n const whitespaceElements = schema.getWhitespaceElements();\n blockElements.body = 1;\n const isBlock = node => node.name in blockElements || isTransparentAstBlock(schema, node);\n for (let i = 0, l = nodes.length; i < l; i++) {\n let node = nodes[i];\n let parent = node.parent;\n if (parent && isBlock(parent) && node === parent.lastChild) {\n let prev = node.prev;\n while (prev) {\n const prevName = prev.name;\n if (prevName !== 'span' || prev.attr('data-mce-type') !== 'bookmark') {\n if (prevName === 'br') {\n node = null;\n }\n break;\n }\n prev = prev.prev;\n }\n if (node) {\n node.remove();\n if (isEmpty(schema, nonEmptyElements, whitespaceElements, parent)) {\n const elementRule = schema.getElementRule(parent.name);\n if (elementRule) {\n if (elementRule.removeEmpty) {\n parent.remove();\n } else if (elementRule.paddEmpty) {\n paddEmptyNode(settings, args, isBlock, parent);\n }\n }\n }\n }\n } else {\n let lastParent = node;\n while (parent && parent.firstChild === lastParent && parent.lastChild === lastParent) {\n lastParent = parent;\n if (blockElements[parent.name]) {\n break;\n }\n parent = parent.parent;\n }\n if (lastParent === parent) {\n const textNode = new AstNode('#text', 3);\n textNode.value = nbsp;\n node.replace(textNode);\n }\n }\n }\n });\n };\n\n const register$3 = (htmlParser, settings, dom) => {\n htmlParser.addAttributeFilter('data-mce-tabindex', (nodes, name) => {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n node.attr('tabindex', node.attr('data-mce-tabindex'));\n node.attr(name, null);\n }\n });\n htmlParser.addAttributeFilter('src,href,style', (nodes, name) => {\n const internalName = 'data-mce-' + name;\n const urlConverter = settings.url_converter;\n const urlConverterScope = settings.url_converter_scope;\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n let value = node.attr(internalName);\n if (value !== undefined) {\n node.attr(name, value.length > 0 ? value : null);\n node.attr(internalName, null);\n } else {\n value = node.attr(name);\n if (name === 'style') {\n value = dom.serializeStyle(dom.parseStyle(value), node.name);\n } else if (urlConverter) {\n value = urlConverter.call(urlConverterScope, value, name, node.name);\n }\n node.attr(name, value.length > 0 ? value : null);\n }\n }\n });\n htmlParser.addAttributeFilter('class', nodes => {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n let value = node.attr('class');\n if (value) {\n value = value.replace(/(?:^|\\s)mce-item-\\w+(?!\\S)/g, '');\n node.attr('class', value.length > 0 ? value : null);\n }\n }\n });\n htmlParser.addAttributeFilter('data-mce-type', (nodes, name, args) => {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n if (node.attr('data-mce-type') === 'bookmark' && !args.cleanup) {\n const hasChildren = Optional.from(node.firstChild).exists(firstChild => {\n var _a;\n return !isZwsp((_a = firstChild.value) !== null && _a !== void 0 ? _a : '');\n });\n if (hasChildren) {\n node.unwrap();\n } else {\n node.remove();\n }\n }\n }\n });\n htmlParser.addNodeFilter('script,style', (nodes, name) => {\n var _a;\n const trim = value => {\n return value.replace(/()/g, '\\n').replace(/^[\\r\\n]*|[\\r\\n]*$/g, '').replace(/^\\s*(()?|\\s*\\/\\/\\s*\\]\\]>(-->)?|\\/\\/\\s*(-->)?|\\]\\]>|\\/\\*\\s*-->\\s*\\*\\/|\\s*-->\\s*)\\s*$/g, '');\n };\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n const firstChild = node.firstChild;\n const value = (_a = firstChild === null || firstChild === void 0 ? void 0 : firstChild.value) !== null && _a !== void 0 ? _a : '';\n if (name === 'script') {\n const type = node.attr('type');\n if (type) {\n node.attr('type', type === 'mce-no/type' ? null : type.replace(/^mce\\-/, ''));\n }\n if (settings.element_format === 'xhtml' && firstChild && value.length > 0) {\n firstChild.value = '// ';\n }\n } else {\n if (settings.element_format === 'xhtml' && firstChild && value.length > 0) {\n firstChild.value = '';\n }\n }\n }\n });\n htmlParser.addNodeFilter('#comment', nodes => {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n const value = node.value;\n if (settings.preserve_cdata && (value === null || value === void 0 ? void 0 : value.indexOf('[CDATA[')) === 0) {\n node.name = '#cdata';\n node.type = 4;\n node.value = dom.decode(value.replace(/^\\[CDATA\\[|\\]\\]$/g, ''));\n } else if ((value === null || value === void 0 ? void 0 : value.indexOf('mce:protected ')) === 0) {\n node.name = '#text';\n node.type = 3;\n node.raw = true;\n node.value = unescape(value).substr(14);\n }\n }\n });\n htmlParser.addNodeFilter('xml:namespace,input', (nodes, name) => {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n if (node.type === 7) {\n node.remove();\n } else if (node.type === 1) {\n if (name === 'input' && !node.attr('type')) {\n node.attr('type', 'text');\n }\n }\n }\n });\n htmlParser.addAttributeFilter('data-mce-type', nodes => {\n each$e(nodes, node => {\n if (node.attr('data-mce-type') === 'format-caret') {\n if (node.isEmpty(htmlParser.schema.getNonEmptyElements())) {\n node.remove();\n } else {\n node.unwrap();\n }\n }\n });\n });\n htmlParser.addAttributeFilter('data-mce-src,data-mce-href,data-mce-style,' + 'data-mce-selected,data-mce-expando,data-mce-block,' + 'data-mce-type,data-mce-resize,data-mce-placeholder', (nodes, name) => {\n let i = nodes.length;\n while (i--) {\n nodes[i].attr(name, null);\n }\n });\n if (settings.remove_trailing_brs) {\n addNodeFilter(settings, htmlParser, htmlParser.schema);\n }\n };\n const trimTrailingBr = rootNode => {\n const isBr = node => {\n return (node === null || node === void 0 ? void 0 : node.name) === 'br';\n };\n const brNode1 = rootNode.lastChild;\n if (isBr(brNode1)) {\n const brNode2 = brNode1.prev;\n if (isBr(brNode2)) {\n brNode1.remove();\n brNode2.remove();\n }\n }\n };\n\n const preProcess$1 = (editor, node, args) => {\n let oldDoc;\n const dom = editor.dom;\n let clonedNode = node.cloneNode(true);\n const impl = document.implementation;\n if (impl.createHTMLDocument) {\n const doc = impl.createHTMLDocument('');\n Tools.each(clonedNode.nodeName === 'BODY' ? clonedNode.childNodes : [clonedNode], node => {\n doc.body.appendChild(doc.importNode(node, true));\n });\n if (clonedNode.nodeName !== 'BODY') {\n clonedNode = doc.body.firstChild;\n } else {\n clonedNode = doc.body;\n }\n oldDoc = dom.doc;\n dom.doc = doc;\n }\n firePreProcess(editor, {\n ...args,\n node: clonedNode\n });\n if (oldDoc) {\n dom.doc = oldDoc;\n }\n return clonedNode;\n };\n const shouldFireEvent = (editor, args) => {\n return isNonNullable(editor) && editor.hasEventListeners('PreProcess') && !args.no_events;\n };\n const process$1 = (editor, node, args) => {\n return shouldFireEvent(editor, args) ? preProcess$1(editor, node, args) : node;\n };\n\n const addTempAttr = (htmlParser, tempAttrs, name) => {\n if (Tools.inArray(tempAttrs, name) === -1) {\n htmlParser.addAttributeFilter(name, (nodes, name) => {\n let i = nodes.length;\n while (i--) {\n nodes[i].attr(name, null);\n }\n });\n tempAttrs.push(name);\n }\n };\n const postProcess = (editor, args, content) => {\n if (!args.no_events && editor) {\n const outArgs = firePostProcess(editor, {\n ...args,\n content\n });\n return outArgs.content;\n } else {\n return content;\n }\n };\n const getHtmlFromNode = (dom, node, args) => {\n const html = trim$2(args.getInner ? node.innerHTML : dom.getOuterHTML(node));\n return args.selection || isWsPreserveElement(SugarElement.fromDom(node)) ? html : Tools.trim(html);\n };\n const parseHtml = (htmlParser, html, args) => {\n const parserArgs = args.selection ? {\n forced_root_block: false,\n ...args\n } : args;\n const rootNode = htmlParser.parse(html, parserArgs);\n trimTrailingBr(rootNode);\n return rootNode;\n };\n const serializeNode = (settings, schema, node) => {\n const htmlSerializer = HtmlSerializer(settings, schema);\n return htmlSerializer.serialize(node);\n };\n const toHtml = (editor, settings, schema, rootNode, args) => {\n const content = serializeNode(settings, schema, rootNode);\n return postProcess(editor, args, content);\n };\n const DomSerializerImpl = (settings, editor) => {\n const tempAttrs = ['data-mce-selected'];\n const defaultedSettings = {\n entity_encoding: 'named',\n remove_trailing_brs: true,\n pad_empty_with_br: false,\n ...settings\n };\n const dom = editor && editor.dom ? editor.dom : DOMUtils.DOM;\n const schema = editor && editor.schema ? editor.schema : Schema(defaultedSettings);\n const htmlParser = DomParser(defaultedSettings, schema);\n register$3(htmlParser, defaultedSettings, dom);\n const serialize = (node, parserArgs = {}) => {\n const args = {\n format: 'html',\n ...parserArgs\n };\n const targetNode = process$1(editor, node, args);\n const html = getHtmlFromNode(dom, targetNode, args);\n const rootNode = parseHtml(htmlParser, html, args);\n return args.format === 'tree' ? rootNode : toHtml(editor, defaultedSettings, schema, rootNode, args);\n };\n return {\n schema,\n addNodeFilter: htmlParser.addNodeFilter,\n addAttributeFilter: htmlParser.addAttributeFilter,\n serialize: serialize,\n addRules: schema.addValidElements,\n setRules: schema.setValidElements,\n addTempAttr: curry(addTempAttr, htmlParser, tempAttrs),\n getTempAttrs: constant(tempAttrs),\n getNodeFilters: htmlParser.getNodeFilters,\n getAttributeFilters: htmlParser.getAttributeFilters,\n removeNodeFilter: htmlParser.removeNodeFilter,\n removeAttributeFilter: htmlParser.removeAttributeFilter\n };\n };\n\n const DomSerializer = (settings, editor) => {\n const domSerializer = DomSerializerImpl(settings, editor);\n return {\n schema: domSerializer.schema,\n addNodeFilter: domSerializer.addNodeFilter,\n addAttributeFilter: domSerializer.addAttributeFilter,\n serialize: domSerializer.serialize,\n addRules: domSerializer.addRules,\n setRules: domSerializer.setRules,\n addTempAttr: domSerializer.addTempAttr,\n getTempAttrs: domSerializer.getTempAttrs,\n getNodeFilters: domSerializer.getNodeFilters,\n getAttributeFilters: domSerializer.getAttributeFilters,\n removeNodeFilter: domSerializer.removeNodeFilter,\n removeAttributeFilter: domSerializer.removeAttributeFilter\n };\n };\n\n const defaultFormat$1 = 'html';\n const setupArgs$1 = (args, format) => ({\n ...args,\n format,\n get: true,\n getInner: true\n });\n const getContent = (editor, args = {}) => {\n const format = args.format ? args.format : defaultFormat$1;\n const defaultedArgs = setupArgs$1(args, format);\n return preProcessGetContent(editor, defaultedArgs).fold(identity, updatedArgs => {\n const content = getContent$2(editor, updatedArgs);\n return postProcessGetContent(editor, content, updatedArgs);\n });\n };\n\n const defaultFormat = 'html';\n const setupArgs = (args, content) => ({\n format: defaultFormat,\n ...args,\n set: true,\n content\n });\n const setContent = (editor, content, args = {}) => {\n const defaultedArgs = setupArgs(args, content);\n return preProcessSetContent(editor, defaultedArgs).map(updatedArgs => {\n const result = setContent$2(editor, updatedArgs.content, updatedArgs);\n postProcessSetContent(editor, result.html, updatedArgs);\n return result.content;\n }).getOr(content);\n };\n\n const removedOptions = ('autoresize_on_init,content_editable_state,padd_empty_with_br,block_elements,' + 'boolean_attributes,editor_deselector,editor_selector,elements,file_browser_callback_types,filepicker_validator_handler,' + 'force_hex_style_colors,force_p_newlines,gecko_spellcheck,images_dataimg_filter,media_scripts,mode,move_caret_before_on_enter_elements,' + 'non_empty_elements,self_closing_elements,short_ended_elements,special,spellchecker_select_languages,spellchecker_whitelist,' + 'tab_focus,tabfocus_elements,table_responsive_width,text_block_elements,text_inline_elements,toolbar_drawer,types,validate,whitespace_elements,' + 'paste_enable_default_filters,paste_filter_drop,paste_word_valid_elements,paste_retain_style_properties,paste_convert_word_fake_lists,' + 'template_cdate_classes,template_mdate_classes,template_selected_content_classes,template_preview_replace_values,template_replace_values,templates,template_cdate_format,template_mdate_format').split(',');\n const deprecatedOptions = [];\n const removedPlugins = 'bbcode,colorpicker,contextmenu,fullpage,legacyoutput,spellchecker,template,textcolor,rtc'.split(',');\n const deprecatedPlugins = [];\n const getMatchingOptions = (options, searchingFor) => {\n const settingNames = filter$5(searchingFor, setting => has$2(options, setting));\n return sort(settingNames);\n };\n const getRemovedOptions = options => {\n const settingNames = getMatchingOptions(options, removedOptions);\n const forcedRootBlock = options.forced_root_block;\n if (forcedRootBlock === false || forcedRootBlock === '') {\n settingNames.push('forced_root_block (false only)');\n }\n return sort(settingNames);\n };\n const getDeprecatedOptions = options => getMatchingOptions(options, deprecatedOptions);\n const getMatchingPlugins = (options, searchingFor) => {\n const plugins = Tools.makeMap(options.plugins, ' ');\n const hasPlugin = plugin => has$2(plugins, plugin);\n const pluginNames = filter$5(searchingFor, hasPlugin);\n return sort(pluginNames);\n };\n const getRemovedPlugins = options => getMatchingPlugins(options, removedPlugins);\n const getDeprecatedPlugins = options => getMatchingPlugins(options, deprecatedPlugins.map(entry => entry.name));\n const logRemovedWarnings = (rawOptions, normalizedOptions) => {\n const removedOptions = getRemovedOptions(rawOptions);\n const removedPlugins = getRemovedPlugins(normalizedOptions);\n const hasRemovedPlugins = removedPlugins.length > 0;\n const hasRemovedOptions = removedOptions.length > 0;\n const isLegacyMobileTheme = normalizedOptions.theme === 'mobile';\n if (hasRemovedPlugins || hasRemovedOptions || isLegacyMobileTheme) {\n const listJoiner = '\\n- ';\n const themesMessage = isLegacyMobileTheme ? `\\n\\nThemes:${ listJoiner }mobile` : '';\n const pluginsMessage = hasRemovedPlugins ? `\\n\\nPlugins:${ listJoiner }${ removedPlugins.join(listJoiner) }` : '';\n const optionsMessage = hasRemovedOptions ? `\\n\\nOptions:${ listJoiner }${ removedOptions.join(listJoiner) }` : '';\n console.warn('The following deprecated features are currently enabled and have been removed in TinyMCE 7.0. These features will no longer work and should be removed from the TinyMCE configuration. ' + 'See https://www.tiny.cloud/docs/tinymce/7/migration-from-6x/ for more information.' + themesMessage + pluginsMessage + optionsMessage);\n }\n };\n const getPluginDescription = name => find$2(deprecatedPlugins, entry => entry.name === name).fold(() => name, entry => {\n if (entry.replacedWith) {\n return `${ name }, replaced by ${ entry.replacedWith }`;\n } else {\n return name;\n }\n });\n const logDeprecatedWarnings = (rawOptions, normalizedOptions) => {\n const deprecatedOptions = getDeprecatedOptions(rawOptions);\n const deprecatedPlugins = getDeprecatedPlugins(normalizedOptions);\n const hasDeprecatedPlugins = deprecatedPlugins.length > 0;\n const hasDeprecatedOptions = deprecatedOptions.length > 0;\n if (hasDeprecatedPlugins || hasDeprecatedOptions) {\n const listJoiner = '\\n- ';\n const pluginsMessage = hasDeprecatedPlugins ? `\\n\\nPlugins:${ listJoiner }${ deprecatedPlugins.map(getPluginDescription).join(listJoiner) }` : '';\n const optionsMessage = hasDeprecatedOptions ? `\\n\\nOptions:${ listJoiner }${ deprecatedOptions.join(listJoiner) }` : '';\n console.warn('The following deprecated features are currently enabled but will be removed soon.' + pluginsMessage + optionsMessage);\n }\n };\n const logWarnings = (rawOptions, normalizedOptions) => {\n logRemovedWarnings(rawOptions, normalizedOptions);\n logDeprecatedWarnings(rawOptions, normalizedOptions);\n };\n\n const DOM$8 = DOMUtils.DOM;\n const restoreOriginalStyles = editor => {\n DOM$8.setStyle(editor.id, 'display', editor.orgDisplay);\n };\n const safeDestroy = x => Optional.from(x).each(x => x.destroy());\n const clearDomReferences = editor => {\n const ed = editor;\n ed.contentAreaContainer = ed.formElement = ed.container = ed.editorContainer = null;\n ed.bodyElement = ed.contentDocument = ed.contentWindow = null;\n ed.iframeElement = ed.targetElm = null;\n const selection = editor.selection;\n if (selection) {\n const dom = selection.dom;\n ed.selection = selection.win = selection.dom = dom.doc = null;\n }\n };\n const restoreForm = editor => {\n const form = editor.formElement;\n if (form) {\n if (form._mceOldSubmit) {\n form.submit = form._mceOldSubmit;\n delete form._mceOldSubmit;\n }\n DOM$8.unbind(form, 'submit reset', editor.formEventDelegate);\n }\n };\n const remove$1 = editor => {\n if (!editor.removed) {\n const {_selectionOverrides, editorUpload} = editor;\n const body = editor.getBody();\n const element = editor.getElement();\n if (body) {\n editor.save({ is_removing: true });\n }\n editor.removed = true;\n editor.unbindAllNativeEvents();\n if (editor.hasHiddenInput && isNonNullable(element === null || element === void 0 ? void 0 : element.nextSibling)) {\n DOM$8.remove(element.nextSibling);\n }\n fireRemove(editor);\n editor.editorManager.remove(editor);\n if (!editor.inline && body) {\n restoreOriginalStyles(editor);\n }\n fireDetach(editor);\n DOM$8.remove(editor.getContainer());\n safeDestroy(_selectionOverrides);\n safeDestroy(editorUpload);\n editor.destroy();\n }\n };\n const destroy = (editor, automatic) => {\n const {selection, dom} = editor;\n if (editor.destroyed) {\n return;\n }\n if (!automatic && !editor.removed) {\n editor.remove();\n return;\n }\n if (!automatic) {\n editor.editorManager.off('beforeunload', editor._beforeUnload);\n if (editor.theme && editor.theme.destroy) {\n editor.theme.destroy();\n }\n safeDestroy(selection);\n safeDestroy(dom);\n }\n restoreForm(editor);\n clearDomReferences(editor);\n editor.destroyed = true;\n };\n\n const CreateIconManager = () => {\n const lookup = {};\n const add = (id, iconPack) => {\n lookup[id] = iconPack;\n };\n const get = id => {\n if (lookup[id]) {\n return lookup[id];\n } else {\n return { icons: {} };\n }\n };\n const has = id => has$2(lookup, id);\n return {\n add,\n get,\n has\n };\n };\n const IconManager = CreateIconManager();\n\n const ModelManager = AddOnManager.ModelManager;\n\n const getProp = (propName, elm) => {\n const rawElm = elm.dom;\n return rawElm[propName];\n };\n const getComputedSizeProp = (propName, elm) => parseInt(get$7(elm, propName), 10);\n const getClientWidth = curry(getProp, 'clientWidth');\n const getClientHeight = curry(getProp, 'clientHeight');\n const getMarginTop = curry(getComputedSizeProp, 'margin-top');\n const getMarginLeft = curry(getComputedSizeProp, 'margin-left');\n const getBoundingClientRect = elm => elm.dom.getBoundingClientRect();\n const isInsideElementContentArea = (bodyElm, clientX, clientY) => {\n const clientWidth = getClientWidth(bodyElm);\n const clientHeight = getClientHeight(bodyElm);\n return clientX >= 0 && clientY >= 0 && clientX <= clientWidth && clientY <= clientHeight;\n };\n const transpose = (inline, elm, clientX, clientY) => {\n const clientRect = getBoundingClientRect(elm);\n const deltaX = inline ? clientRect.left + elm.dom.clientLeft + getMarginLeft(elm) : 0;\n const deltaY = inline ? clientRect.top + elm.dom.clientTop + getMarginTop(elm) : 0;\n const x = clientX - deltaX;\n const y = clientY - deltaY;\n return {\n x,\n y\n };\n };\n const isXYInContentArea = (editor, clientX, clientY) => {\n const bodyElm = SugarElement.fromDom(editor.getBody());\n const targetElm = editor.inline ? bodyElm : documentElement(bodyElm);\n const transposedPoint = transpose(editor.inline, targetElm, clientX, clientY);\n return isInsideElementContentArea(targetElm, transposedPoint.x, transposedPoint.y);\n };\n const fromDomSafe = node => Optional.from(node).map(SugarElement.fromDom);\n const isEditorAttachedToDom = editor => {\n const rawContainer = editor.inline ? editor.getBody() : editor.getContentAreaContainer();\n return fromDomSafe(rawContainer).map(inBody).getOr(false);\n };\n\n var NotificationManagerImpl = () => {\n const unimplemented = () => {\n throw new Error('Theme did not provide a NotificationManager implementation.');\n };\n return {\n open: unimplemented,\n close: unimplemented,\n getArgs: unimplemented\n };\n };\n\n const NotificationManager = editor => {\n const notifications = [];\n const getImplementation = () => {\n const theme = editor.theme;\n return theme && theme.getNotificationManagerImpl ? theme.getNotificationManagerImpl() : NotificationManagerImpl();\n };\n const getTopNotification = () => {\n return Optional.from(notifications[0]);\n };\n const isEqual = (a, b) => {\n return a.type === b.type && a.text === b.text && !a.progressBar && !a.timeout && !b.progressBar && !b.timeout;\n };\n const reposition = () => {\n getTopNotification().each(notification => {\n notification.reposition();\n });\n };\n const addNotification = notification => {\n notifications.push(notification);\n };\n const closeNotification = notification => {\n findIndex$2(notifications, otherNotification => {\n return otherNotification === notification;\n }).each(index => {\n notifications.splice(index, 1);\n });\n };\n const open = (spec, fireEvent = true) => {\n if (editor.removed || !isEditorAttachedToDom(editor)) {\n return {};\n }\n if (fireEvent) {\n editor.dispatch('BeforeOpenNotification', { notification: spec });\n }\n return find$2(notifications, notification => {\n return isEqual(getImplementation().getArgs(notification), spec);\n }).getOrThunk(() => {\n editor.editorManager.setActive(editor);\n const notification = getImplementation().open(spec, () => {\n closeNotification(notification);\n }, () => hasEditorOrUiFocus(editor));\n addNotification(notification);\n reposition();\n editor.dispatch('OpenNotification', { notification: { ...notification } });\n return notification;\n });\n };\n const close = () => {\n getTopNotification().each(notification => {\n getImplementation().close(notification);\n closeNotification(notification);\n reposition();\n });\n };\n const getNotifications = constant(notifications);\n const registerEvents = editor => {\n editor.on('SkinLoaded', () => {\n const serviceMessage = getServiceMessage(editor);\n if (serviceMessage) {\n open({\n text: serviceMessage,\n type: 'warning',\n timeout: 0\n }, false);\n }\n reposition();\n });\n editor.on('show ResizeEditor ResizeWindow NodeChange ToggleView FullscreenStateChanged', () => {\n requestAnimationFrame(reposition);\n });\n editor.on('remove', () => {\n each$e(notifications.slice(), notification => {\n getImplementation().close(notification);\n });\n });\n editor.on('keydown', e => {\n var _a;\n const isF12 = ((_a = e.key) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === 'f12' || e.keyCode === 123;\n if (e.altKey && isF12) {\n e.preventDefault();\n getTopNotification().map(notificationApi => SugarElement.fromDom(notificationApi.getEl())).each(elm => focus$1(elm));\n }\n });\n };\n registerEvents(editor);\n return {\n open,\n close,\n getNotifications\n };\n };\n\n const PluginManager = AddOnManager.PluginManager;\n\n const ThemeManager = AddOnManager.ThemeManager;\n\n var WindowManagerImpl = () => {\n const unimplemented = () => {\n throw new Error('Theme did not provide a WindowManager implementation.');\n };\n return {\n open: unimplemented,\n openUrl: unimplemented,\n alert: unimplemented,\n confirm: unimplemented,\n close: unimplemented\n };\n };\n\n const WindowManager = editor => {\n let dialogs = [];\n const getImplementation = () => {\n const theme = editor.theme;\n return theme && theme.getWindowManagerImpl ? theme.getWindowManagerImpl() : WindowManagerImpl();\n };\n const funcBind = (scope, f) => {\n return (...args) => {\n return f ? f.apply(scope, args) : undefined;\n };\n };\n const fireOpenEvent = dialog => {\n editor.dispatch('OpenWindow', { dialog });\n };\n const fireCloseEvent = dialog => {\n editor.dispatch('CloseWindow', { dialog });\n };\n const addDialog = dialog => {\n dialogs.push(dialog);\n fireOpenEvent(dialog);\n };\n const closeDialog = dialog => {\n fireCloseEvent(dialog);\n dialogs = filter$5(dialogs, otherDialog => {\n return otherDialog !== dialog;\n });\n if (dialogs.length === 0) {\n editor.focus();\n }\n };\n const getTopDialog = () => {\n return Optional.from(dialogs[dialogs.length - 1]);\n };\n const storeSelectionAndOpenDialog = openDialog => {\n editor.editorManager.setActive(editor);\n store(editor);\n editor.ui.show();\n const dialog = openDialog();\n addDialog(dialog);\n return dialog;\n };\n const open = (args, params) => {\n return storeSelectionAndOpenDialog(() => getImplementation().open(args, params, closeDialog));\n };\n const openUrl = args => {\n return storeSelectionAndOpenDialog(() => getImplementation().openUrl(args, closeDialog));\n };\n const alert = (message, callback, scope) => {\n const windowManagerImpl = getImplementation();\n windowManagerImpl.alert(message, funcBind(scope ? scope : windowManagerImpl, callback));\n };\n const confirm = (message, callback, scope) => {\n const windowManagerImpl = getImplementation();\n windowManagerImpl.confirm(message, funcBind(scope ? scope : windowManagerImpl, callback));\n };\n const close = () => {\n getTopDialog().each(dialog => {\n getImplementation().close(dialog);\n closeDialog(dialog);\n });\n };\n editor.on('remove', () => {\n each$e(dialogs, dialog => {\n getImplementation().close(dialog);\n });\n });\n return {\n open,\n openUrl,\n alert,\n confirm,\n close\n };\n };\n\n const displayNotification = (editor, message) => {\n editor.notificationManager.open({\n type: 'error',\n text: message\n });\n };\n const displayError = (editor, message) => {\n if (editor._skinLoaded) {\n displayNotification(editor, message);\n } else {\n editor.on('SkinLoaded', () => {\n displayNotification(editor, message);\n });\n }\n };\n const uploadError = (editor, message) => {\n displayError(editor, I18n.translate([\n 'Failed to upload image: {0}',\n message\n ]));\n };\n const logError = (editor, errorType, msg) => {\n fireError(editor, errorType, { message: msg });\n console.error(msg);\n };\n const createLoadError = (type, url, name) => name ? `Failed to load ${ type }: ${ name } from url ${ url }` : `Failed to load ${ type } url: ${ url }`;\n const pluginLoadError = (editor, url, name) => {\n logError(editor, 'PluginLoadError', createLoadError('plugin', url, name));\n };\n const iconsLoadError = (editor, url, name) => {\n logError(editor, 'IconsLoadError', createLoadError('icons', url, name));\n };\n const languageLoadError = (editor, url, name) => {\n logError(editor, 'LanguageLoadError', createLoadError('language', url, name));\n };\n const themeLoadError = (editor, url, name) => {\n logError(editor, 'ThemeLoadError', createLoadError('theme', url, name));\n };\n const modelLoadError = (editor, url, name) => {\n logError(editor, 'ModelLoadError', createLoadError('model', url, name));\n };\n const pluginInitError = (editor, name, err) => {\n const message = I18n.translate([\n 'Failed to initialize plugin: {0}',\n name\n ]);\n fireError(editor, 'PluginLoadError', { message });\n initError(message, err);\n displayError(editor, message);\n };\n const initError = (message, ...x) => {\n const console = window.console;\n if (console) {\n if (console.error) {\n console.error(message, ...x);\n } else {\n console.log(message, ...x);\n }\n }\n };\n\n const removeFakeSelection = editor => {\n Optional.from(editor.selection.getNode()).each(elm => {\n elm.removeAttribute('data-mce-selected');\n });\n };\n const setEditorCommandState = (editor, cmd, state) => {\n try {\n editor.getDoc().execCommand(cmd, false, String(state));\n } catch (_a) {\n }\n };\n const setCommonEditorCommands = (editor, state) => {\n setEditorCommandState(editor, 'StyleWithCSS', state);\n setEditorCommandState(editor, 'enableInlineTableEditing', state);\n setEditorCommandState(editor, 'enableObjectResizing', state);\n };\n const restoreFakeSelection = editor => {\n editor.selection.setRng(editor.selection.getRng());\n };\n const toggleClass = (elm, cls, state) => {\n if (has(elm, cls) && !state) {\n remove$6(elm, cls);\n } else if (state) {\n add$2(elm, cls);\n }\n };\n const disableEditor = editor => {\n const body = SugarElement.fromDom(editor.getBody());\n toggleClass(body, 'mce-content-readonly', true);\n editor.selection.controlSelection.hideResizeRect();\n editor._selectionOverrides.hideFakeCaret();\n removeFakeSelection(editor);\n };\n const enableEditor = editor => {\n const body = SugarElement.fromDom(editor.getBody());\n toggleClass(body, 'mce-content-readonly', false);\n if (editor.hasEditableRoot()) {\n set$3(body, true);\n }\n setCommonEditorCommands(editor, false);\n if (hasEditorOrUiFocus(editor)) {\n editor.focus();\n }\n restoreFakeSelection(editor);\n editor.nodeChanged();\n };\n\n const isDisabled = editor => isDisabled$1(editor);\n const internalContentEditableAttr = 'data-mce-contenteditable';\n const switchOffContentEditableTrue = elm => {\n each$e(descendants(elm, '*[contenteditable=\"true\"]'), elm => {\n set$4(elm, internalContentEditableAttr, 'true');\n set$3(elm, false);\n });\n };\n const switchOnContentEditableTrue = elm => {\n each$e(descendants(elm, `*[${ internalContentEditableAttr }=\"true\"]`), elm => {\n remove$9(elm, internalContentEditableAttr);\n set$3(elm, true);\n });\n };\n const toggleDisabled = (editor, state) => {\n const body = SugarElement.fromDom(editor.getBody());\n if (state) {\n disableEditor(editor);\n set$3(body, false);\n switchOffContentEditableTrue(body);\n } else {\n switchOnContentEditableTrue(body);\n enableEditor(editor);\n }\n };\n const registerDisabledContentFilters = editor => {\n if (editor.serializer) {\n registerFilters(editor);\n } else {\n editor.on('PreInit', () => {\n registerFilters(editor);\n });\n }\n };\n const registerFilters = editor => {\n editor.parser.addAttributeFilter('contenteditable', nodes => {\n if (isDisabled(editor)) {\n each$e(nodes, node => {\n node.attr(internalContentEditableAttr, node.attr('contenteditable'));\n node.attr('contenteditable', 'false');\n });\n }\n });\n editor.serializer.addAttributeFilter(internalContentEditableAttr, nodes => {\n if (isDisabled(editor)) {\n each$e(nodes, node => {\n node.attr('contenteditable', node.attr(internalContentEditableAttr));\n });\n }\n });\n editor.serializer.addTempAttr(internalContentEditableAttr);\n };\n const isClickEvent = e => e.type === 'click';\n const allowedEvents = ['copy'];\n const isAllowedEventInDisabledMode = e => contains$2(allowedEvents, e.type);\n const getAnchorHrefOpt = (editor, elm) => {\n const isRoot = elm => eq(elm, SugarElement.fromDom(editor.getBody()));\n return closest$3(elm, 'a', isRoot).bind(a => getOpt(a, 'href'));\n };\n const processDisabledEvents = (editor, e) => {\n if (isClickEvent(e) && !VK.metaKeyPressed(e)) {\n const elm = SugarElement.fromDom(e.target);\n getAnchorHrefOpt(editor, elm).each(href => {\n e.preventDefault();\n if (/^#/.test(href)) {\n const targetEl = editor.dom.select(`${ href },[name=\"${ removeLeading(href, '#') }\"]`);\n if (targetEl.length) {\n editor.selection.scrollIntoView(targetEl[0], true);\n }\n } else {\n window.open(href, '_blank', 'rel=noopener noreferrer,menubar=yes,toolbar=yes,location=yes,status=yes,resizable=yes,scrollbars=yes');\n }\n });\n } else if (isAllowedEventInDisabledMode(e)) {\n editor.dispatch(e.type, e);\n }\n };\n const registerDisabledModeEventHandlers = editor => {\n editor.on('ShowCaret ObjectSelected', e => {\n if (isDisabled(editor)) {\n e.preventDefault();\n }\n });\n editor.on('DisabledStateChange', e => {\n if (!e.isDefaultPrevented()) {\n toggleDisabled(editor, e.state);\n }\n });\n };\n const registerEventsAndFilters$1 = editor => {\n registerDisabledContentFilters(editor);\n registerDisabledModeEventHandlers(editor);\n };\n\n const isContentCssSkinName = url => /^[a-z0-9\\-]+$/i.test(url);\n const toContentSkinResourceName = url => 'content/' + url + '/content.css';\n const isBundledCssSkinName = url => tinymce.Resource.has(toContentSkinResourceName(url));\n const getContentCssUrls = editor => {\n return transformToUrls(editor, getContentCss(editor));\n };\n const getFontCssUrls = editor => {\n return transformToUrls(editor, getFontCss(editor));\n };\n const transformToUrls = (editor, cssLinks) => {\n const skinUrl = editor.editorManager.baseURL + '/skins/content';\n const suffix = editor.editorManager.suffix;\n const contentCssFile = `content${ suffix }.css`;\n return map$3(cssLinks, url => {\n if (isBundledCssSkinName(url)) {\n return url;\n } else if (isContentCssSkinName(url) && !editor.inline) {\n return `${ skinUrl }/${ url }/${ contentCssFile }`;\n } else {\n return editor.documentBaseURI.toAbsolute(url);\n }\n });\n };\n const appendContentCssFromSettings = editor => {\n editor.contentCSS = editor.contentCSS.concat(getContentCssUrls(editor), getFontCssUrls(editor));\n };\n\n const getAllImages = elm => {\n return elm ? from(elm.getElementsByTagName('img')) : [];\n };\n const ImageScanner = (uploadStatus, blobCache) => {\n const cachedPromises = {};\n const findAll = (elm, predicate = always) => {\n const images = filter$5(getAllImages(elm), img => {\n const src = img.src;\n if (img.hasAttribute('data-mce-bogus')) {\n return false;\n }\n if (img.hasAttribute('data-mce-placeholder')) {\n return false;\n }\n if (!src || src === Env.transparentSrc) {\n return false;\n }\n if (startsWith(src, 'blob:')) {\n return !uploadStatus.isUploaded(src) && predicate(img);\n }\n if (startsWith(src, 'data:')) {\n return predicate(img);\n }\n return false;\n });\n const promises = map$3(images, img => {\n const imageSrc = img.src;\n if (has$2(cachedPromises, imageSrc)) {\n return cachedPromises[imageSrc].then(imageInfo => {\n if (isString(imageInfo)) {\n return imageInfo;\n } else {\n return {\n image: img,\n blobInfo: imageInfo.blobInfo\n };\n }\n });\n } else {\n const newPromise = imageToBlobInfo(blobCache, imageSrc).then(blobInfo => {\n delete cachedPromises[imageSrc];\n return {\n image: img,\n blobInfo\n };\n }).catch(error => {\n delete cachedPromises[imageSrc];\n return error;\n });\n cachedPromises[imageSrc] = newPromise;\n return newPromise;\n }\n });\n return Promise.all(promises);\n };\n return { findAll };\n };\n\n const UploadStatus = () => {\n const PENDING = 1, UPLOADED = 2;\n let blobUriStatuses = {};\n const createStatus = (status, resultUri) => {\n return {\n status,\n resultUri\n };\n };\n const hasBlobUri = blobUri => {\n return blobUri in blobUriStatuses;\n };\n const getResultUri = blobUri => {\n const result = blobUriStatuses[blobUri];\n return result ? result.resultUri : null;\n };\n const isPending = blobUri => {\n return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === PENDING : false;\n };\n const isUploaded = blobUri => {\n return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === UPLOADED : false;\n };\n const markPending = blobUri => {\n blobUriStatuses[blobUri] = createStatus(PENDING, null);\n };\n const markUploaded = (blobUri, resultUri) => {\n blobUriStatuses[blobUri] = createStatus(UPLOADED, resultUri);\n };\n const removeFailed = blobUri => {\n delete blobUriStatuses[blobUri];\n };\n const destroy = () => {\n blobUriStatuses = {};\n };\n return {\n hasBlobUri,\n getResultUri,\n isPending,\n isUploaded,\n markPending,\n markUploaded,\n removeFailed,\n destroy\n };\n };\n\n let count = 0;\n const seed = () => {\n const rnd = () => {\n return Math.round(random() * 4294967295).toString(36);\n };\n const now = new Date().getTime();\n return 's' + now.toString(36) + rnd() + rnd() + rnd();\n };\n const uuid = prefix => {\n return prefix + count++ + seed();\n };\n\n const BlobCache = () => {\n let cache = [];\n const mimeToExt = mime => {\n const mimes = {\n 'image/jpeg': 'jpg',\n 'image/jpg': 'jpg',\n 'image/gif': 'gif',\n 'image/png': 'png',\n 'image/apng': 'apng',\n 'image/avif': 'avif',\n 'image/svg+xml': 'svg',\n 'image/webp': 'webp',\n 'image/bmp': 'bmp',\n 'image/tiff': 'tiff'\n };\n return mimes[mime.toLowerCase()] || 'dat';\n };\n const create = (o, blob, base64, name, filename) => {\n if (isString(o)) {\n const id = o;\n return toBlobInfo({\n id,\n name,\n filename,\n blob: blob,\n base64: base64\n });\n } else if (isObject(o)) {\n return toBlobInfo(o);\n } else {\n throw new Error('Unknown input type');\n }\n };\n const toBlobInfo = o => {\n if (!o.blob || !o.base64) {\n throw new Error('blob and base64 representations of the image are required for BlobInfo to be created');\n }\n const id = o.id || uuid('blobid');\n const name = o.name || id;\n const blob = o.blob;\n return {\n id: constant(id),\n name: constant(name),\n filename: constant(o.filename || name + '.' + mimeToExt(blob.type)),\n blob: constant(blob),\n base64: constant(o.base64),\n blobUri: constant(o.blobUri || URL.createObjectURL(blob)),\n uri: constant(o.uri)\n };\n };\n const add = blobInfo => {\n if (!get(blobInfo.id())) {\n cache.push(blobInfo);\n }\n };\n const findFirst = predicate => find$2(cache, predicate).getOrUndefined();\n const get = id => findFirst(cachedBlobInfo => cachedBlobInfo.id() === id);\n const getByUri = blobUri => findFirst(blobInfo => blobInfo.blobUri() === blobUri);\n const getByData = (base64, type) => findFirst(blobInfo => blobInfo.base64() === base64 && blobInfo.blob().type === type);\n const removeByUri = blobUri => {\n cache = filter$5(cache, blobInfo => {\n if (blobInfo.blobUri() === blobUri) {\n URL.revokeObjectURL(blobInfo.blobUri());\n return false;\n }\n return true;\n });\n };\n const destroy = () => {\n each$e(cache, cachedBlobInfo => {\n URL.revokeObjectURL(cachedBlobInfo.blobUri());\n });\n cache = [];\n };\n return {\n create,\n add,\n get,\n getByUri,\n getByData,\n findFirst,\n removeByUri,\n destroy\n };\n };\n\n const Uploader = (uploadStatus, settings) => {\n const pendingPromises = {};\n const pathJoin = (path1, path2) => {\n if (path1) {\n return path1.replace(/\\/$/, '') + '/' + path2.replace(/^\\//, '');\n }\n return path2;\n };\n const defaultHandler = (blobInfo, progress) => new Promise((success, failure) => {\n const xhr = new XMLHttpRequest();\n xhr.open('POST', settings.url);\n xhr.withCredentials = settings.credentials;\n xhr.upload.onprogress = e => {\n progress(e.loaded / e.total * 100);\n };\n xhr.onerror = () => {\n failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status);\n };\n xhr.onload = () => {\n if (xhr.status < 200 || xhr.status >= 300) {\n failure('HTTP Error: ' + xhr.status);\n return;\n }\n const json = JSON.parse(xhr.responseText);\n if (!json || !isString(json.location)) {\n failure('Invalid JSON: ' + xhr.responseText);\n return;\n }\n success(pathJoin(settings.basePath, json.location));\n };\n const formData = new FormData();\n formData.append('file', blobInfo.blob(), blobInfo.filename());\n xhr.send(formData);\n });\n const uploadHandler = isFunction(settings.handler) ? settings.handler : defaultHandler;\n const noUpload = () => new Promise(resolve => {\n resolve([]);\n });\n const handlerSuccess = (blobInfo, url) => ({\n url,\n blobInfo,\n status: true\n });\n const handlerFailure = (blobInfo, error) => ({\n url: '',\n blobInfo,\n status: false,\n error\n });\n const resolvePending = (blobUri, result) => {\n Tools.each(pendingPromises[blobUri], resolve => {\n resolve(result);\n });\n delete pendingPromises[blobUri];\n };\n const uploadBlobInfo = (blobInfo, handler, openNotification) => {\n uploadStatus.markPending(blobInfo.blobUri());\n return new Promise(resolve => {\n let notification;\n let progress;\n try {\n const closeNotification = () => {\n if (notification) {\n notification.close();\n progress = noop;\n }\n };\n const success = url => {\n closeNotification();\n uploadStatus.markUploaded(blobInfo.blobUri(), url);\n resolvePending(blobInfo.blobUri(), handlerSuccess(blobInfo, url));\n resolve(handlerSuccess(blobInfo, url));\n };\n const failure = error => {\n closeNotification();\n uploadStatus.removeFailed(blobInfo.blobUri());\n resolvePending(blobInfo.blobUri(), handlerFailure(blobInfo, error));\n resolve(handlerFailure(blobInfo, error));\n };\n progress = percent => {\n if (percent < 0 || percent > 100) {\n return;\n }\n Optional.from(notification).orThunk(() => Optional.from(openNotification).map(apply$1)).each(n => {\n notification = n;\n n.progressBar.value(percent);\n });\n };\n handler(blobInfo, progress).then(success, err => {\n failure(isString(err) ? { message: err } : err);\n });\n } catch (ex) {\n resolve(handlerFailure(blobInfo, ex));\n }\n });\n };\n const isDefaultHandler = handler => handler === defaultHandler;\n const pendingUploadBlobInfo = blobInfo => {\n const blobUri = blobInfo.blobUri();\n return new Promise(resolve => {\n pendingPromises[blobUri] = pendingPromises[blobUri] || [];\n pendingPromises[blobUri].push(resolve);\n });\n };\n const uploadBlobs = (blobInfos, openNotification) => {\n blobInfos = Tools.grep(blobInfos, blobInfo => !uploadStatus.isUploaded(blobInfo.blobUri()));\n return Promise.all(Tools.map(blobInfos, blobInfo => uploadStatus.isPending(blobInfo.blobUri()) ? pendingUploadBlobInfo(blobInfo) : uploadBlobInfo(blobInfo, uploadHandler, openNotification)));\n };\n const upload = (blobInfos, openNotification) => !settings.url && isDefaultHandler(uploadHandler) ? noUpload() : uploadBlobs(blobInfos, openNotification);\n return { upload };\n };\n\n const openNotification = editor => () => editor.notificationManager.open({\n text: editor.translate('Image uploading...'),\n type: 'info',\n timeout: -1,\n progressBar: true\n });\n const createUploader = (editor, uploadStatus) => Uploader(uploadStatus, {\n url: getImageUploadUrl(editor),\n basePath: getImageUploadBasePath(editor),\n credentials: getImagesUploadCredentials(editor),\n handler: getImagesUploadHandler(editor)\n });\n const ImageUploader = editor => {\n const uploadStatus = UploadStatus();\n const uploader = createUploader(editor, uploadStatus);\n return { upload: (blobInfos, showNotification = true) => uploader.upload(blobInfos, showNotification ? openNotification(editor) : undefined) };\n };\n\n const isEmptyForPadding = (editor, element) => editor.dom.isEmpty(element.dom) && isNonNullable(editor.schema.getTextBlockElements()[name(element)]);\n const addPaddingToEmpty = editor => element => {\n if (isEmptyForPadding(editor, element)) {\n append$1(element, SugarElement.fromHtml('
    '));\n }\n };\n const EditorUpload = editor => {\n const blobCache = BlobCache();\n let uploader, imageScanner;\n const uploadStatus = UploadStatus();\n const urlFilters = [];\n const aliveGuard = callback => {\n return result => {\n if (editor.selection) {\n return callback(result);\n }\n return [];\n };\n };\n const cacheInvalidator = url => url + (url.indexOf('?') === -1 ? '?' : '&') + new Date().getTime();\n const replaceString = (content, search, replace) => {\n let index = 0;\n do {\n index = content.indexOf(search, index);\n if (index !== -1) {\n content = content.substring(0, index) + replace + content.substr(index + search.length);\n index += replace.length - search.length + 1;\n }\n } while (index !== -1);\n return content;\n };\n const replaceImageUrl = (content, targetUrl, replacementUrl) => {\n const replacementString = `src=\"${ replacementUrl }\"${ replacementUrl === Env.transparentSrc ? ' data-mce-placeholder=\"1\"' : '' }`;\n content = replaceString(content, `src=\"${ targetUrl }\"`, replacementString);\n content = replaceString(content, 'data-mce-src=\"' + targetUrl + '\"', 'data-mce-src=\"' + replacementUrl + '\"');\n return content;\n };\n const replaceUrlInUndoStack = (targetUrl, replacementUrl) => {\n each$e(editor.undoManager.data, level => {\n if (level.type === 'fragmented') {\n level.fragments = map$3(level.fragments, fragment => replaceImageUrl(fragment, targetUrl, replacementUrl));\n } else {\n level.content = replaceImageUrl(level.content, targetUrl, replacementUrl);\n }\n });\n };\n const replaceImageUriInView = (image, resultUri) => {\n const src = editor.convertURL(resultUri, 'src');\n replaceUrlInUndoStack(image.src, resultUri);\n setAll$1(SugarElement.fromDom(image), {\n 'src': shouldReuseFileName(editor) ? cacheInvalidator(resultUri) : resultUri,\n 'data-mce-src': src\n });\n };\n const uploadImages = () => {\n if (!uploader) {\n uploader = createUploader(editor, uploadStatus);\n }\n return scanForImages().then(aliveGuard(imageInfos => {\n const blobInfos = map$3(imageInfos, imageInfo => imageInfo.blobInfo);\n return uploader.upload(blobInfos, openNotification(editor)).then(aliveGuard(result => {\n const imagesToRemove = [];\n let shouldDispatchChange = false;\n const filteredResult = map$3(result, (uploadInfo, index) => {\n const {blobInfo, image} = imageInfos[index];\n let removed = false;\n if (uploadInfo.status && shouldReplaceBlobUris(editor)) {\n if (uploadInfo.url && !contains$1(image.src, uploadInfo.url)) {\n shouldDispatchChange = true;\n }\n blobCache.removeByUri(image.src);\n if (isRtc(editor)) ; else {\n replaceImageUriInView(image, uploadInfo.url);\n }\n } else if (uploadInfo.error) {\n if (uploadInfo.error.remove) {\n replaceUrlInUndoStack(image.src, Env.transparentSrc);\n imagesToRemove.push(image);\n removed = true;\n }\n uploadError(editor, uploadInfo.error.message);\n }\n return {\n element: image,\n status: uploadInfo.status,\n uploadUri: uploadInfo.url,\n blobInfo,\n removed\n };\n });\n if (imagesToRemove.length > 0 && !isRtc(editor)) {\n editor.undoManager.transact(() => {\n each$e(fromDom$1(imagesToRemove), sugarElement => {\n const parentOpt = parent(sugarElement);\n remove$4(sugarElement);\n parentOpt.each(addPaddingToEmpty(editor));\n blobCache.removeByUri(sugarElement.dom.src);\n });\n });\n } else if (shouldDispatchChange) {\n editor.undoManager.dispatchChange();\n }\n return filteredResult;\n }));\n }));\n };\n const uploadImagesAuto = () => isAutomaticUploadsEnabled(editor) ? uploadImages() : Promise.resolve([]);\n const isValidDataUriImage = imgElm => forall(urlFilters, filter => filter(imgElm));\n const addFilter = filter => {\n urlFilters.push(filter);\n };\n const scanForImages = () => {\n if (!imageScanner) {\n imageScanner = ImageScanner(uploadStatus, blobCache);\n }\n return imageScanner.findAll(editor.getBody(), isValidDataUriImage).then(aliveGuard(result => {\n const filteredResult = filter$5(result, resultItem => {\n if (isString(resultItem)) {\n displayError(editor, resultItem);\n return false;\n } else if (resultItem.uriType === 'blob') {\n return false;\n } else {\n return true;\n }\n });\n if (isRtc(editor)) ; else {\n each$e(filteredResult, resultItem => {\n replaceUrlInUndoStack(resultItem.image.src, resultItem.blobInfo.blobUri());\n resultItem.image.src = resultItem.blobInfo.blobUri();\n resultItem.image.removeAttribute('data-mce-src');\n });\n }\n return filteredResult;\n }));\n };\n const destroy = () => {\n blobCache.destroy();\n uploadStatus.destroy();\n imageScanner = uploader = null;\n };\n const replaceBlobUris = content => {\n return content.replace(/src=\"(blob:[^\"]+)\"/g, (match, blobUri) => {\n const resultUri = uploadStatus.getResultUri(blobUri);\n if (resultUri) {\n return 'src=\"' + resultUri + '\"';\n }\n let blobInfo = blobCache.getByUri(blobUri);\n if (!blobInfo) {\n blobInfo = foldl(editor.editorManager.get(), (result, editor) => {\n return result || editor.editorUpload && editor.editorUpload.blobCache.getByUri(blobUri);\n }, undefined);\n }\n if (blobInfo) {\n const blob = blobInfo.blob();\n return 'src=\"data:' + blob.type + ';base64,' + blobInfo.base64() + '\"';\n }\n return match;\n });\n };\n editor.on('SetContent', () => {\n if (isAutomaticUploadsEnabled(editor)) {\n uploadImagesAuto();\n } else {\n scanForImages();\n }\n });\n editor.on('RawSaveContent', e => {\n e.content = replaceBlobUris(e.content);\n });\n editor.on('GetContent', e => {\n if (e.source_view || e.format === 'raw' || e.format === 'tree') {\n return;\n }\n e.content = replaceBlobUris(e.content);\n });\n editor.on('PostRender', () => {\n editor.parser.addNodeFilter('img', images => {\n each$e(images, img => {\n const src = img.attr('src');\n if (!src || blobCache.getByUri(src)) {\n return;\n }\n const resultUri = uploadStatus.getResultUri(src);\n if (resultUri) {\n img.attr('src', resultUri);\n }\n });\n });\n });\n return {\n blobCache,\n addFilter,\n uploadImages,\n uploadImagesAuto,\n scanForImages,\n destroy\n };\n };\n\n const get$1 = editor => {\n const dom = editor.dom;\n const schemaType = editor.schema.type;\n const formats = {\n valigntop: [{\n selector: 'td,th',\n styles: { verticalAlign: 'top' }\n }],\n valignmiddle: [{\n selector: 'td,th',\n styles: { verticalAlign: 'middle' }\n }],\n valignbottom: [{\n selector: 'td,th',\n styles: { verticalAlign: 'bottom' }\n }],\n alignleft: [\n {\n selector: 'figure.image',\n collapsed: false,\n classes: 'align-left',\n ceFalseOverride: true,\n preview: 'font-family font-size'\n },\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre',\n styles: { textAlign: 'left' },\n inherit: false,\n preview: false\n },\n {\n selector: 'img,audio,video',\n collapsed: false,\n styles: { float: 'left' },\n preview: 'font-family font-size'\n },\n {\n selector: '.mce-placeholder',\n styles: { float: 'left' },\n ceFalseOverride: true\n },\n {\n selector: 'table',\n collapsed: false,\n styles: {\n marginLeft: '0px',\n marginRight: 'auto'\n },\n onformat: table => {\n dom.setStyle(table, 'float', null);\n },\n preview: 'font-family font-size'\n },\n {\n selector: '.mce-preview-object,[data-ephox-embed-iri]',\n ceFalseOverride: true,\n styles: { float: 'left' }\n }\n ],\n aligncenter: [\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre',\n styles: { textAlign: 'center' },\n inherit: false,\n preview: 'font-family font-size'\n },\n {\n selector: 'figure.image',\n collapsed: false,\n classes: 'align-center',\n ceFalseOverride: true,\n preview: 'font-family font-size'\n },\n {\n selector: 'img,audio,video',\n collapsed: false,\n styles: {\n display: 'block',\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n preview: false\n },\n {\n selector: '.mce-placeholder',\n styles: {\n display: 'block',\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n ceFalseOverride: true\n },\n {\n selector: 'table',\n collapsed: false,\n styles: {\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n preview: 'font-family font-size'\n },\n {\n selector: '.mce-preview-object',\n ceFalseOverride: true,\n styles: {\n display: 'table',\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n preview: false\n },\n {\n selector: '[data-ephox-embed-iri]',\n ceFalseOverride: true,\n styles: {\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n preview: false\n }\n ],\n alignright: [\n {\n selector: 'figure.image',\n collapsed: false,\n classes: 'align-right',\n ceFalseOverride: true,\n preview: 'font-family font-size'\n },\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre',\n styles: { textAlign: 'right' },\n inherit: false,\n preview: 'font-family font-size'\n },\n {\n selector: 'img,audio,video',\n collapsed: false,\n styles: { float: 'right' },\n preview: 'font-family font-size'\n },\n {\n selector: '.mce-placeholder',\n styles: { float: 'right' },\n ceFalseOverride: true\n },\n {\n selector: 'table',\n collapsed: false,\n styles: {\n marginRight: '0px',\n marginLeft: 'auto'\n },\n onformat: table => {\n dom.setStyle(table, 'float', null);\n },\n preview: 'font-family font-size'\n },\n {\n selector: '.mce-preview-object,[data-ephox-embed-iri]',\n ceFalseOverride: true,\n styles: { float: 'right' },\n preview: false\n }\n ],\n alignjustify: [{\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li,pre',\n styles: { textAlign: 'justify' },\n inherit: false,\n preview: 'font-family font-size'\n }],\n bold: [\n {\n inline: 'strong',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n },\n {\n inline: 'span',\n styles: { fontWeight: 'bold' }\n },\n {\n inline: 'b',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n }\n ],\n italic: [\n {\n inline: 'em',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n },\n {\n inline: 'span',\n styles: { fontStyle: 'italic' }\n },\n {\n inline: 'i',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n }\n ],\n underline: [\n {\n inline: 'span',\n styles: { textDecoration: 'underline' },\n exact: true\n },\n {\n inline: 'u',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n }\n ],\n strikethrough: (() => {\n const span = {\n inline: 'span',\n styles: { textDecoration: 'line-through' },\n exact: true\n };\n const strike = {\n inline: 'strike',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n };\n const s = {\n inline: 's',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n };\n return schemaType !== 'html4' ? [\n s,\n span,\n strike\n ] : [\n span,\n s,\n strike\n ];\n })(),\n forecolor: {\n inline: 'span',\n styles: { color: '%value' },\n links: true,\n remove_similar: true,\n clear_child_styles: true\n },\n hilitecolor: {\n inline: 'span',\n styles: { backgroundColor: '%value' },\n links: true,\n remove_similar: true,\n clear_child_styles: true\n },\n fontname: {\n inline: 'span',\n toggle: false,\n styles: { fontFamily: '%value' },\n clear_child_styles: true\n },\n fontsize: {\n inline: 'span',\n toggle: false,\n styles: { fontSize: '%value' },\n clear_child_styles: true\n },\n lineheight: {\n selector: 'h1,h2,h3,h4,h5,h6,p,li,td,th,div',\n styles: { lineHeight: '%value' }\n },\n fontsize_class: {\n inline: 'span',\n attributes: { class: '%value' }\n },\n blockquote: {\n block: 'blockquote',\n wrapper: true,\n remove: 'all'\n },\n subscript: { inline: 'sub' },\n superscript: { inline: 'sup' },\n code: { inline: 'code' },\n samp: { inline: 'samp' },\n link: {\n inline: 'a',\n selector: 'a',\n remove: 'all',\n split: true,\n deep: true,\n onmatch: (node, _fmt, _itemName) => {\n return isElement$6(node) && node.hasAttribute('href');\n },\n onformat: (elm, _fmt, vars) => {\n Tools.each(vars, (value, key) => {\n dom.setAttrib(elm, key, value);\n });\n }\n },\n lang: {\n inline: 'span',\n clear_child_styles: true,\n remove_similar: true,\n attributes: {\n 'lang': '%value',\n 'data-mce-lang': vars => {\n var _a;\n return (_a = vars === null || vars === void 0 ? void 0 : vars.customValue) !== null && _a !== void 0 ? _a : null;\n }\n }\n },\n removeformat: [\n {\n selector: 'b,strong,em,i,font,u,strike,s,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins,small',\n remove: 'all',\n split: true,\n expand: false,\n block_expand: true,\n deep: true\n },\n {\n selector: 'span',\n attributes: [\n 'style',\n 'class'\n ],\n remove: 'empty',\n split: true,\n expand: false,\n deep: true\n },\n {\n selector: '*',\n attributes: [\n 'style',\n 'class'\n ],\n split: false,\n expand: false,\n deep: true\n }\n ]\n };\n Tools.each('p h1 h2 h3 h4 h5 h6 div address pre dt dd'.split(/\\s/), name => {\n formats[name] = {\n block: name,\n remove: 'all'\n };\n });\n return formats;\n };\n\n const genericBase = {\n remove_similar: true,\n inherit: false\n };\n const cellBase = {\n selector: 'td,th',\n ...genericBase\n };\n const cellFormats = {\n tablecellbackgroundcolor: {\n styles: { backgroundColor: '%value' },\n ...cellBase\n },\n tablecellverticalalign: {\n styles: { 'vertical-align': '%value' },\n ...cellBase\n },\n tablecellbordercolor: {\n styles: { borderColor: '%value' },\n ...cellBase\n },\n tablecellclass: {\n classes: ['%value'],\n ...cellBase\n },\n tableclass: {\n selector: 'table',\n classes: ['%value'],\n ...genericBase\n },\n tablecellborderstyle: {\n styles: { borderStyle: '%value' },\n ...cellBase\n },\n tablecellborderwidth: {\n styles: { borderWidth: '%value' },\n ...cellBase\n }\n };\n const get = constant(cellFormats);\n\n const FormatRegistry = editor => {\n const formats = {};\n const get$2 = name => isNonNullable(name) ? formats[name] : formats;\n const has = name => has$2(formats, name);\n const register = (name, format) => {\n if (name) {\n if (!isString(name)) {\n each$d(name, (format, name) => {\n register(name, format);\n });\n } else {\n if (!isArray$1(format)) {\n format = [format];\n }\n each$e(format, format => {\n if (isUndefined(format.deep)) {\n format.deep = !isSelectorFormat(format);\n }\n if (isUndefined(format.split)) {\n format.split = !isSelectorFormat(format) || isInlineFormat(format);\n }\n if (isUndefined(format.remove) && isSelectorFormat(format) && !isInlineFormat(format)) {\n format.remove = 'none';\n }\n if (isSelectorFormat(format) && isInlineFormat(format)) {\n format.mixed = true;\n format.block_expand = true;\n }\n if (isString(format.classes)) {\n format.classes = format.classes.split(/\\s+/);\n }\n });\n formats[name] = format;\n }\n }\n };\n const unregister = name => {\n if (name && formats[name]) {\n delete formats[name];\n }\n return formats;\n };\n register(get$1(editor));\n register(get());\n register(getFormats(editor));\n return {\n get: get$2,\n has,\n register,\n unregister\n };\n };\n\n const each$3 = Tools.each;\n const dom = DOMUtils.DOM;\n const isPreviewItem = item => isNonNullable(item) && isObject(item);\n const parsedSelectorToHtml = (ancestry, editor) => {\n const schema = editor && editor.schema || Schema({});\n const decorate = (elm, item) => {\n if (item.classes.length > 0) {\n dom.addClass(elm, item.classes.join(' '));\n }\n dom.setAttribs(elm, item.attrs);\n };\n const createElement = sItem => {\n const item = isString(sItem) ? {\n name: sItem,\n classes: [],\n attrs: {}\n } : sItem;\n const elm = dom.create(item.name);\n decorate(elm, item);\n return elm;\n };\n const getRequiredParent = (elm, candidate) => {\n const elmRule = schema.getElementRule(elm.nodeName.toLowerCase());\n const parentsRequired = elmRule === null || elmRule === void 0 ? void 0 : elmRule.parentsRequired;\n if (parentsRequired && parentsRequired.length) {\n return candidate && contains$2(parentsRequired, candidate) ? candidate : parentsRequired[0];\n } else {\n return false;\n }\n };\n const wrapInHtml = (elm, ancestors, siblings) => {\n let parentCandidate;\n const ancestor = ancestors[0];\n const ancestorName = isPreviewItem(ancestor) ? ancestor.name : undefined;\n const parentRequired = getRequiredParent(elm, ancestorName);\n if (parentRequired) {\n if (ancestorName === parentRequired) {\n parentCandidate = ancestor;\n ancestors = ancestors.slice(1);\n } else {\n parentCandidate = parentRequired;\n }\n } else if (ancestor) {\n parentCandidate = ancestor;\n ancestors = ancestors.slice(1);\n } else if (!siblings) {\n return elm;\n }\n const parent = parentCandidate ? createElement(parentCandidate) : dom.create('div');\n parent.appendChild(elm);\n if (siblings) {\n Tools.each(siblings, sibling => {\n const siblingElm = createElement(sibling);\n parent.insertBefore(siblingElm, elm);\n });\n }\n const parentSiblings = isPreviewItem(parentCandidate) ? parentCandidate.siblings : undefined;\n return wrapInHtml(parent, ancestors, parentSiblings);\n };\n const fragment = dom.create('div');\n if (ancestry.length > 0) {\n const item = ancestry[0];\n const elm = createElement(item);\n const siblings = isPreviewItem(item) ? item.siblings : undefined;\n fragment.appendChild(wrapInHtml(elm, ancestry.slice(1), siblings));\n }\n return fragment;\n };\n const parseSelectorItem = item => {\n item = Tools.trim(item);\n let tagName = 'div';\n const obj = {\n name: tagName,\n classes: [],\n attrs: {},\n selector: item\n };\n if (item !== '*') {\n tagName = item.replace(/(?:([#\\.]|::?)([\\w\\-]+)|(\\[)([^\\]]+)\\]?)/g, ($0, $1, $2, $3, $4) => {\n switch ($1) {\n case '#':\n obj.attrs.id = $2;\n break;\n case '.':\n obj.classes.push($2);\n break;\n case ':':\n if (Tools.inArray('checked disabled enabled read-only required'.split(' '), $2) !== -1) {\n obj.attrs[$2] = $2;\n }\n break;\n }\n if ($3 === '[') {\n const m = $4.match(/([\\w\\-]+)(?:\\=\\\"([^\\\"]+))?/);\n if (m) {\n obj.attrs[m[1]] = m[2];\n }\n }\n return '';\n });\n }\n obj.name = tagName || 'div';\n return obj;\n };\n const parseSelector = selector => {\n if (!isString(selector)) {\n return [];\n }\n selector = selector.split(/\\s*,\\s*/)[0];\n selector = selector.replace(/\\s*(~\\+|~|\\+|>)\\s*/g, '$1');\n return Tools.map(selector.split(/(?:>|\\s+(?![^\\[\\]]+\\]))/), item => {\n const siblings = Tools.map(item.split(/(?:~\\+|~|\\+)/), parseSelectorItem);\n const obj = siblings.pop();\n if (siblings.length) {\n obj.siblings = siblings;\n }\n return obj;\n }).reverse();\n };\n const getCssText = (editor, format) => {\n let previewCss = '';\n let previewStyles = getPreviewStyles(editor);\n if (previewStyles === '') {\n return '';\n }\n const removeVars = val => {\n return isString(val) ? val.replace(/%(\\w+)/g, '') : '';\n };\n const getComputedStyle = (name, elm) => {\n return dom.getStyle(elm !== null && elm !== void 0 ? elm : editor.getBody(), name, true);\n };\n if (isString(format)) {\n const formats = editor.formatter.get(format);\n if (!formats) {\n return '';\n }\n format = formats[0];\n }\n if ('preview' in format) {\n const preview = format.preview;\n if (preview === false) {\n return '';\n } else {\n previewStyles = preview || previewStyles;\n }\n }\n let name = format.block || format.inline || 'span';\n let previewFrag;\n const items = parseSelector(format.selector);\n if (items.length > 0) {\n if (!items[0].name) {\n items[0].name = name;\n }\n name = format.selector;\n previewFrag = parsedSelectorToHtml(items, editor);\n } else {\n previewFrag = parsedSelectorToHtml([name], editor);\n }\n const previewElm = dom.select(name, previewFrag)[0] || previewFrag.firstChild;\n each$3(format.styles, (value, name) => {\n const newValue = removeVars(value);\n if (newValue) {\n dom.setStyle(previewElm, name, newValue);\n }\n });\n each$3(format.attributes, (value, name) => {\n const newValue = removeVars(value);\n if (newValue) {\n dom.setAttrib(previewElm, name, newValue);\n }\n });\n each$3(format.classes, value => {\n const newValue = removeVars(value);\n if (!dom.hasClass(previewElm, newValue)) {\n dom.addClass(previewElm, newValue);\n }\n });\n editor.dispatch('PreviewFormats');\n dom.setStyles(previewFrag, {\n position: 'absolute',\n left: -65535\n });\n editor.getBody().appendChild(previewFrag);\n const rawParentFontSize = getComputedStyle('fontSize');\n const parentFontSize = /px$/.test(rawParentFontSize) ? parseInt(rawParentFontSize, 10) : 0;\n each$3(previewStyles.split(' '), name => {\n let value = getComputedStyle(name, previewElm);\n if (name === 'background-color' && /transparent|rgba\\s*\\([^)]+,\\s*0\\)/.test(value)) {\n value = getComputedStyle(name);\n if (rgbaToHexString(value).toLowerCase() === '#ffffff') {\n return;\n }\n }\n if (name === 'color') {\n if (rgbaToHexString(value).toLowerCase() === '#000000') {\n return;\n }\n }\n if (name === 'font-size') {\n if (/em|%$/.test(value)) {\n if (parentFontSize === 0) {\n return;\n }\n const numValue = parseFloat(value) / (/%$/.test(value) ? 100 : 1);\n value = numValue * parentFontSize + 'px';\n }\n }\n if (name === 'border' && value) {\n previewCss += 'padding:0 2px;';\n }\n previewCss += name + ':' + value + ';';\n });\n editor.dispatch('AfterPreviewFormats');\n dom.remove(previewFrag);\n return previewCss;\n };\n\n const setup$s = editor => {\n editor.addShortcut('meta+b', '', 'Bold');\n editor.addShortcut('meta+i', '', 'Italic');\n editor.addShortcut('meta+u', '', 'Underline');\n for (let i = 1; i <= 6; i++) {\n editor.addShortcut('access+' + i, '', [\n 'FormatBlock',\n false,\n 'h' + i\n ]);\n }\n editor.addShortcut('access+7', '', [\n 'FormatBlock',\n false,\n 'p'\n ]);\n editor.addShortcut('access+8', '', [\n 'FormatBlock',\n false,\n 'div'\n ]);\n editor.addShortcut('access+9', '', [\n 'FormatBlock',\n false,\n 'address'\n ]);\n };\n\n const Formatter = editor => {\n const formats = FormatRegistry(editor);\n const formatChangeState = Cell({});\n setup$s(editor);\n setup$v(editor);\n if (!isRtc(editor)) {\n setup$u(formatChangeState, editor);\n }\n return {\n get: formats.get,\n has: formats.has,\n register: formats.register,\n unregister: formats.unregister,\n apply: (name, vars, node) => {\n applyFormat(editor, name, vars, node);\n },\n remove: (name, vars, node, similar) => {\n removeFormat(editor, name, vars, node, similar);\n },\n toggle: (name, vars, node) => {\n toggleFormat(editor, name, vars, node);\n },\n match: (name, vars, node, similar) => matchFormat(editor, name, vars, node, similar),\n closest: names => closestFormat(editor, names),\n matchAll: (names, vars) => matchAllFormats(editor, names, vars),\n matchNode: (node, name, vars, similar) => matchNodeFormat(editor, node, name, vars, similar),\n canApply: name => canApplyFormat(editor, name),\n formatChanged: (formats, callback, similar, vars) => formatChanged(editor, formatChangeState, formats, callback, similar, vars),\n getCssText: curry(getCssText, editor)\n };\n };\n\n const shouldIgnoreCommand = cmd => {\n switch (cmd.toLowerCase()) {\n case 'undo':\n case 'redo':\n case 'mcefocus':\n return true;\n default:\n return false;\n }\n };\n const registerEvents = (editor, undoManager, locks) => {\n const isFirstTypedCharacter = Cell(false);\n const addNonTypingUndoLevel = e => {\n setTyping(undoManager, false, locks);\n undoManager.add({}, e);\n };\n editor.on('init', () => {\n undoManager.add();\n });\n editor.on('BeforeExecCommand', e => {\n const cmd = e.command;\n if (!shouldIgnoreCommand(cmd)) {\n endTyping(undoManager, locks);\n undoManager.beforeChange();\n }\n });\n editor.on('ExecCommand', e => {\n const cmd = e.command;\n if (!shouldIgnoreCommand(cmd)) {\n addNonTypingUndoLevel(e);\n }\n });\n editor.on('ObjectResizeStart cut', () => {\n undoManager.beforeChange();\n });\n editor.on('SaveContent ObjectResized blur', addNonTypingUndoLevel);\n editor.on('dragend', addNonTypingUndoLevel);\n editor.on('keyup', e => {\n const keyCode = e.keyCode;\n if (e.isDefaultPrevented()) {\n return;\n }\n const isMeta = Env.os.isMacOS() && e.key === 'Meta';\n if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45 || e.ctrlKey || isMeta) {\n addNonTypingUndoLevel();\n editor.nodeChanged();\n }\n if (keyCode === 46 || keyCode === 8) {\n editor.nodeChanged();\n }\n if (isFirstTypedCharacter.get() && undoManager.typing && !isEq$1(createFromEditor(editor), undoManager.data[0])) {\n if (!editor.isDirty()) {\n editor.setDirty(true);\n }\n editor.dispatch('TypingUndo');\n isFirstTypedCharacter.set(false);\n editor.nodeChanged();\n }\n });\n editor.on('keydown', e => {\n const keyCode = e.keyCode;\n if (e.isDefaultPrevented()) {\n return;\n }\n if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45) {\n if (undoManager.typing) {\n addNonTypingUndoLevel(e);\n }\n return;\n }\n const modKey = e.ctrlKey && !e.altKey || e.metaKey;\n if ((keyCode < 16 || keyCode > 20) && keyCode !== 224 && keyCode !== 91 && !undoManager.typing && !modKey) {\n undoManager.beforeChange();\n setTyping(undoManager, true, locks);\n undoManager.add({}, e);\n isFirstTypedCharacter.set(true);\n return;\n }\n const hasOnlyMetaOrCtrlModifier = Env.os.isMacOS() ? e.metaKey : e.ctrlKey && !e.altKey;\n if (hasOnlyMetaOrCtrlModifier) {\n undoManager.beforeChange();\n }\n });\n editor.on('mousedown', e => {\n if (undoManager.typing) {\n addNonTypingUndoLevel(e);\n }\n });\n const isInsertReplacementText = event => event.inputType === 'insertReplacementText';\n const isInsertTextDataNull = event => event.inputType === 'insertText' && event.data === null;\n const isInsertFromPasteOrDrop = event => event.inputType === 'insertFromPaste' || event.inputType === 'insertFromDrop';\n editor.on('input', e => {\n if (e.inputType && (isInsertReplacementText(e) || isInsertTextDataNull(e) || isInsertFromPasteOrDrop(e))) {\n addNonTypingUndoLevel(e);\n }\n });\n editor.on('AddUndo Undo Redo ClearUndos', e => {\n if (!e.isDefaultPrevented()) {\n editor.nodeChanged();\n }\n });\n };\n const addKeyboardShortcuts = editor => {\n editor.addShortcut('meta+z', '', 'Undo');\n editor.addShortcut('meta+y,meta+shift+z', '', 'Redo');\n };\n\n const UndoManager = editor => {\n const beforeBookmark = value$2();\n const locks = Cell(0);\n const index = Cell(0);\n const undoManager = {\n data: [],\n typing: false,\n beforeChange: () => {\n beforeChange(editor, locks, beforeBookmark);\n },\n add: (level, event) => {\n return addUndoLevel(editor, undoManager, index, locks, beforeBookmark, level, event);\n },\n dispatchChange: () => {\n editor.setDirty(true);\n const level = createFromEditor(editor);\n level.bookmark = getUndoBookmark(editor.selection);\n editor.dispatch('change', {\n level,\n lastLevel: get$b(undoManager.data, index.get()).getOrUndefined()\n });\n },\n undo: () => {\n return undo(editor, undoManager, locks, index);\n },\n redo: () => {\n return redo(editor, index, undoManager.data);\n },\n clear: () => {\n clear(editor, undoManager, index);\n },\n reset: () => {\n reset(editor, undoManager);\n },\n hasUndo: () => {\n return hasUndo(editor, undoManager, index);\n },\n hasRedo: () => {\n return hasRedo(editor, undoManager, index);\n },\n transact: callback => {\n return transact(editor, undoManager, locks, callback);\n },\n ignore: callback => {\n ignore(editor, locks, callback);\n },\n extra: (callback1, callback2) => {\n extra(editor, undoManager, index, callback1, callback2);\n }\n };\n if (!isRtc(editor)) {\n registerEvents(editor, undoManager, locks);\n }\n addKeyboardShortcuts(editor);\n return undoManager;\n };\n\n const nonTypingKeycodes = [\n 9,\n 27,\n VK.HOME,\n VK.END,\n 19,\n 20,\n 44,\n 144,\n 145,\n 33,\n 34,\n 45,\n 16,\n 17,\n 18,\n 91,\n 92,\n 93,\n VK.DOWN,\n VK.UP,\n VK.LEFT,\n VK.RIGHT\n ].concat(Env.browser.isFirefox() ? [224] : []);\n const placeholderAttr = 'data-mce-placeholder';\n const isKeyboardEvent = e => e.type === 'keydown' || e.type === 'keyup';\n const isDeleteEvent = e => {\n const keyCode = e.keyCode;\n return keyCode === VK.BACKSPACE || keyCode === VK.DELETE;\n };\n const isNonTypingKeyboardEvent = e => {\n if (isKeyboardEvent(e)) {\n const keyCode = e.keyCode;\n return !isDeleteEvent(e) && (VK.metaKeyPressed(e) || e.altKey || keyCode >= 112 && keyCode <= 123 || contains$2(nonTypingKeycodes, keyCode));\n } else {\n return false;\n }\n };\n const isTypingKeyboardEvent = e => isKeyboardEvent(e) && !(isDeleteEvent(e) || e.type === 'keyup' && e.keyCode === 229);\n const isVisuallyEmpty = (dom, rootElm, forcedRootBlock) => {\n if (dom.isEmpty(rootElm, undefined, {\n skipBogus: false,\n includeZwsp: true\n })) {\n const firstElement = rootElm.firstElementChild;\n if (!firstElement) {\n return true;\n } else if (dom.getStyle(rootElm.firstElementChild, 'padding-left') || dom.getStyle(rootElm.firstElementChild, 'padding-right')) {\n return false;\n } else {\n return forcedRootBlock === firstElement.nodeName.toLowerCase();\n }\n } else {\n return false;\n }\n };\n const setup$r = editor => {\n var _a;\n const dom = editor.dom;\n const rootBlock = getForcedRootBlock(editor);\n const placeholder = (_a = getPlaceholder(editor)) !== null && _a !== void 0 ? _a : '';\n const updatePlaceholder = (e, initial) => {\n if (isNonTypingKeyboardEvent(e)) {\n return;\n }\n const body = editor.getBody();\n const showPlaceholder = isTypingKeyboardEvent(e) ? false : isVisuallyEmpty(dom, body, rootBlock);\n const isPlaceholderShown = dom.getAttrib(body, placeholderAttr) !== '';\n if (isPlaceholderShown !== showPlaceholder || initial) {\n dom.setAttrib(body, placeholderAttr, showPlaceholder ? placeholder : null);\n firePlaceholderToggle(editor, showPlaceholder);\n editor.on(showPlaceholder ? 'keydown' : 'keyup', updatePlaceholder);\n editor.off(showPlaceholder ? 'keyup' : 'keydown', updatePlaceholder);\n }\n };\n if (isNotEmpty(placeholder)) {\n editor.on('init', e => {\n updatePlaceholder(e, true);\n editor.on('change SetContent ExecCommand', updatePlaceholder);\n editor.on('paste', e => Delay.setEditorTimeout(editor, () => updatePlaceholder(e)));\n });\n }\n };\n\n const blockPosition = (block, position) => ({\n block,\n position\n });\n const blockBoundary = (from, to) => ({\n from,\n to\n });\n const getBlockPosition = (rootNode, pos) => {\n const rootElm = SugarElement.fromDom(rootNode);\n const containerElm = SugarElement.fromDom(pos.container());\n return getParentBlock$2(rootElm, containerElm).map(block => blockPosition(block, pos));\n };\n const isNotAncestorial = blockBoundary => !(contains(blockBoundary.to.block, blockBoundary.from.block) || contains(blockBoundary.from.block, blockBoundary.to.block));\n const isDifferentBlocks = blockBoundary => !eq(blockBoundary.from.block, blockBoundary.to.block);\n const getClosestHost = (root, scope) => {\n const isRoot = node => eq(node, root);\n const isHost = node => isTableCell$2(node) || isContentEditableTrue$3(node.dom);\n return closest$4(scope, isHost, isRoot).filter(isElement$7).getOr(root);\n };\n const hasSameHost = (rootNode, blockBoundary) => {\n const root = SugarElement.fromDom(rootNode);\n return eq(getClosestHost(root, blockBoundary.from.block), getClosestHost(root, blockBoundary.to.block));\n };\n const isEditable$1 = blockBoundary => isContentEditableFalse$b(blockBoundary.from.block.dom) === false && isContentEditableFalse$b(blockBoundary.to.block.dom) === false;\n const hasValidBlocks = blockBoundary => {\n const isValidBlock = block => isTextBlock$2(block) || hasBlockAttr(block.dom) || isListItem$1(block);\n return isValidBlock(blockBoundary.from.block) && isValidBlock(blockBoundary.to.block);\n };\n const skipLastBr = (schema, rootNode, forward, blockPosition) => {\n if (isBr$6(blockPosition.position.getNode()) && !isEmpty$2(schema, blockPosition.block)) {\n return positionIn(false, blockPosition.block.dom).bind(lastPositionInBlock => {\n if (lastPositionInBlock.isEqual(blockPosition.position)) {\n return fromPosition(forward, rootNode, lastPositionInBlock).bind(to => getBlockPosition(rootNode, to));\n } else {\n return Optional.some(blockPosition);\n }\n }).getOr(blockPosition);\n } else {\n return blockPosition;\n }\n };\n const readFromRange = (schema, rootNode, forward, rng) => {\n const fromBlockPos = getBlockPosition(rootNode, CaretPosition.fromRangeStart(rng));\n const toBlockPos = fromBlockPos.bind(blockPos => fromPosition(forward, rootNode, blockPos.position).bind(to => getBlockPosition(rootNode, to).map(blockPos => skipLastBr(schema, rootNode, forward, blockPos))));\n return lift2(fromBlockPos, toBlockPos, blockBoundary).filter(blockBoundary => isDifferentBlocks(blockBoundary) && hasSameHost(rootNode, blockBoundary) && isEditable$1(blockBoundary) && hasValidBlocks(blockBoundary) && isNotAncestorial(blockBoundary));\n };\n const read$1 = (schema, rootNode, forward, rng) => rng.collapsed ? readFromRange(schema, rootNode, forward, rng) : Optional.none();\n\n const getChildrenUntilBlockBoundary = (block, schema) => {\n const children = children$1(block);\n return findIndex$2(children, el => schema.isBlock(name(el))).fold(constant(children), index => children.slice(0, index));\n };\n const extractChildren = (block, schema) => {\n const children = getChildrenUntilBlockBoundary(block, schema);\n each$e(children, remove$4);\n return children;\n };\n const removeEmptyRoot = (schema, rootNode, block) => {\n const parents = parentsAndSelf(block, rootNode);\n return find$2(parents.reverse(), element => isEmpty$2(schema, element)).each(remove$4);\n };\n const isEmptyBefore = (schema, el) => filter$5(prevSiblings(el), el => !isEmpty$2(schema, el)).length === 0;\n const nestedBlockMerge = (rootNode, fromBlock, toBlock, schema, insertionPoint) => {\n if (isEmpty$2(schema, toBlock)) {\n fillWithPaddingBr(toBlock);\n return firstPositionIn(toBlock.dom);\n }\n if (isEmptyBefore(schema, insertionPoint) && isEmpty$2(schema, fromBlock)) {\n before$3(insertionPoint, SugarElement.fromTag('br'));\n }\n const position = prevPosition(toBlock.dom, CaretPosition.before(insertionPoint.dom));\n each$e(extractChildren(fromBlock, schema), child => {\n before$3(insertionPoint, child);\n });\n removeEmptyRoot(schema, rootNode, fromBlock);\n return position;\n };\n const isInline = (schema, node) => schema.isInline(name(node));\n const sidelongBlockMerge = (rootNode, fromBlock, toBlock, schema) => {\n if (isEmpty$2(schema, toBlock)) {\n if (isEmpty$2(schema, fromBlock)) {\n const getInlineToBlockDescendants = el => {\n const helper = (node, elements) => firstChild(node).fold(() => elements, child => isInline(schema, child) ? helper(child, elements.concat(shallow$1(child))) : elements);\n return helper(el, []);\n };\n const newFromBlockDescendants = foldr(getInlineToBlockDescendants(toBlock), (element, descendant) => {\n wrap$2(element, descendant);\n return descendant;\n }, createPaddingBr());\n empty(fromBlock);\n append$1(fromBlock, newFromBlockDescendants);\n }\n remove$4(toBlock);\n return firstPositionIn(fromBlock.dom);\n }\n const position = lastPositionIn(toBlock.dom);\n each$e(extractChildren(fromBlock, schema), child => {\n append$1(toBlock, child);\n });\n removeEmptyRoot(schema, rootNode, fromBlock);\n return position;\n };\n const findInsertionPoint = (toBlock, block) => {\n const parentsAndSelf$1 = parentsAndSelf(block, toBlock);\n return Optional.from(parentsAndSelf$1[parentsAndSelf$1.length - 1]);\n };\n const getInsertionPoint = (fromBlock, toBlock) => contains(toBlock, fromBlock) ? findInsertionPoint(toBlock, fromBlock) : Optional.none();\n const trimBr = (first, block) => {\n positionIn(first, block.dom).bind(position => Optional.from(position.getNode())).map(SugarElement.fromDom).filter(isBr$5).each(remove$4);\n };\n const mergeBlockInto = (rootNode, fromBlock, toBlock, schema) => {\n trimBr(true, fromBlock);\n trimBr(false, toBlock);\n return getInsertionPoint(fromBlock, toBlock).fold(curry(sidelongBlockMerge, rootNode, fromBlock, toBlock, schema), curry(nestedBlockMerge, rootNode, fromBlock, toBlock, schema));\n };\n const mergeBlocks = (rootNode, forward, block1, block2, schema) => forward ? mergeBlockInto(rootNode, block2, block1, schema) : mergeBlockInto(rootNode, block1, block2, schema);\n\n const backspaceDelete$a = (editor, forward) => {\n const rootNode = SugarElement.fromDom(editor.getBody());\n const position = read$1(editor.schema, rootNode.dom, forward, editor.selection.getRng()).map(blockBoundary => () => {\n mergeBlocks(rootNode, forward, blockBoundary.from.block, blockBoundary.to.block, editor.schema).each(pos => {\n editor.selection.setRng(pos.toRange());\n });\n });\n return position;\n };\n\n const deleteRangeMergeBlocks = (rootNode, selection, schema) => {\n const rng = selection.getRng();\n return lift2(getParentBlock$2(rootNode, SugarElement.fromDom(rng.startContainer)), getParentBlock$2(rootNode, SugarElement.fromDom(rng.endContainer)), (block1, block2) => {\n if (!eq(block1, block2)) {\n return Optional.some(() => {\n rng.deleteContents();\n mergeBlocks(rootNode, true, block1, block2, schema).each(pos => {\n selection.setRng(pos.toRange());\n });\n });\n } else {\n return Optional.none();\n }\n }).getOr(Optional.none());\n };\n const isRawNodeInTable = (root, rawNode) => {\n const node = SugarElement.fromDom(rawNode);\n const isRoot = curry(eq, root);\n return ancestor$4(node, isTableCell$2, isRoot).isSome();\n };\n const isSelectionInTable = (root, rng) => isRawNodeInTable(root, rng.startContainer) || isRawNodeInTable(root, rng.endContainer);\n const isEverythingSelected = (root, rng) => {\n const noPrevious = prevPosition(root.dom, CaretPosition.fromRangeStart(rng)).isNone();\n const noNext = nextPosition(root.dom, CaretPosition.fromRangeEnd(rng)).isNone();\n return !isSelectionInTable(root, rng) && noPrevious && noNext;\n };\n const emptyEditor = editor => {\n return Optional.some(() => {\n editor.setContent('');\n editor.selection.setCursorLocation();\n });\n };\n const deleteRange$2 = editor => {\n const rootNode = SugarElement.fromDom(editor.getBody());\n const rng = editor.selection.getRng();\n return isEverythingSelected(rootNode, rng) ? emptyEditor(editor) : deleteRangeMergeBlocks(rootNode, editor.selection, editor.schema);\n };\n const backspaceDelete$9 = (editor, _forward) => editor.selection.isCollapsed() ? Optional.none() : deleteRange$2(editor);\n\n const showCaret = (direction, editor, node, before, scrollIntoView) => Optional.from(editor._selectionOverrides.showCaret(direction, node, before, scrollIntoView));\n const getNodeRange = node => {\n const rng = node.ownerDocument.createRange();\n rng.selectNode(node);\n return rng;\n };\n const selectNode = (editor, node) => {\n const e = editor.dispatch('BeforeObjectSelected', { target: node });\n if (e.isDefaultPrevented()) {\n return Optional.none();\n }\n return Optional.some(getNodeRange(node));\n };\n const renderCaretAtRange = (editor, range, scrollIntoView) => {\n const normalizedRange = normalizeRange(1, editor.getBody(), range);\n const caretPosition = CaretPosition.fromRangeStart(normalizedRange);\n const caretPositionNode = caretPosition.getNode();\n if (isInlineFakeCaretTarget(caretPositionNode)) {\n return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false);\n }\n const caretPositionBeforeNode = caretPosition.getNode(true);\n if (isInlineFakeCaretTarget(caretPositionBeforeNode)) {\n return showCaret(1, editor, caretPositionBeforeNode, false, false);\n }\n const ceRoot = getContentEditableRoot$1(editor.dom.getRoot(), caretPosition.getNode());\n if (isInlineFakeCaretTarget(ceRoot)) {\n return showCaret(1, editor, ceRoot, false, scrollIntoView);\n }\n return Optional.none();\n };\n const renderRangeCaret = (editor, range, scrollIntoView) => range.collapsed ? renderCaretAtRange(editor, range, scrollIntoView).getOr(range) : range;\n\n const isBeforeBoundary = pos => isBeforeContentEditableFalse(pos) || isBeforeMedia(pos);\n const isAfterBoundary = pos => isAfterContentEditableFalse(pos) || isAfterMedia(pos);\n const trimEmptyTextNode = (dom, node) => {\n if (isText$b(node) && node.data.length === 0) {\n dom.remove(node);\n }\n };\n const deleteContentAndShowCaret = (editor, range, node, direction, forward, peekCaretPosition) => {\n showCaret(direction, editor, peekCaretPosition.getNode(!forward), forward, true).each(caretRange => {\n if (range.collapsed) {\n const deleteRange = range.cloneRange();\n if (forward) {\n deleteRange.setEnd(caretRange.startContainer, caretRange.startOffset);\n } else {\n deleteRange.setStart(caretRange.endContainer, caretRange.endOffset);\n }\n deleteRange.deleteContents();\n } else {\n range.deleteContents();\n }\n editor.selection.setRng(caretRange);\n });\n trimEmptyTextNode(editor.dom, node);\n };\n const deleteBoundaryText = (editor, forward) => {\n const range = editor.selection.getRng();\n if (!isText$b(range.commonAncestorContainer)) {\n return Optional.none();\n }\n const direction = forward ? 1 : -1;\n const caretWalker = CaretWalker(editor.getBody());\n const getNextPosFn = curry(getVisualCaretPosition, forward ? caretWalker.next : caretWalker.prev);\n const isBeforeFn = forward ? isBeforeBoundary : isAfterBoundary;\n const caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n const nextCaretPosition = getNextPosFn(caretPosition);\n const normalizedNextCaretPosition = nextCaretPosition ? normalizePosition(forward, nextCaretPosition) : nextCaretPosition;\n if (!normalizedNextCaretPosition || !isMoveInsideSameBlock(caretPosition, normalizedNextCaretPosition)) {\n return Optional.none();\n } else if (isBeforeFn(normalizedNextCaretPosition)) {\n return Optional.some(() => deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, normalizedNextCaretPosition));\n }\n const peekCaretPosition = getNextPosFn(normalizedNextCaretPosition);\n if (peekCaretPosition && isBeforeFn(peekCaretPosition)) {\n if (isMoveInsideSameBlock(normalizedNextCaretPosition, peekCaretPosition)) {\n return Optional.some(() => deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, peekCaretPosition));\n }\n }\n return Optional.none();\n };\n const backspaceDelete$8 = (editor, forward) => deleteBoundaryText(editor, forward);\n\n const getEdgeCefPosition = (editor, atStart) => {\n const root = editor.getBody();\n return atStart ? firstPositionIn(root).filter(isBeforeContentEditableFalse) : lastPositionIn(root).filter(isAfterContentEditableFalse);\n };\n const isCefAtEdgeSelected = editor => {\n const rng = editor.selection.getRng();\n return !rng.collapsed && (getEdgeCefPosition(editor, true).exists(pos => pos.isEqual(CaretPosition.fromRangeStart(rng))) || getEdgeCefPosition(editor, false).exists(pos => pos.isEqual(CaretPosition.fromRangeEnd(rng))));\n };\n\n const isCompoundElement = node => isNonNullable(node) && (isTableCell$2(SugarElement.fromDom(node)) || isListItem$1(SugarElement.fromDom(node)));\n const DeleteAction = Adt.generate([\n { remove: ['element'] },\n { moveToElement: ['element'] },\n { moveToPosition: ['position'] }\n ]);\n const isAtContentEditableBlockCaret = (forward, from) => {\n const elm = from.getNode(!forward);\n const caretLocation = forward ? 'after' : 'before';\n return isElement$6(elm) && elm.getAttribute('data-mce-caret') === caretLocation;\n };\n const isDeleteFromCefDifferentBlocks = (root, forward, from, to, schema) => {\n const inSameBlock = elm => schema.isInline(elm.nodeName.toLowerCase()) && !isInSameBlock(from, to, root);\n return getRelativeCefElm(!forward, from).fold(() => getRelativeCefElm(forward, to).fold(never, inSameBlock), inSameBlock);\n };\n const deleteEmptyBlockOrMoveToCef = (schema, root, forward, from, to) => {\n const toCefElm = to.getNode(!forward);\n return getParentBlock$2(SugarElement.fromDom(root), SugarElement.fromDom(from.getNode())).map(blockElm => isEmpty$2(schema, blockElm) ? DeleteAction.remove(blockElm.dom) : DeleteAction.moveToElement(toCefElm)).orThunk(() => Optional.some(DeleteAction.moveToElement(toCefElm)));\n };\n const findCefPosition = (root, forward, from, schema) => fromPosition(forward, root, from).bind(to => {\n if (isCompoundElement(to.getNode())) {\n return Optional.none();\n } else if (isDeleteFromCefDifferentBlocks(root, forward, from, to, schema)) {\n return Optional.none();\n } else if (forward && isContentEditableFalse$b(to.getNode())) {\n return deleteEmptyBlockOrMoveToCef(schema, root, forward, from, to);\n } else if (!forward && isContentEditableFalse$b(to.getNode(true))) {\n return deleteEmptyBlockOrMoveToCef(schema, root, forward, from, to);\n } else if (forward && isAfterContentEditableFalse(from)) {\n return Optional.some(DeleteAction.moveToPosition(to));\n } else if (!forward && isBeforeContentEditableFalse(from)) {\n return Optional.some(DeleteAction.moveToPosition(to));\n } else {\n return Optional.none();\n }\n });\n const getContentEditableBlockAction = (forward, elm) => {\n if (isNullable(elm)) {\n return Optional.none();\n } else if (forward && isContentEditableFalse$b(elm.nextSibling)) {\n return Optional.some(DeleteAction.moveToElement(elm.nextSibling));\n } else if (!forward && isContentEditableFalse$b(elm.previousSibling)) {\n return Optional.some(DeleteAction.moveToElement(elm.previousSibling));\n } else {\n return Optional.none();\n }\n };\n const skipMoveToActionFromInlineCefToContent = (root, from, deleteAction) => deleteAction.fold(elm => Optional.some(DeleteAction.remove(elm)), elm => Optional.some(DeleteAction.moveToElement(elm)), to => {\n if (isInSameBlock(from, to, root)) {\n return Optional.none();\n } else {\n return Optional.some(DeleteAction.moveToPosition(to));\n }\n });\n const getContentEditableAction = (root, forward, from, schema) => {\n if (isAtContentEditableBlockCaret(forward, from)) {\n return getContentEditableBlockAction(forward, from.getNode(!forward)).orThunk(() => findCefPosition(root, forward, from, schema));\n } else {\n return findCefPosition(root, forward, from, schema).bind(deleteAction => skipMoveToActionFromInlineCefToContent(root, from, deleteAction));\n }\n };\n const read = (root, forward, rng, schema) => {\n const normalizedRange = normalizeRange(forward ? 1 : -1, root, rng);\n const from = CaretPosition.fromRangeStart(normalizedRange);\n const rootElement = SugarElement.fromDom(root);\n if (!forward && isAfterContentEditableFalse(from)) {\n return Optional.some(DeleteAction.remove(from.getNode(true)));\n } else if (forward && isBeforeContentEditableFalse(from)) {\n return Optional.some(DeleteAction.remove(from.getNode()));\n } else if (!forward && isBeforeContentEditableFalse(from) && isAfterBr(rootElement, from, schema)) {\n return findPreviousBr(rootElement, from, schema).map(br => DeleteAction.remove(br.getNode()));\n } else if (forward && isAfterContentEditableFalse(from) && isBeforeBr$1(rootElement, from, schema)) {\n return findNextBr(rootElement, from, schema).map(br => DeleteAction.remove(br.getNode()));\n } else {\n return getContentEditableAction(root, forward, from, schema);\n }\n };\n\n const deleteElement$1 = (editor, forward) => element => {\n editor._selectionOverrides.hideFakeCaret();\n deleteElement$2(editor, forward, SugarElement.fromDom(element));\n return true;\n };\n const moveToElement = (editor, forward) => element => {\n const pos = forward ? CaretPosition.before(element) : CaretPosition.after(element);\n editor.selection.setRng(pos.toRange());\n return true;\n };\n const moveToPosition = editor => pos => {\n editor.selection.setRng(pos.toRange());\n return true;\n };\n const getAncestorCe = (editor, node) => Optional.from(getContentEditableRoot$1(editor.getBody(), node));\n const backspaceDeleteCaret = (editor, forward) => {\n const selectedNode = editor.selection.getNode();\n return getAncestorCe(editor, selectedNode).filter(isContentEditableFalse$b).fold(() => read(editor.getBody(), forward, editor.selection.getRng(), editor.schema).map(deleteAction => () => deleteAction.fold(deleteElement$1(editor, forward), moveToElement(editor, forward), moveToPosition(editor))), () => Optional.some(noop));\n };\n const deleteOffscreenSelection = rootElement => {\n each$e(descendants(rootElement, '.mce-offscreen-selection'), remove$4);\n };\n const backspaceDeleteRange = (editor, forward) => {\n const selectedNode = editor.selection.getNode();\n if (isContentEditableFalse$b(selectedNode) && !isTableCell$3(selectedNode)) {\n const hasCefAncestor = getAncestorCe(editor, selectedNode.parentNode).filter(isContentEditableFalse$b);\n return hasCefAncestor.fold(() => Optional.some(() => {\n deleteOffscreenSelection(SugarElement.fromDom(editor.getBody()));\n deleteElement$2(editor, forward, SugarElement.fromDom(editor.selection.getNode()));\n paddEmptyBody(editor);\n }), () => Optional.some(noop));\n }\n if (isCefAtEdgeSelected(editor)) {\n return Optional.some(() => {\n deleteRangeContents(editor, editor.selection.getRng(), SugarElement.fromDom(editor.getBody()));\n });\n }\n return Optional.none();\n };\n const paddEmptyElement = editor => {\n const dom = editor.dom, selection = editor.selection;\n const ceRoot = getContentEditableRoot$1(editor.getBody(), selection.getNode());\n if (isContentEditableTrue$3(ceRoot) && dom.isBlock(ceRoot) && dom.isEmpty(ceRoot)) {\n const br = dom.create('br', { 'data-mce-bogus': '1' });\n dom.setHTML(ceRoot, '');\n ceRoot.appendChild(br);\n selection.setRng(CaretPosition.before(br).toRange());\n }\n return true;\n };\n const backspaceDelete$7 = (editor, forward) => {\n if (editor.selection.isCollapsed()) {\n return backspaceDeleteCaret(editor, forward);\n } else {\n return backspaceDeleteRange(editor, forward);\n }\n };\n\n const isTextEndpoint = endpoint => endpoint.hasOwnProperty('text');\n const isElementEndpoint = endpoint => endpoint.hasOwnProperty('marker');\n const getBookmark = (range, createMarker) => {\n const getEndpoint = (container, offset) => {\n if (isText$b(container)) {\n return {\n text: container,\n offset\n };\n } else {\n const marker = createMarker();\n const children = container.childNodes;\n if (offset < children.length) {\n container.insertBefore(marker, children[offset]);\n return {\n marker,\n before: true\n };\n } else {\n container.appendChild(marker);\n return {\n marker,\n before: false\n };\n }\n }\n };\n const end = getEndpoint(range.endContainer, range.endOffset);\n const start = getEndpoint(range.startContainer, range.startOffset);\n return {\n start,\n end\n };\n };\n const resolveBookmark = bm => {\n var _a, _b;\n const {start, end} = bm;\n const rng = new window.Range();\n if (isTextEndpoint(start)) {\n rng.setStart(start.text, start.offset);\n } else {\n if (isElementEndpoint(start)) {\n if (start.before) {\n rng.setStartBefore(start.marker);\n } else {\n rng.setStartAfter(start.marker);\n }\n (_a = start.marker.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(start.marker);\n }\n }\n if (isTextEndpoint(end)) {\n rng.setEnd(end.text, end.offset);\n } else {\n if (isElementEndpoint(end)) {\n if (end.before) {\n rng.setEndBefore(end.marker);\n } else {\n rng.setEndAfter(end.marker);\n }\n (_b = end.marker.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(end.marker);\n }\n }\n return rng;\n };\n\n const backspaceDelete$6 = (editor, forward) => {\n var _a;\n const dom = editor.dom;\n const startBlock = dom.getParent(editor.selection.getStart(), dom.isBlock);\n const endBlock = dom.getParent(editor.selection.getEnd(), dom.isBlock);\n const body = editor.getBody();\n const startBlockName = (_a = startBlock === null || startBlock === void 0 ? void 0 : startBlock.nodeName) === null || _a === void 0 ? void 0 : _a.toLowerCase();\n if (startBlockName === 'div' && startBlock && endBlock && startBlock === body.firstChild && endBlock === body.lastChild && !dom.isEmpty(body)) {\n const wrapper = startBlock.cloneNode(false);\n const deleteAction = () => {\n if (forward) {\n execNativeForwardDeleteCommand(editor);\n } else {\n execNativeDeleteCommand(editor);\n }\n if (body.firstChild !== startBlock) {\n const bookmark = getBookmark(editor.selection.getRng(), () => document.createElement('span'));\n Array.from(body.childNodes).forEach(node => wrapper.appendChild(node));\n body.appendChild(wrapper);\n editor.selection.setRng(resolveBookmark(bookmark));\n }\n };\n return Optional.some(deleteAction);\n }\n return Optional.none();\n };\n\n const deleteCaret$2 = (editor, forward) => {\n const fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n return fromPosition(forward, editor.getBody(), fromPos).filter(pos => forward ? isBeforeImageBlock(pos) : isAfterImageBlock(pos)).bind(pos => getChildNodeAtRelativeOffset(forward ? 0 : -1, pos)).map(elm => () => editor.selection.select(elm));\n };\n const backspaceDelete$5 = (editor, forward) => editor.selection.isCollapsed() ? deleteCaret$2(editor, forward) : Optional.none();\n\n const isText$2 = isText$b;\n const startsWithCaretContainer = node => isText$2(node) && node.data[0] === ZWSP$1;\n const endsWithCaretContainer = node => isText$2(node) && node.data[node.data.length - 1] === ZWSP$1;\n const createZwsp = node => {\n var _a;\n const doc = (_a = node.ownerDocument) !== null && _a !== void 0 ? _a : document;\n return doc.createTextNode(ZWSP$1);\n };\n const insertBefore$1 = node => {\n var _a;\n if (isText$2(node.previousSibling)) {\n if (endsWithCaretContainer(node.previousSibling)) {\n return node.previousSibling;\n } else {\n node.previousSibling.appendData(ZWSP$1);\n return node.previousSibling;\n }\n } else if (isText$2(node)) {\n if (startsWithCaretContainer(node)) {\n return node;\n } else {\n node.insertData(0, ZWSP$1);\n return node;\n }\n } else {\n const newNode = createZwsp(node);\n (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(newNode, node);\n return newNode;\n }\n };\n const insertAfter$1 = node => {\n var _a, _b;\n if (isText$2(node.nextSibling)) {\n if (startsWithCaretContainer(node.nextSibling)) {\n return node.nextSibling;\n } else {\n node.nextSibling.insertData(0, ZWSP$1);\n return node.nextSibling;\n }\n } else if (isText$2(node)) {\n if (endsWithCaretContainer(node)) {\n return node;\n } else {\n node.appendData(ZWSP$1);\n return node;\n }\n } else {\n const newNode = createZwsp(node);\n if (node.nextSibling) {\n (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(newNode, node.nextSibling);\n } else {\n (_b = node.parentNode) === null || _b === void 0 ? void 0 : _b.appendChild(newNode);\n }\n return newNode;\n }\n };\n const insertInline = (before, node) => before ? insertBefore$1(node) : insertAfter$1(node);\n const insertInlineBefore = curry(insertInline, true);\n const insertInlineAfter = curry(insertInline, false);\n\n const insertInlinePos = (pos, before) => {\n if (isText$b(pos.container())) {\n return insertInline(before, pos.container());\n } else {\n return insertInline(before, pos.getNode());\n }\n };\n const isPosCaretContainer = (pos, caret) => {\n const caretNode = caret.get();\n return caretNode && pos.container() === caretNode && isCaretContainerInline(caretNode);\n };\n const renderCaret = (caret, location) => location.fold(element => {\n remove$2(caret.get());\n const text = insertInlineBefore(element);\n caret.set(text);\n return Optional.some(CaretPosition(text, text.length - 1));\n }, element => firstPositionIn(element).map(pos => {\n if (!isPosCaretContainer(pos, caret)) {\n remove$2(caret.get());\n const text = insertInlinePos(pos, true);\n caret.set(text);\n return CaretPosition(text, 1);\n } else {\n const node = caret.get();\n return CaretPosition(node, 1);\n }\n }), element => lastPositionIn(element).map(pos => {\n if (!isPosCaretContainer(pos, caret)) {\n remove$2(caret.get());\n const text = insertInlinePos(pos, false);\n caret.set(text);\n return CaretPosition(text, text.length - 1);\n } else {\n const node = caret.get();\n return CaretPosition(node, node.length - 1);\n }\n }), element => {\n remove$2(caret.get());\n const text = insertInlineAfter(element);\n caret.set(text);\n return Optional.some(CaretPosition(text, 1));\n });\n\n const evaluateUntil = (fns, args) => {\n for (let i = 0; i < fns.length; i++) {\n const result = fns[i].apply(null, args);\n if (result.isSome()) {\n return result;\n }\n }\n return Optional.none();\n };\n\n const Location = Adt.generate([\n { before: ['element'] },\n { start: ['element'] },\n { end: ['element'] },\n { after: ['element'] }\n ]);\n const rescope$1 = (rootNode, node) => {\n const parentBlock = getParentBlock$3(node, rootNode);\n return parentBlock ? parentBlock : rootNode;\n };\n const before = (isInlineTarget, rootNode, pos) => {\n const nPos = normalizeForwards(pos);\n const scope = rescope$1(rootNode, nPos.container());\n return findRootInline(isInlineTarget, scope, nPos).fold(() => nextPosition(scope, nPos).bind(curry(findRootInline, isInlineTarget, scope)).map(inline => Location.before(inline)), Optional.none);\n };\n const isNotInsideFormatCaretContainer = (rootNode, elm) => getParentCaretContainer(rootNode, elm) === null;\n const findInsideRootInline = (isInlineTarget, rootNode, pos) => findRootInline(isInlineTarget, rootNode, pos).filter(curry(isNotInsideFormatCaretContainer, rootNode));\n const start$1 = (isInlineTarget, rootNode, pos) => {\n const nPos = normalizeBackwards(pos);\n return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(inline => {\n const prevPos = prevPosition(inline, nPos);\n return prevPos.isNone() ? Optional.some(Location.start(inline)) : Optional.none();\n });\n };\n const end = (isInlineTarget, rootNode, pos) => {\n const nPos = normalizeForwards(pos);\n return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(inline => {\n const nextPos = nextPosition(inline, nPos);\n return nextPos.isNone() ? Optional.some(Location.end(inline)) : Optional.none();\n });\n };\n const after = (isInlineTarget, rootNode, pos) => {\n const nPos = normalizeBackwards(pos);\n const scope = rescope$1(rootNode, nPos.container());\n return findRootInline(isInlineTarget, scope, nPos).fold(() => prevPosition(scope, nPos).bind(curry(findRootInline, isInlineTarget, scope)).map(inline => Location.after(inline)), Optional.none);\n };\n const isValidLocation = location => !isRtl(getElement(location));\n const readLocation = (isInlineTarget, rootNode, pos) => {\n const location = evaluateUntil([\n before,\n start$1,\n end,\n after\n ], [\n isInlineTarget,\n rootNode,\n pos\n ]);\n return location.filter(isValidLocation);\n };\n const getElement = location => location.fold(identity, identity, identity, identity);\n const getName = location => location.fold(constant('before'), constant('start'), constant('end'), constant('after'));\n const outside = location => location.fold(Location.before, Location.before, Location.after, Location.after);\n const inside = location => location.fold(Location.start, Location.start, Location.end, Location.end);\n const isEq = (location1, location2) => getName(location1) === getName(location2) && getElement(location1) === getElement(location2);\n const betweenInlines = (forward, isInlineTarget, rootNode, from, to, location) => lift2(findRootInline(isInlineTarget, rootNode, from), findRootInline(isInlineTarget, rootNode, to), (fromInline, toInline) => {\n if (fromInline !== toInline && hasSameParentBlock(rootNode, fromInline, toInline)) {\n return Location.after(forward ? fromInline : toInline);\n } else {\n return location;\n }\n }).getOr(location);\n const skipNoMovement = (fromLocation, toLocation) => fromLocation.fold(always, fromLocation => !isEq(fromLocation, toLocation));\n const findLocationTraverse = (forward, isInlineTarget, rootNode, fromLocation, pos) => {\n const from = normalizePosition(forward, pos);\n const to = fromPosition(forward, rootNode, from).map(curry(normalizePosition, forward));\n const location = to.fold(() => fromLocation.map(outside), to => readLocation(isInlineTarget, rootNode, to).map(curry(betweenInlines, forward, isInlineTarget, rootNode, from, to)).filter(curry(skipNoMovement, fromLocation)));\n return location.filter(isValidLocation);\n };\n const findLocationSimple = (forward, location) => {\n if (forward) {\n return location.fold(compose(Optional.some, Location.start), Optional.none, compose(Optional.some, Location.after), Optional.none);\n } else {\n return location.fold(Optional.none, compose(Optional.some, Location.before), Optional.none, compose(Optional.some, Location.end));\n }\n };\n const findLocation$1 = (forward, isInlineTarget, rootNode, pos) => {\n const from = normalizePosition(forward, pos);\n const fromLocation = readLocation(isInlineTarget, rootNode, from);\n return readLocation(isInlineTarget, rootNode, from).bind(curry(findLocationSimple, forward)).orThunk(() => findLocationTraverse(forward, isInlineTarget, rootNode, fromLocation, pos));\n };\n\n const hasSelectionModifyApi = editor => {\n return isFunction(editor.selection.getSel().modify);\n };\n const moveRel = (forward, selection, pos) => {\n const delta = forward ? 1 : -1;\n selection.setRng(CaretPosition(pos.container(), pos.offset() + delta).toRange());\n selection.getSel().modify('move', forward ? 'forward' : 'backward', 'word');\n return true;\n };\n const moveByWord = (forward, editor) => {\n const rng = editor.selection.getRng();\n const pos = forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng);\n if (!hasSelectionModifyApi(editor)) {\n return false;\n } else if (forward && isBeforeInline(pos)) {\n return moveRel(true, editor.selection, pos);\n } else if (!forward && isAfterInline(pos)) {\n return moveRel(false, editor.selection, pos);\n } else {\n return false;\n }\n };\n\n var BreakType;\n (function (BreakType) {\n BreakType[BreakType['Br'] = 0] = 'Br';\n BreakType[BreakType['Block'] = 1] = 'Block';\n BreakType[BreakType['Wrap'] = 2] = 'Wrap';\n BreakType[BreakType['Eol'] = 3] = 'Eol';\n }(BreakType || (BreakType = {})));\n const flip = (direction, positions) => direction === -1 ? reverse(positions) : positions;\n const walk$1 = (direction, caretWalker, pos) => direction === 1 ? caretWalker.next(pos) : caretWalker.prev(pos);\n const getBreakType = (scope, direction, currentPos, nextPos) => {\n if (isBr$6(nextPos.getNode(direction === 1))) {\n return BreakType.Br;\n } else if (isInSameBlock(currentPos, nextPos) === false) {\n return BreakType.Block;\n } else {\n return BreakType.Wrap;\n }\n };\n const getPositionsUntil = (predicate, direction, scope, start) => {\n const caretWalker = CaretWalker(scope);\n let currentPos = start;\n const positions = [];\n while (currentPos) {\n const nextPos = walk$1(direction, caretWalker, currentPos);\n if (!nextPos) {\n break;\n }\n if (isBr$6(nextPos.getNode(false))) {\n if (direction === 1) {\n return {\n positions: flip(direction, positions).concat([nextPos]),\n breakType: BreakType.Br,\n breakAt: Optional.some(nextPos)\n };\n } else {\n return {\n positions: flip(direction, positions),\n breakType: BreakType.Br,\n breakAt: Optional.some(nextPos)\n };\n }\n }\n if (!nextPos.isVisible()) {\n currentPos = nextPos;\n continue;\n }\n if (predicate(currentPos, nextPos)) {\n const breakType = getBreakType(scope, direction, currentPos, nextPos);\n return {\n positions: flip(direction, positions),\n breakType,\n breakAt: Optional.some(nextPos)\n };\n }\n positions.push(nextPos);\n currentPos = nextPos;\n }\n return {\n positions: flip(direction, positions),\n breakType: BreakType.Eol,\n breakAt: Optional.none()\n };\n };\n const getAdjacentLinePositions = (direction, getPositionsUntilBreak, scope, start) => getPositionsUntilBreak(scope, start).breakAt.map(pos => {\n const positions = getPositionsUntilBreak(scope, pos).positions;\n return direction === -1 ? positions.concat(pos) : [pos].concat(positions);\n }).getOr([]);\n const findClosestHorizontalPositionFromPoint = (positions, x) => foldl(positions, (acc, newPos) => acc.fold(() => Optional.some(newPos), lastPos => lift2(head(lastPos.getClientRects()), head(newPos.getClientRects()), (lastRect, newRect) => {\n const lastDist = Math.abs(x - lastRect.left);\n const newDist = Math.abs(x - newRect.left);\n return newDist <= lastDist ? newPos : lastPos;\n }).or(acc)), Optional.none());\n const findClosestHorizontalPosition = (positions, pos) => head(pos.getClientRects()).bind(targetRect => findClosestHorizontalPositionFromPoint(positions, targetRect.left));\n const getPositionsUntilPreviousLine = curry(getPositionsUntil, CaretPosition.isAbove, -1);\n const getPositionsUntilNextLine = curry(getPositionsUntil, CaretPosition.isBelow, 1);\n const getPositionsAbove = curry(getAdjacentLinePositions, -1, getPositionsUntilPreviousLine);\n const getPositionsBelow = curry(getAdjacentLinePositions, 1, getPositionsUntilNextLine);\n const isAtFirstLine = (scope, pos) => getPositionsUntilPreviousLine(scope, pos).breakAt.isNone();\n const isAtLastLine = (scope, pos) => getPositionsUntilNextLine(scope, pos).breakAt.isNone();\n const getFirstLinePositions = scope => firstPositionIn(scope).map(pos => [pos].concat(getPositionsUntilNextLine(scope, pos).positions)).getOr([]);\n const getLastLinePositions = scope => lastPositionIn(scope).map(pos => getPositionsUntilPreviousLine(scope, pos).positions.concat(pos)).getOr([]);\n const getClosestPositionAbove = (scope, pos) => findClosestHorizontalPosition(getPositionsAbove(scope, pos), pos);\n const getClosestPositionBelow = (scope, pos) => findClosestHorizontalPosition(getPositionsBelow(scope, pos), pos);\n\n const isContentEditableFalse$5 = isContentEditableFalse$b;\n const distanceToRectLeft$1 = (clientRect, clientX) => Math.abs(clientRect.left - clientX);\n const distanceToRectRight$1 = (clientRect, clientX) => Math.abs(clientRect.right - clientX);\n const isNodeClientRect = rect => hasNonNullableKey(rect, 'node');\n const findClosestClientRect = (clientRects, clientX) => reduce(clientRects, (oldClientRect, clientRect) => {\n const oldDistance = Math.min(distanceToRectLeft$1(oldClientRect, clientX), distanceToRectRight$1(oldClientRect, clientX));\n const newDistance = Math.min(distanceToRectLeft$1(clientRect, clientX), distanceToRectRight$1(clientRect, clientX));\n if (newDistance === oldDistance && isNodeClientRect(clientRect) && isContentEditableFalse$5(clientRect.node)) {\n return clientRect;\n }\n if (newDistance < oldDistance) {\n return clientRect;\n }\n return oldClientRect;\n });\n\n const getNodeClientRects = node => {\n const toArrayWithNode = clientRects => {\n return map$3(clientRects, rect => {\n const clientRect = clone$1(rect);\n clientRect.node = node;\n return clientRect;\n });\n };\n if (isElement$6(node)) {\n return toArrayWithNode(node.getClientRects());\n } else if (isText$b(node)) {\n const rng = node.ownerDocument.createRange();\n rng.setStart(node, 0);\n rng.setEnd(node, node.data.length);\n return toArrayWithNode(rng.getClientRects());\n } else {\n return [];\n }\n };\n const getClientRects = nodes => bind$3(nodes, getNodeClientRects);\n\n var VDirection;\n (function (VDirection) {\n VDirection[VDirection['Up'] = -1] = 'Up';\n VDirection[VDirection['Down'] = 1] = 'Down';\n }(VDirection || (VDirection = {})));\n const findUntil = (direction, root, predicateFn, node) => {\n let currentNode = node;\n while (currentNode = findNode(currentNode, direction, isEditableCaretCandidate$1, root)) {\n if (predicateFn(currentNode)) {\n return;\n }\n }\n };\n const walkUntil = (direction, isAboveFn, isBeflowFn, root, predicateFn, caretPosition) => {\n let line = 0;\n const result = [];\n const add = node => {\n let clientRects = getClientRects([node]);\n if (direction === VDirection.Up) {\n clientRects = clientRects.reverse();\n }\n for (let i = 0; i < clientRects.length; i++) {\n const clientRect = clientRects[i];\n if (isBeflowFn(clientRect, targetClientRect)) {\n continue;\n }\n if (result.length > 0 && isAboveFn(clientRect, last$1(result))) {\n line++;\n }\n clientRect.line = line;\n if (predicateFn(clientRect)) {\n return true;\n }\n result.push(clientRect);\n }\n return false;\n };\n const targetClientRect = last$1(caretPosition.getClientRects());\n if (!targetClientRect) {\n return result;\n }\n const node = caretPosition.getNode();\n if (node) {\n add(node);\n findUntil(direction, root, add, node);\n }\n return result;\n };\n const aboveLineNumber = (lineNumber, clientRect) => clientRect.line > lineNumber;\n const isLineNumber = (lineNumber, clientRect) => clientRect.line === lineNumber;\n const upUntil = curry(walkUntil, VDirection.Up, isAbove$1, isBelow$1);\n const downUntil = curry(walkUntil, VDirection.Down, isBelow$1, isAbove$1);\n const getLastClientRect = caretPosition => {\n return last$1(caretPosition.getClientRects());\n };\n const positionsUntil = (direction, root, predicateFn, node) => {\n const caretWalker = CaretWalker(root);\n let walkFn;\n let isBelowFn;\n let isAboveFn;\n let caretPosition;\n const result = [];\n let line = 0;\n if (direction === VDirection.Down) {\n walkFn = caretWalker.next;\n isBelowFn = isBelow$1;\n isAboveFn = isAbove$1;\n caretPosition = CaretPosition.after(node);\n } else {\n walkFn = caretWalker.prev;\n isBelowFn = isAbove$1;\n isAboveFn = isBelow$1;\n caretPosition = CaretPosition.before(node);\n }\n const targetClientRect = getLastClientRect(caretPosition);\n do {\n if (!caretPosition.isVisible()) {\n continue;\n }\n const rect = getLastClientRect(caretPosition);\n if (isAboveFn(rect, targetClientRect)) {\n continue;\n }\n if (result.length > 0 && isBelowFn(rect, last$1(result))) {\n line++;\n }\n const clientRect = clone$1(rect);\n clientRect.position = caretPosition;\n clientRect.line = line;\n if (predicateFn(clientRect)) {\n return result;\n }\n result.push(clientRect);\n } while (caretPosition = walkFn(caretPosition));\n return result;\n };\n const isAboveLine = lineNumber => clientRect => aboveLineNumber(lineNumber, clientRect);\n const isLine = lineNumber => clientRect => isLineNumber(lineNumber, clientRect);\n\n const moveToRange = (editor, rng) => {\n editor.selection.setRng(rng);\n scrollRangeIntoView(editor, editor.selection.getRng());\n };\n const renderRangeCaretOpt = (editor, range, scrollIntoView) => Optional.some(renderRangeCaret(editor, range, scrollIntoView));\n const moveHorizontally = (editor, direction, range, isBefore, isAfter, isElement) => {\n const forwards = direction === 1;\n const caretWalker = CaretWalker(editor.getBody());\n const getNextPosFn = curry(getVisualCaretPosition, forwards ? caretWalker.next : caretWalker.prev);\n const isBeforeFn = forwards ? isBefore : isAfter;\n if (!range.collapsed) {\n const node = getSelectedNode(range);\n if (isElement(node)) {\n return showCaret(direction, editor, node, direction === -1, false);\n } else if (isCefAtEdgeSelected(editor)) {\n const newRange = range.cloneRange();\n newRange.collapse(direction === -1);\n return Optional.from(newRange);\n }\n }\n const caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n if (isBeforeFn(caretPosition)) {\n return selectNode(editor, caretPosition.getNode(!forwards));\n }\n let nextCaretPosition = getNextPosFn(caretPosition);\n const rangeIsInContainerBlock = isRangeInCaretContainerBlock(range);\n if (!nextCaretPosition) {\n return rangeIsInContainerBlock ? Optional.some(range) : Optional.none();\n } else {\n nextCaretPosition = normalizePosition(forwards, nextCaretPosition);\n }\n if (isBeforeFn(nextCaretPosition)) {\n return showCaret(direction, editor, nextCaretPosition.getNode(!forwards), forwards, false);\n }\n const peekCaretPosition = getNextPosFn(nextCaretPosition);\n if (peekCaretPosition && isBeforeFn(peekCaretPosition)) {\n if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\n return showCaret(direction, editor, peekCaretPosition.getNode(!forwards), forwards, false);\n }\n }\n if (rangeIsInContainerBlock) {\n return renderRangeCaretOpt(editor, nextCaretPosition.toRange(), false);\n }\n return Optional.none();\n };\n const moveVertically = (editor, direction, range, isBefore, isAfter, isElement) => {\n const caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n const caretClientRect = last$1(caretPosition.getClientRects());\n const forwards = direction === VDirection.Down;\n const root = editor.getBody();\n if (!caretClientRect) {\n return Optional.none();\n }\n if (isCefAtEdgeSelected(editor)) {\n const caretPosition = forwards ? CaretPosition.fromRangeEnd(range) : CaretPosition.fromRangeStart(range);\n const getClosestFn = !forwards ? getClosestPositionAbove : getClosestPositionBelow;\n return getClosestFn(root, caretPosition).orThunk(() => Optional.from(caretPosition)).map(pos => pos.toRange());\n }\n const walkerFn = forwards ? downUntil : upUntil;\n const linePositions = walkerFn(root, isAboveLine(1), caretPosition);\n const nextLinePositions = filter$5(linePositions, isLine(1));\n const clientX = caretClientRect.left;\n const nextLineRect = findClosestClientRect(nextLinePositions, clientX);\n if (nextLineRect && isElement(nextLineRect.node)) {\n const dist1 = Math.abs(clientX - nextLineRect.left);\n const dist2 = Math.abs(clientX - nextLineRect.right);\n return showCaret(direction, editor, nextLineRect.node, dist1 < dist2, false);\n }\n let currentNode;\n if (isBefore(caretPosition)) {\n currentNode = caretPosition.getNode();\n } else if (isAfter(caretPosition)) {\n currentNode = caretPosition.getNode(true);\n } else {\n currentNode = getSelectedNode(range);\n }\n if (currentNode) {\n const caretPositions = positionsUntil(direction, root, isAboveLine(1), currentNode);\n let closestNextLineRect = findClosestClientRect(filter$5(caretPositions, isLine(1)), clientX);\n if (closestNextLineRect) {\n return renderRangeCaretOpt(editor, closestNextLineRect.position.toRange(), false);\n }\n closestNextLineRect = last$1(filter$5(caretPositions, isLine(0)));\n if (closestNextLineRect) {\n return renderRangeCaretOpt(editor, closestNextLineRect.position.toRange(), false);\n }\n }\n if (nextLinePositions.length === 0) {\n return getLineEndPoint(editor, forwards).filter(forwards ? isAfter : isBefore).map(pos => renderRangeCaret(editor, pos.toRange(), false));\n }\n return Optional.none();\n };\n const getLineEndPoint = (editor, forward) => {\n const rng = editor.selection.getRng();\n const from = forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng);\n const host = getEditingHost(from.container(), editor.getBody());\n if (forward) {\n const lineInfo = getPositionsUntilNextLine(host, from);\n return last$2(lineInfo.positions);\n } else {\n const lineInfo = getPositionsUntilPreviousLine(host, from);\n return head(lineInfo.positions);\n }\n };\n const moveToLineEndPoint$3 = (editor, forward, isElementPosition) => getLineEndPoint(editor, forward).filter(isElementPosition).exists(pos => {\n editor.selection.setRng(pos.toRange());\n return true;\n });\n\n const setCaretPosition = (editor, pos) => {\n const rng = editor.dom.createRng();\n rng.setStart(pos.container(), pos.offset());\n rng.setEnd(pos.container(), pos.offset());\n editor.selection.setRng(rng);\n };\n const setSelected = (state, elm) => {\n if (state) {\n elm.setAttribute('data-mce-selected', 'inline-boundary');\n } else {\n elm.removeAttribute('data-mce-selected');\n }\n };\n const renderCaretLocation = (editor, caret, location) => renderCaret(caret, location).map(pos => {\n setCaretPosition(editor, pos);\n return location;\n });\n const getPositionFromRange = (range, root, forward) => {\n const start = CaretPosition.fromRangeStart(range);\n if (range.collapsed) {\n return start;\n } else {\n const end = CaretPosition.fromRangeEnd(range);\n return forward ? prevPosition(root, end).getOr(end) : nextPosition(root, start).getOr(start);\n }\n };\n const findLocation = (editor, caret, forward) => {\n const rootNode = editor.getBody();\n const from = getPositionFromRange(editor.selection.getRng(), rootNode, forward);\n const isInlineTarget$1 = curry(isInlineTarget, editor);\n const location = findLocation$1(forward, isInlineTarget$1, rootNode, from);\n return location.bind(location => renderCaretLocation(editor, caret, location));\n };\n const toggleInlines = (isInlineTarget, dom, elms) => {\n const inlineBoundaries = map$3(descendants(SugarElement.fromDom(dom.getRoot()), '*[data-mce-selected=\"inline-boundary\"]'), e => e.dom);\n const selectedInlines = filter$5(inlineBoundaries, isInlineTarget);\n const targetInlines = filter$5(elms, isInlineTarget);\n each$e(difference(selectedInlines, targetInlines), curry(setSelected, false));\n each$e(difference(targetInlines, selectedInlines), curry(setSelected, true));\n };\n const safeRemoveCaretContainer = (editor, caret) => {\n const caretValue = caret.get();\n if (editor.selection.isCollapsed() && !editor.composing && caretValue) {\n const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n if (CaretPosition.isTextPosition(pos) && !isAtZwsp(pos)) {\n setCaretPosition(editor, removeAndReposition(caretValue, pos));\n caret.set(null);\n }\n }\n };\n const renderInsideInlineCaret = (isInlineTarget, editor, caret, elms) => {\n if (editor.selection.isCollapsed()) {\n const inlines = filter$5(elms, isInlineTarget);\n each$e(inlines, _inline => {\n const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n readLocation(isInlineTarget, editor.getBody(), pos).bind(location => renderCaretLocation(editor, caret, location));\n });\n }\n };\n const move$3 = (editor, caret, forward) => isInlineBoundariesEnabled(editor) ? findLocation(editor, caret, forward).isSome() : false;\n const moveWord = (forward, editor, _caret) => isInlineBoundariesEnabled(editor) ? moveByWord(forward, editor) : false;\n const setupSelectedState = editor => {\n const caret = Cell(null);\n const isInlineTarget$1 = curry(isInlineTarget, editor);\n editor.on('NodeChange', e => {\n if (isInlineBoundariesEnabled(editor)) {\n toggleInlines(isInlineTarget$1, editor.dom, e.parents);\n safeRemoveCaretContainer(editor, caret);\n renderInsideInlineCaret(isInlineTarget$1, editor, caret, e.parents);\n }\n });\n return caret;\n };\n const moveNextWord = curry(moveWord, true);\n const movePrevWord = curry(moveWord, false);\n const moveToLineEndPoint$2 = (editor, forward, caret) => {\n if (isInlineBoundariesEnabled(editor)) {\n const linePoint = getLineEndPoint(editor, forward).getOrThunk(() => {\n const rng = editor.selection.getRng();\n return forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng);\n });\n return readLocation(curry(isInlineTarget, editor), editor.getBody(), linePoint).exists(loc => {\n const outsideLoc = outside(loc);\n return renderCaret(caret, outsideLoc).exists(pos => {\n setCaretPosition(editor, pos);\n return true;\n });\n });\n } else {\n return false;\n }\n };\n\n const rangeFromPositions = (from, to) => {\n const range = document.createRange();\n range.setStart(from.container(), from.offset());\n range.setEnd(to.container(), to.offset());\n return range;\n };\n const hasOnlyTwoOrLessPositionsLeft = elm => lift2(firstPositionIn(elm), lastPositionIn(elm), (firstPos, lastPos) => {\n const normalizedFirstPos = normalizePosition(true, firstPos);\n const normalizedLastPos = normalizePosition(false, lastPos);\n return nextPosition(elm, normalizedFirstPos).forall(pos => pos.isEqual(normalizedLastPos));\n }).getOr(true);\n const setCaretLocation = (editor, caret) => location => renderCaret(caret, location).map(pos => () => setCaretPosition(editor, pos));\n const deleteFromTo = (editor, caret, from, to) => {\n const rootNode = editor.getBody();\n const isInlineTarget$1 = curry(isInlineTarget, editor);\n editor.undoManager.ignore(() => {\n editor.selection.setRng(rangeFromPositions(from, to));\n execNativeDeleteCommand(editor);\n readLocation(isInlineTarget$1, rootNode, CaretPosition.fromRangeStart(editor.selection.getRng())).map(inside).bind(setCaretLocation(editor, caret)).each(call);\n });\n editor.nodeChanged();\n };\n const rescope = (rootNode, node) => {\n const parentBlock = getParentBlock$3(node, rootNode);\n return parentBlock ? parentBlock : rootNode;\n };\n const backspaceDeleteCollapsed = (editor, caret, forward, from) => {\n const rootNode = rescope(editor.getBody(), from.container());\n const isInlineTarget$1 = curry(isInlineTarget, editor);\n const fromLocation = readLocation(isInlineTarget$1, rootNode, from);\n const location = fromLocation.bind(location => {\n if (forward) {\n return location.fold(constant(Optional.some(inside(location))), Optional.none, constant(Optional.some(outside(location))), Optional.none);\n } else {\n return location.fold(Optional.none, constant(Optional.some(outside(location))), Optional.none, constant(Optional.some(inside(location))));\n }\n });\n return location.map(setCaretLocation(editor, caret)).getOrThunk(() => {\n const toPosition = navigate(forward, rootNode, from);\n const toLocation = toPosition.bind(pos => readLocation(isInlineTarget$1, rootNode, pos));\n return lift2(fromLocation, toLocation, () => findRootInline(isInlineTarget$1, rootNode, from).bind(elm => {\n if (hasOnlyTwoOrLessPositionsLeft(elm)) {\n return Optional.some(() => {\n deleteElement$2(editor, forward, SugarElement.fromDom(elm));\n });\n } else {\n return Optional.none();\n }\n })).getOrThunk(() => toLocation.bind(() => toPosition.map(to => {\n return () => {\n if (forward) {\n deleteFromTo(editor, caret, from, to);\n } else {\n deleteFromTo(editor, caret, to, from);\n }\n };\n })));\n });\n };\n const backspaceDelete$4 = (editor, caret, forward) => {\n if (editor.selection.isCollapsed() && isInlineBoundariesEnabled(editor)) {\n const from = CaretPosition.fromRangeStart(editor.selection.getRng());\n return backspaceDeleteCollapsed(editor, caret, forward, from);\n }\n return Optional.none();\n };\n\n const hasMultipleChildren = elm => childNodesCount(elm) > 1;\n const getParentsUntil = (editor, pred) => {\n const rootElm = SugarElement.fromDom(editor.getBody());\n const startElm = SugarElement.fromDom(editor.selection.getStart());\n const parents = parentsAndSelf(startElm, rootElm);\n return findIndex$2(parents, pred).fold(constant(parents), index => parents.slice(0, index));\n };\n const hasOnlyOneChild = elm => childNodesCount(elm) === 1;\n const getParentInlinesUntilMultichildInline = editor => getParentsUntil(editor, elm => editor.schema.isBlock(name(elm)) || hasMultipleChildren(elm));\n const getParentInlines = editor => getParentsUntil(editor, el => editor.schema.isBlock(name(el)));\n const getFormatNodes = (editor, parentInlines) => {\n const isFormatElement$1 = curry(isFormatElement, editor);\n return bind$3(parentInlines, elm => isFormatElement$1(elm) ? [elm.dom] : []);\n };\n const getFormatNodesAtStart = editor => {\n const parentInlines = getParentInlines(editor);\n return getFormatNodes(editor, parentInlines);\n };\n const deleteLastPosition = (forward, editor, target, parentInlines) => {\n const formatNodes = getFormatNodes(editor, parentInlines);\n if (formatNodes.length === 0) {\n deleteElement$2(editor, forward, target);\n } else {\n const pos = replaceWithCaretFormat(target.dom, formatNodes);\n editor.selection.setRng(pos.toRange());\n }\n };\n const deleteCaret$1 = (editor, forward) => {\n const parentInlines = filter$5(getParentInlinesUntilMultichildInline(editor), hasOnlyOneChild);\n return last$2(parentInlines).bind(target => {\n const fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n if (willDeleteLastPositionInElement(forward, fromPos, target.dom) && !isEmptyCaretFormatElement(target)) {\n return Optional.some(() => deleteLastPosition(forward, editor, target, parentInlines));\n } else {\n return Optional.none();\n }\n });\n };\n const isBrInEmptyElement = (editor, elm) => {\n const parentElm = elm.parentElement;\n return isBr$6(elm) && !isNull(parentElm) && editor.dom.isEmpty(parentElm);\n };\n const isEmptyCaret = elm => isEmptyCaretFormatElement(SugarElement.fromDom(elm));\n const createCaretFormatAtStart = (editor, formatNodes) => {\n const startElm = editor.selection.getStart();\n const pos = isBrInEmptyElement(editor, startElm) || isEmptyCaret(startElm) ? replaceWithCaretFormat(startElm, formatNodes) : createCaretFormatAtStart$1(editor.selection.getRng(), formatNodes);\n editor.selection.setRng(pos.toRange());\n };\n const updateCaretFormat = (editor, updateFormats) => {\n const missingFormats = difference(updateFormats, getFormatNodesAtStart(editor));\n if (missingFormats.length > 0) {\n createCaretFormatAtStart(editor, missingFormats);\n }\n };\n const rangeStartsAtTextContainer = rng => isText$b(rng.startContainer);\n const rangeStartsAtStartOfTextContainer = rng => rng.startOffset === 0 && rangeStartsAtTextContainer(rng);\n const rangeStartParentIsFormatElement = (editor, rng) => {\n const startParent = rng.startContainer.parentElement;\n return !isNull(startParent) && isFormatElement(editor, SugarElement.fromDom(startParent));\n };\n const rangeStartAndEndHaveSameParent = rng => {\n const startParent = rng.startContainer.parentNode;\n const endParent = rng.endContainer.parentNode;\n return !isNull(startParent) && !isNull(endParent) && startParent.isEqualNode(endParent);\n };\n const rangeEndsAtEndOfEndContainer = rng => {\n const endContainer = rng.endContainer;\n return rng.endOffset === (isText$b(endContainer) ? endContainer.length : endContainer.childNodes.length);\n };\n const rangeEndsAtEndOfStartContainer = rng => rangeStartAndEndHaveSameParent(rng) && rangeEndsAtEndOfEndContainer(rng);\n const rangeEndsAfterEndOfStartContainer = rng => !rng.endContainer.isEqualNode(rng.commonAncestorContainer);\n const rangeEndsAtOrAfterEndOfStartContainer = rng => rangeEndsAtEndOfStartContainer(rng) || rangeEndsAfterEndOfStartContainer(rng);\n const requiresDeleteRangeOverride = editor => {\n const rng = editor.selection.getRng();\n return rangeStartsAtStartOfTextContainer(rng) && rangeStartParentIsFormatElement(editor, rng) && rangeEndsAtOrAfterEndOfStartContainer(rng);\n };\n const deleteRange$1 = editor => {\n if (requiresDeleteRangeOverride(editor)) {\n const formatNodes = getFormatNodesAtStart(editor);\n return Optional.some(() => {\n execNativeDeleteCommand(editor);\n updateCaretFormat(editor, formatNodes);\n });\n } else {\n return Optional.none();\n }\n };\n const backspaceDelete$3 = (editor, forward) => editor.selection.isCollapsed() ? deleteCaret$1(editor, forward) : deleteRange$1(editor);\n const hasAncestorInlineCaret = (elm, schema) => ancestor$2(elm, node => isCaretNode(node.dom), el => schema.isBlock(name(el)));\n const hasAncestorInlineCaretAtStart = editor => hasAncestorInlineCaret(SugarElement.fromDom(editor.selection.getStart()), editor.schema);\n const requiresRefreshCaretOverride = editor => {\n const rng = editor.selection.getRng();\n return rng.collapsed && (rangeStartsAtTextContainer(rng) || editor.dom.isEmpty(rng.startContainer)) && !hasAncestorInlineCaretAtStart(editor);\n };\n const refreshCaret = editor => {\n if (requiresRefreshCaretOverride(editor)) {\n createCaretFormatAtStart(editor, []);\n }\n return true;\n };\n\n const deleteElement = (editor, forward, element) => {\n if (isNonNullable(element)) {\n return Optional.some(() => {\n editor._selectionOverrides.hideFakeCaret();\n deleteElement$2(editor, forward, SugarElement.fromDom(element));\n });\n } else {\n return Optional.none();\n }\n };\n const deleteCaret = (editor, forward) => {\n const isNearMedia = forward ? isBeforeMedia : isAfterMedia;\n const direction = forward ? 1 : -1;\n const fromPos = getNormalizedRangeEndPoint(direction, editor.getBody(), editor.selection.getRng());\n if (isNearMedia(fromPos)) {\n return deleteElement(editor, forward, fromPos.getNode(!forward));\n } else {\n return Optional.from(normalizePosition(forward, fromPos)).filter(pos => isNearMedia(pos) && isMoveInsideSameBlock(fromPos, pos)).bind(pos => deleteElement(editor, forward, pos.getNode(!forward)));\n }\n };\n const deleteRange = (editor, forward) => {\n const selectedNode = editor.selection.getNode();\n return isMedia$2(selectedNode) ? deleteElement(editor, forward, selectedNode) : Optional.none();\n };\n const backspaceDelete$2 = (editor, forward) => editor.selection.isCollapsed() ? deleteCaret(editor, forward) : deleteRange(editor, forward);\n\n const isEditable = target => closest$4(target, elm => isContentEditableTrue$3(elm.dom) || isContentEditableFalse$b(elm.dom)).exists(elm => isContentEditableTrue$3(elm.dom));\n const parseIndentValue = value => toInt(value !== null && value !== void 0 ? value : '').getOr(0);\n const getIndentStyleName = (useMargin, element) => {\n const indentStyleName = useMargin || isTable$1(element) ? 'margin' : 'padding';\n const suffix = get$7(element, 'direction') === 'rtl' ? '-right' : '-left';\n return indentStyleName + suffix;\n };\n const indentElement = (dom, command, useMargin, value, unit, element) => {\n const indentStyleName = getIndentStyleName(useMargin, SugarElement.fromDom(element));\n const parsedValue = parseIndentValue(dom.getStyle(element, indentStyleName));\n if (command === 'outdent') {\n const styleValue = Math.max(0, parsedValue - value);\n dom.setStyle(element, indentStyleName, styleValue ? styleValue + unit : '');\n } else {\n const styleValue = parsedValue + value + unit;\n dom.setStyle(element, indentStyleName, styleValue);\n }\n };\n const validateBlocks = (editor, blocks) => forall(blocks, block => {\n const indentStyleName = getIndentStyleName(shouldIndentUseMargin(editor), block);\n const intentValue = getRaw(block, indentStyleName).map(parseIndentValue).getOr(0);\n const contentEditable = editor.dom.getContentEditable(block.dom);\n return contentEditable !== 'false' && intentValue > 0;\n });\n const canOutdent = editor => {\n const blocks = getBlocksToIndent(editor);\n return !editor.mode.isReadOnly() && (blocks.length > 1 || validateBlocks(editor, blocks));\n };\n const isListComponent = el => isList(el) || isListItem$1(el);\n const parentIsListComponent = el => parent(el).exists(isListComponent);\n const getBlocksToIndent = editor => filter$5(fromDom$1(editor.selection.getSelectedBlocks()), el => !isListComponent(el) && !parentIsListComponent(el) && isEditable(el));\n const handle = (editor, command) => {\n var _a, _b;\n if (editor.mode.isReadOnly()) {\n return;\n }\n const {dom} = editor;\n const indentation = getIndentation(editor);\n const indentUnit = (_b = (_a = /[a-z%]+$/i.exec(indentation)) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : 'px';\n const indentValue = parseIndentValue(indentation);\n const useMargin = shouldIndentUseMargin(editor);\n each$e(getBlocksToIndent(editor), block => {\n indentElement(dom, command, useMargin, indentValue, indentUnit, block.dom);\n });\n };\n const indent = editor => handle(editor, 'indent');\n const outdent = editor => handle(editor, 'outdent');\n\n const backspaceDelete$1 = editor => {\n if (editor.selection.isCollapsed() && canOutdent(editor)) {\n const dom = editor.dom;\n const rng = editor.selection.getRng();\n const pos = CaretPosition.fromRangeStart(rng);\n const block = dom.getParent(rng.startContainer, dom.isBlock);\n if (block !== null && isAtStartOfBlock(SugarElement.fromDom(block), pos, editor.schema)) {\n return Optional.some(() => outdent(editor));\n }\n }\n return Optional.none();\n };\n\n const findAction = (editor, caret, forward) => findMap([\n backspaceDelete$1,\n backspaceDelete$7,\n backspaceDelete$8,\n (editor, forward) => backspaceDelete$4(editor, caret, forward),\n backspaceDelete$a,\n backspaceDelete$b,\n backspaceDelete$5,\n backspaceDelete$2,\n backspaceDelete$9,\n backspaceDelete$3,\n backspaceDelete$6\n ], item => item(editor, forward)).filter(_ => editor.selection.isEditable());\n const deleteCommand = (editor, caret) => {\n const result = findAction(editor, caret, false);\n result.fold(() => {\n if (editor.selection.isEditable()) {\n execNativeDeleteCommand(editor);\n paddEmptyBody(editor);\n }\n }, call);\n };\n const forwardDeleteCommand = (editor, caret) => {\n const result = findAction(editor, caret, true);\n result.fold(() => {\n if (editor.selection.isEditable()) {\n execNativeForwardDeleteCommand(editor);\n }\n }, call);\n };\n const setup$q = (editor, caret) => {\n editor.addCommand('delete', () => {\n deleteCommand(editor, caret);\n });\n editor.addCommand('forwardDelete', () => {\n forwardDeleteCommand(editor, caret);\n });\n };\n\n const SIGNIFICANT_MOVE = 5;\n const LONGPRESS_DELAY = 400;\n const getTouch = event => {\n if (event.touches === undefined || event.touches.length !== 1) {\n return Optional.none();\n }\n return Optional.some(event.touches[0]);\n };\n const isFarEnough = (touch, data) => {\n const distX = Math.abs(touch.clientX - data.x);\n const distY = Math.abs(touch.clientY - data.y);\n return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE;\n };\n const setup$p = editor => {\n const startData = value$2();\n const longpressFired = Cell(false);\n const debounceLongpress = last(e => {\n editor.dispatch('longpress', {\n ...e,\n type: 'longpress'\n });\n longpressFired.set(true);\n }, LONGPRESS_DELAY);\n editor.on('touchstart', e => {\n getTouch(e).each(touch => {\n debounceLongpress.cancel();\n const data = {\n x: touch.clientX,\n y: touch.clientY,\n target: e.target\n };\n debounceLongpress.throttle(e);\n longpressFired.set(false);\n startData.set(data);\n });\n }, true);\n editor.on('touchmove', e => {\n debounceLongpress.cancel();\n getTouch(e).each(touch => {\n startData.on(data => {\n if (isFarEnough(touch, data)) {\n startData.clear();\n longpressFired.set(false);\n editor.dispatch('longpresscancel');\n }\n });\n });\n }, true);\n editor.on('touchend touchcancel', e => {\n debounceLongpress.cancel();\n if (e.type === 'touchcancel') {\n return;\n }\n startData.get().filter(data => data.target.isEqualNode(e.target)).each(() => {\n if (longpressFired.get()) {\n e.preventDefault();\n } else {\n editor.dispatch('tap', {\n ...e,\n type: 'tap'\n });\n }\n });\n }, true);\n };\n\n const isBlockElement = (blockElements, node) => has$2(blockElements, node.nodeName);\n const isValidTarget = (schema, node) => {\n if (isText$b(node)) {\n return true;\n } else if (isElement$6(node)) {\n return !isBlockElement(schema.getBlockElements(), node) && !isBookmarkNode$1(node) && !isTransparentBlock(schema, node) && !isNonHtmlElementRoot(node);\n } else {\n return false;\n }\n };\n const hasBlockParent = (blockElements, root, node) => {\n return exists(parents(SugarElement.fromDom(node), SugarElement.fromDom(root)), elm => {\n return isBlockElement(blockElements, elm.dom);\n });\n };\n const shouldRemoveTextNode = (blockElements, node) => {\n if (isText$b(node)) {\n if (node.data.length === 0) {\n return true;\n } else if (/^\\s+$/.test(node.data)) {\n return !node.nextSibling || isBlockElement(blockElements, node.nextSibling) || isNonHtmlElementRoot(node.nextSibling);\n }\n }\n return false;\n };\n const createRootBlock = editor => editor.dom.create(getForcedRootBlock(editor), getForcedRootBlockAttrs(editor));\n const addRootBlocks = editor => {\n const dom = editor.dom, selection = editor.selection;\n const schema = editor.schema;\n const blockElements = schema.getBlockElements();\n const startNode = selection.getStart();\n const rootNode = editor.getBody();\n let rootBlockNode;\n let tempNode;\n let bm = null;\n const forcedRootBlock = getForcedRootBlock(editor);\n if (!startNode || !isElement$6(startNode)) {\n return;\n }\n const rootNodeName = rootNode.nodeName.toLowerCase();\n if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, startNode)) {\n return;\n }\n if (rootNode.firstChild === rootNode.lastChild && isBr$6(rootNode.firstChild)) {\n rootBlockNode = createRootBlock(editor);\n rootBlockNode.appendChild(createPaddingBr().dom);\n rootNode.replaceChild(rootBlockNode, rootNode.firstChild);\n editor.selection.setCursorLocation(rootBlockNode, 0);\n editor.nodeChanged();\n return;\n }\n let node = rootNode.firstChild;\n while (node) {\n if (isElement$6(node)) {\n updateElement(schema, node);\n }\n if (isValidTarget(schema, node)) {\n if (shouldRemoveTextNode(blockElements, node)) {\n tempNode = node;\n node = node.nextSibling;\n dom.remove(tempNode);\n continue;\n }\n if (!rootBlockNode) {\n if (!bm && editor.hasFocus()) {\n bm = getBookmark(editor.selection.getRng(), () => document.createElement('span'));\n }\n if (!node.parentNode) {\n node = null;\n break;\n }\n rootBlockNode = createRootBlock(editor);\n rootNode.insertBefore(rootBlockNode, node);\n }\n tempNode = node;\n node = node.nextSibling;\n rootBlockNode.appendChild(tempNode);\n } else {\n rootBlockNode = null;\n node = node.nextSibling;\n }\n }\n if (bm) {\n editor.selection.setRng(resolveBookmark(bm));\n editor.nodeChanged();\n }\n };\n const insertEmptyLine = (editor, root, insertBlock) => {\n const block = SugarElement.fromDom(createRootBlock(editor));\n const br = createPaddingBr();\n append$1(block, br);\n insertBlock(root, block);\n const rng = document.createRange();\n rng.setStartBefore(br.dom);\n rng.setEndBefore(br.dom);\n return rng;\n };\n const setup$o = editor => {\n editor.on('NodeChange', () => addRootBlocks(editor));\n };\n\n const hasClass = checkClassName => node => (' ' + node.attr('class') + ' ').indexOf(checkClassName) !== -1;\n const replaceMatchWithSpan = (editor, content, cls) => {\n return function (match) {\n const args = arguments, index = args[args.length - 2];\n const prevChar = index > 0 ? content.charAt(index - 1) : '';\n if (prevChar === '\"') {\n return match;\n }\n if (prevChar === '>') {\n const findStartTagIndex = content.lastIndexOf('<', index);\n if (findStartTagIndex !== -1) {\n const tagHtml = content.substring(findStartTagIndex, index);\n if (tagHtml.indexOf('contenteditable=\"false\"') !== -1) {\n return match;\n }\n }\n }\n return '' + editor.dom.encode(typeof args[1] === 'string' ? args[1] : args[0]) + '';\n };\n };\n const convertRegExpsToNonEditable = (editor, nonEditableRegExps, e) => {\n let i = nonEditableRegExps.length, content = e.content;\n if (e.format === 'raw') {\n return;\n }\n while (i--) {\n content = content.replace(nonEditableRegExps[i], replaceMatchWithSpan(editor, content, getNonEditableClass(editor)));\n }\n e.content = content;\n };\n const isValidContent = (nonEditableRegExps, content) => {\n return forall(nonEditableRegExps, re => {\n const matches = content.match(re);\n return matches !== null && matches[0].length === content.length;\n });\n };\n const setup$n = editor => {\n const contentEditableAttrName = 'contenteditable';\n const editClass = ' ' + Tools.trim(getEditableClass(editor)) + ' ';\n const nonEditClass = ' ' + Tools.trim(getNonEditableClass(editor)) + ' ';\n const hasEditClass = hasClass(editClass);\n const hasNonEditClass = hasClass(nonEditClass);\n const nonEditableRegExps = getNonEditableRegExps(editor);\n if (nonEditableRegExps.length > 0) {\n editor.on('BeforeSetContent', e => {\n convertRegExpsToNonEditable(editor, nonEditableRegExps, e);\n });\n }\n editor.parser.addAttributeFilter('class', nodes => {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n if (hasEditClass(node)) {\n node.attr(contentEditableAttrName, 'true');\n } else if (hasNonEditClass(node)) {\n node.attr(contentEditableAttrName, 'false');\n }\n }\n });\n editor.serializer.addAttributeFilter(contentEditableAttrName, nodes => {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n if (!hasEditClass(node) && !hasNonEditClass(node)) {\n continue;\n }\n const content = node.attr('data-mce-content');\n if (nonEditableRegExps.length > 0 && content) {\n if (isValidContent(nonEditableRegExps, content)) {\n node.name = '#text';\n node.type = 3;\n node.raw = true;\n node.value = content;\n } else {\n node.remove();\n }\n } else {\n node.attr(contentEditableAttrName, null);\n }\n }\n });\n };\n\n const findBlockCaretContainer = editor => descendant$1(SugarElement.fromDom(editor.getBody()), '*[data-mce-caret]').map(elm => elm.dom).getOrNull();\n const showBlockCaretContainer = (editor, blockCaretContainer) => {\n if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n showCaretContainerBlock(blockCaretContainer);\n editor.selection.setRng(editor.selection.getRng());\n editor.selection.scrollIntoView(blockCaretContainer);\n }\n };\n const handleBlockContainer = (editor, e) => {\n const blockCaretContainer = findBlockCaretContainer(editor);\n if (!blockCaretContainer) {\n return;\n }\n if (e.type === 'compositionstart') {\n e.preventDefault();\n e.stopPropagation();\n showBlockCaretContainer(editor, blockCaretContainer);\n return;\n }\n if (hasContent(blockCaretContainer)) {\n showBlockCaretContainer(editor, blockCaretContainer);\n editor.undoManager.add();\n }\n };\n const setup$m = editor => {\n editor.on('keyup compositionstart', curry(handleBlockContainer, editor));\n };\n\n const isContentEditableFalse$4 = isContentEditableFalse$b;\n const moveToCeFalseHorizontally = (direction, editor, range) => moveHorizontally(editor, direction, range, isBeforeContentEditableFalse, isAfterContentEditableFalse, isContentEditableFalse$4);\n const moveToCeFalseVertically = (direction, editor, range) => {\n const isBefore = caretPosition => isBeforeContentEditableFalse(caretPosition) || isBeforeTable(caretPosition);\n const isAfter = caretPosition => isAfterContentEditableFalse(caretPosition) || isAfterTable(caretPosition);\n return moveVertically(editor, direction, range, isBefore, isAfter, isContentEditableFalse$4);\n };\n const createTextBlock = editor => {\n const textBlock = editor.dom.create(getForcedRootBlock(editor));\n textBlock.innerHTML = '
    ';\n return textBlock;\n };\n const exitPreBlock = (editor, direction, range) => {\n const caretWalker = CaretWalker(editor.getBody());\n const getVisualCaretPosition$1 = curry(getVisualCaretPosition, direction === 1 ? caretWalker.next : caretWalker.prev);\n if (range.collapsed) {\n const pre = editor.dom.getParent(range.startContainer, 'PRE');\n if (!pre) {\n return;\n }\n const caretPos = getVisualCaretPosition$1(CaretPosition.fromRangeStart(range));\n if (!caretPos) {\n const newBlock = SugarElement.fromDom(createTextBlock(editor));\n if (direction === 1) {\n after$4(SugarElement.fromDom(pre), newBlock);\n } else {\n before$3(SugarElement.fromDom(pre), newBlock);\n }\n editor.selection.select(newBlock.dom, true);\n editor.selection.collapse();\n }\n }\n };\n const getHorizontalRange = (editor, forward) => {\n const direction = forward ? 1 : -1;\n const range = editor.selection.getRng();\n return moveToCeFalseHorizontally(direction, editor, range).orThunk(() => {\n exitPreBlock(editor, direction, range);\n return Optional.none();\n });\n };\n const getVerticalRange = (editor, down) => {\n const direction = down ? 1 : -1;\n const range = editor.selection.getRng();\n return moveToCeFalseVertically(direction, editor, range).orThunk(() => {\n exitPreBlock(editor, direction, range);\n return Optional.none();\n });\n };\n const flipDirection = (selection, forward) => {\n const elm = forward ? selection.getEnd(true) : selection.getStart(true);\n return isRtl(elm) ? !forward : forward;\n };\n const moveH$2 = (editor, forward) => getHorizontalRange(editor, flipDirection(editor.selection, forward)).exists(newRange => {\n moveToRange(editor, newRange);\n return true;\n });\n const moveV$4 = (editor, down) => getVerticalRange(editor, down).exists(newRange => {\n moveToRange(editor, newRange);\n return true;\n });\n const moveToLineEndPoint$1 = (editor, forward) => {\n const isCefPosition = forward ? isAfterContentEditableFalse : isBeforeContentEditableFalse;\n return moveToLineEndPoint$3(editor, forward, isCefPosition);\n };\n const selectToEndPoint = (editor, forward) => getEdgeCefPosition(editor, !forward).map(pos => {\n const rng = pos.toRange();\n const curRng = editor.selection.getRng();\n if (forward) {\n rng.setStart(curRng.startContainer, curRng.startOffset);\n } else {\n rng.setEnd(curRng.endContainer, curRng.endOffset);\n }\n return rng;\n }).exists(rng => {\n moveToRange(editor, rng);\n return true;\n });\n\n const isTarget = node => contains$2(['figcaption'], name(node));\n const getClosestTargetBlock = (pos, root, schema) => {\n const isRoot = curry(eq, root);\n return closest$4(SugarElement.fromDom(pos.container()), el => schema.isBlock(name(el)), isRoot).filter(isTarget);\n };\n const isAtFirstOrLastLine = (root, forward, pos) => forward ? isAtLastLine(root.dom, pos) : isAtFirstLine(root.dom, pos);\n const moveCaretToNewEmptyLine = (editor, forward) => {\n const root = SugarElement.fromDom(editor.getBody());\n const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n return getClosestTargetBlock(pos, root, editor.schema).exists(() => {\n if (isAtFirstOrLastLine(root, forward, pos)) {\n const insertFn = forward ? append$1 : prepend;\n const rng = insertEmptyLine(editor, root, insertFn);\n editor.selection.setRng(rng);\n return true;\n } else {\n return false;\n }\n });\n };\n const moveV$3 = (editor, forward) => {\n if (editor.selection.isCollapsed()) {\n return moveCaretToNewEmptyLine(editor, forward);\n } else {\n return false;\n }\n };\n\n const moveUp = (editor, details, summary) => {\n const rng = editor.selection.getRng();\n const pos = CaretPosition.fromRangeStart(rng);\n const root = editor.getBody();\n if (root.firstChild === details && isAtFirstLine(summary, pos)) {\n editor.execCommand('InsertNewBlockBefore');\n return true;\n } else {\n return false;\n }\n };\n const moveDown = (editor, details) => {\n const rng = editor.selection.getRng();\n const pos = CaretPosition.fromRangeStart(rng);\n const root = editor.getBody();\n if (root.lastChild === details && isAtLastLine(details, pos)) {\n editor.execCommand('InsertNewBlockAfter');\n return true;\n } else {\n return false;\n }\n };\n const move$2 = (editor, forward) => {\n if (forward) {\n return Optional.from(editor.dom.getParent(editor.selection.getNode(), 'details')).map(details => moveDown(editor, details)).getOr(false);\n } else {\n return Optional.from(editor.dom.getParent(editor.selection.getNode(), 'summary')).bind(summary => Optional.from(editor.dom.getParent(summary, 'details')).map(details => moveUp(editor, details, summary))).getOr(false);\n }\n };\n const moveV$2 = (editor, forward) => move$2(editor, forward);\n\n const baseKeyPattern = {\n shiftKey: false,\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n keyCode: 0\n };\n const defaultPatterns = patterns => map$3(patterns, pattern => ({\n ...baseKeyPattern,\n ...pattern\n }));\n const defaultDelayedPatterns = patterns => map$3(patterns, pattern => ({\n ...baseKeyPattern,\n ...pattern\n }));\n const matchesEvent = (pattern, evt) => evt.keyCode === pattern.keyCode && evt.shiftKey === pattern.shiftKey && evt.altKey === pattern.altKey && evt.ctrlKey === pattern.ctrlKey && evt.metaKey === pattern.metaKey;\n const match$1 = (patterns, evt) => bind$3(defaultPatterns(patterns), pattern => matchesEvent(pattern, evt) ? [pattern] : []);\n const matchDelayed = (patterns, evt) => bind$3(defaultDelayedPatterns(patterns), pattern => matchesEvent(pattern, evt) ? [pattern] : []);\n const action = (f, ...x) => () => f.apply(null, x);\n const execute = (patterns, evt) => find$2(match$1(patterns, evt), pattern => pattern.action());\n const executeWithDelayedAction = (patterns, evt) => findMap(matchDelayed(patterns, evt), pattern => pattern.action());\n\n const moveH$1 = (editor, forward) => {\n const direction = forward ? 1 : -1;\n const range = editor.selection.getRng();\n return moveHorizontally(editor, direction, range, isBeforeMedia, isAfterMedia, isMedia$2).exists(newRange => {\n moveToRange(editor, newRange);\n return true;\n });\n };\n const moveV$1 = (editor, down) => {\n const direction = down ? 1 : -1;\n const range = editor.selection.getRng();\n return moveVertically(editor, direction, range, isBeforeMedia, isAfterMedia, isMedia$2).exists(newRange => {\n moveToRange(editor, newRange);\n return true;\n });\n };\n const moveToLineEndPoint = (editor, forward) => {\n const isNearMedia = forward ? isAfterMedia : isBeforeMedia;\n return moveToLineEndPoint$3(editor, forward, isNearMedia);\n };\n\n const adt = Adt.generate([\n { none: ['current'] },\n { first: ['current'] },\n {\n middle: [\n 'current',\n 'target'\n ]\n },\n { last: ['current'] }\n ]);\n const none = current => adt.none(current);\n const CellLocation = {\n ...adt,\n none\n };\n\n const firstLayer = (scope, selector) => {\n return filterFirstLayer(scope, selector, always);\n };\n const filterFirstLayer = (scope, selector, predicate) => {\n return bind$3(children$1(scope), x => {\n if (is$1(x, selector)) {\n return predicate(x) ? [x] : [];\n } else {\n return filterFirstLayer(x, selector, predicate);\n }\n });\n };\n\n const lookup$1 = (tags, element, isRoot = never) => {\n if (isRoot(element)) {\n return Optional.none();\n }\n if (contains$2(tags, name(element))) {\n return Optional.some(element);\n }\n const isRootOrUpperTable = elm => is$1(elm, 'table') || isRoot(elm);\n return ancestor$3(element, tags.join(','), isRootOrUpperTable);\n };\n const cell = (element, isRoot) => lookup$1([\n 'td',\n 'th'\n ], element, isRoot);\n const cells = ancestor => firstLayer(ancestor, 'th,td');\n const table = (element, isRoot) => closest$3(element, 'table', isRoot);\n\n const walk = (all, current, index, direction, isEligible = always) => {\n const forwards = direction === 1;\n if (!forwards && index <= 0) {\n return CellLocation.first(all[0]);\n } else if (forwards && index >= all.length - 1) {\n return CellLocation.last(all[all.length - 1]);\n } else {\n const newIndex = index + direction;\n const elem = all[newIndex];\n return isEligible(elem) ? CellLocation.middle(current, elem) : walk(all, current, newIndex, direction, isEligible);\n }\n };\n const detect = (current, isRoot) => {\n return table(current, isRoot).bind(table => {\n const all = cells(table);\n const index = findIndex$2(all, x => eq(current, x));\n return index.map(index => ({\n index,\n all\n }));\n });\n };\n const next = (current, isEligible, isRoot) => {\n const detection = detect(current, isRoot);\n return detection.fold(() => {\n return CellLocation.none(current);\n }, info => {\n return walk(info.all, current, info.index, 1, isEligible);\n });\n };\n const prev = (current, isEligible, isRoot) => {\n const detection = detect(current, isRoot);\n return detection.fold(() => {\n return CellLocation.none();\n }, info => {\n return walk(info.all, current, info.index, -1, isEligible);\n });\n };\n\n const isTextNodeWithCursorPosition = el => getOption(el).filter(text => text.trim().length !== 0 || text.indexOf(nbsp) > -1).isSome();\n const isContentEditableFalse$3 = elem => isHTMLElement$1(elem) && get$9(elem, 'contenteditable') === 'false';\n const elementsWithCursorPosition = [\n 'img',\n 'br'\n ];\n const isCursorPosition = elem => {\n const hasCursorPosition = isTextNodeWithCursorPosition(elem);\n return hasCursorPosition || contains$2(elementsWithCursorPosition, name(elem)) || isContentEditableFalse$3(elem);\n };\n\n const first = element => descendant$2(element, isCursorPosition);\n\n const deflate = (rect, delta) => ({\n left: rect.left - delta,\n top: rect.top - delta,\n right: rect.right + delta * 2,\n bottom: rect.bottom + delta * 2,\n width: rect.width + delta,\n height: rect.height + delta\n });\n const getCorners = (getYAxisValue, tds) => bind$3(tds, td => {\n const rect = deflate(clone$1(td.getBoundingClientRect()), -1);\n return [\n {\n x: rect.left,\n y: getYAxisValue(rect),\n cell: td\n },\n {\n x: rect.right,\n y: getYAxisValue(rect),\n cell: td\n }\n ];\n });\n const findClosestCorner = (corners, x, y) => foldl(corners, (acc, newCorner) => acc.fold(() => Optional.some(newCorner), oldCorner => {\n const oldDist = Math.sqrt(Math.abs(oldCorner.x - x) + Math.abs(oldCorner.y - y));\n const newDist = Math.sqrt(Math.abs(newCorner.x - x) + Math.abs(newCorner.y - y));\n return Optional.some(newDist < oldDist ? newCorner : oldCorner);\n }), Optional.none());\n const getClosestCell = (getYAxisValue, isTargetCorner, table, x, y) => {\n const cells = descendants(SugarElement.fromDom(table), 'td,th,caption').map(e => e.dom);\n const corners = filter$5(getCorners(getYAxisValue, cells), corner => isTargetCorner(corner, y));\n return findClosestCorner(corners, x, y).map(corner => corner.cell);\n };\n const getBottomValue = rect => rect.bottom;\n const getTopValue = rect => rect.top;\n const isAbove = (corner, y) => corner.y < y;\n const isBelow = (corner, y) => corner.y > y;\n const getClosestCellAbove = curry(getClosestCell, getBottomValue, isAbove);\n const getClosestCellBelow = curry(getClosestCell, getTopValue, isBelow);\n const findClosestPositionInAboveCell = (table, pos) => head(pos.getClientRects()).bind(rect => getClosestCellAbove(table, rect.left, rect.top)).bind(cell => findClosestHorizontalPosition(getLastLinePositions(cell), pos));\n const findClosestPositionInBelowCell = (table, pos) => last$2(pos.getClientRects()).bind(rect => getClosestCellBelow(table, rect.left, rect.top)).bind(cell => findClosestHorizontalPosition(getFirstLinePositions(cell), pos));\n\n const hasNextBreak = (getPositionsUntil, scope, lineInfo) => lineInfo.breakAt.exists(breakPos => getPositionsUntil(scope, breakPos).breakAt.isSome());\n const startsWithWrapBreak = lineInfo => lineInfo.breakType === BreakType.Wrap && lineInfo.positions.length === 0;\n const startsWithBrBreak = lineInfo => lineInfo.breakType === BreakType.Br && lineInfo.positions.length === 1;\n const isAtTableCellLine = (getPositionsUntil, scope, pos) => {\n const lineInfo = getPositionsUntil(scope, pos);\n if (startsWithWrapBreak(lineInfo) || !isBr$6(pos.getNode()) && startsWithBrBreak(lineInfo)) {\n return !hasNextBreak(getPositionsUntil, scope, lineInfo);\n } else {\n return lineInfo.breakAt.isNone();\n }\n };\n const isAtFirstTableCellLine = curry(isAtTableCellLine, getPositionsUntilPreviousLine);\n const isAtLastTableCellLine = curry(isAtTableCellLine, getPositionsUntilNextLine);\n const isCaretAtStartOrEndOfTable = (forward, rng, table) => {\n const caretPos = CaretPosition.fromRangeStart(rng);\n return positionIn(!forward, table).exists(pos => pos.isEqual(caretPos));\n };\n const navigateHorizontally = (editor, forward, table, _td) => {\n const rng = editor.selection.getRng();\n const direction = forward ? 1 : -1;\n if (isFakeCaretTableBrowser() && isCaretAtStartOrEndOfTable(forward, rng, table)) {\n showCaret(direction, editor, table, !forward, false).each(newRng => {\n moveToRange(editor, newRng);\n });\n return true;\n }\n return false;\n };\n const getClosestAbovePosition = (root, table, start) => findClosestPositionInAboveCell(table, start).orThunk(() => head(start.getClientRects()).bind(rect => findClosestHorizontalPositionFromPoint(getPositionsAbove(root, CaretPosition.before(table)), rect.left))).getOr(CaretPosition.before(table));\n const getClosestBelowPosition = (root, table, start) => findClosestPositionInBelowCell(table, start).orThunk(() => head(start.getClientRects()).bind(rect => findClosestHorizontalPositionFromPoint(getPositionsBelow(root, CaretPosition.after(table)), rect.left))).getOr(CaretPosition.after(table));\n const getTable = (previous, pos) => {\n const node = pos.getNode(previous);\n return isTable$2(node) ? Optional.some(node) : Optional.none();\n };\n const renderBlock = (down, editor, table) => {\n editor.undoManager.transact(() => {\n const insertFn = down ? after$4 : before$3;\n const rng = insertEmptyLine(editor, SugarElement.fromDom(table), insertFn);\n moveToRange(editor, rng);\n });\n };\n const moveCaret = (editor, down, pos) => {\n const table = down ? getTable(true, pos) : getTable(false, pos);\n const last = down === false;\n table.fold(() => moveToRange(editor, pos.toRange()), table => positionIn(last, editor.getBody()).filter(lastPos => lastPos.isEqual(pos)).fold(() => moveToRange(editor, pos.toRange()), _ => renderBlock(down, editor, table)));\n };\n const navigateVertically = (editor, down, table, td) => {\n const rng = editor.selection.getRng();\n const pos = CaretPosition.fromRangeStart(rng);\n const root = editor.getBody();\n if (!down && isAtFirstTableCellLine(td, pos)) {\n const newPos = getClosestAbovePosition(root, table, pos);\n moveCaret(editor, down, newPos);\n return true;\n } else if (down && isAtLastTableCellLine(td, pos)) {\n const newPos = getClosestBelowPosition(root, table, pos);\n moveCaret(editor, down, newPos);\n return true;\n } else {\n return false;\n }\n };\n const move$1 = (editor, forward, mover) => Optional.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(td => Optional.from(editor.dom.getParent(td, 'table')).map(table => mover(editor, forward, table, td))).getOr(false);\n const moveH = (editor, forward) => move$1(editor, forward, navigateHorizontally);\n const moveV = (editor, forward) => move$1(editor, forward, navigateVertically);\n const getCellFirstCursorPosition = cell => {\n const selection = SimSelection.exact(cell, 0, cell, 0);\n return toNative(selection);\n };\n const tabGo = (editor, isRoot, cell) => {\n return cell.fold(Optional.none, Optional.none, (_current, next) => {\n return first(next).map(cell => {\n return getCellFirstCursorPosition(cell);\n });\n }, current => {\n if (editor.mode.isReadOnly()) {\n return Optional.none();\n }\n editor.execCommand('mceTableInsertRowAfter');\n return tabForward(editor, isRoot, current);\n });\n };\n const tabForward = (editor, isRoot, cell) => tabGo(editor, isRoot, next(cell, isEditable$2));\n const tabBackward = (editor, isRoot, cell) => tabGo(editor, isRoot, prev(cell, isEditable$2));\n const handleTab = (editor, forward) => {\n const rootElements = [\n 'table',\n 'li',\n 'dl'\n ];\n const body = SugarElement.fromDom(editor.getBody());\n const isRoot = element => {\n const name$1 = name(element);\n return eq(element, body) || contains$2(rootElements, name$1);\n };\n const rng = editor.selection.getRng();\n const container = SugarElement.fromDom(!forward ? rng.startContainer : rng.endContainer);\n return cell(container, isRoot).map(cell => {\n table(cell, isRoot).each(table => {\n editor.model.table.clearSelectedCells(table.dom);\n });\n editor.selection.collapse(!forward);\n const navigation = !forward ? tabBackward : tabForward;\n const rng = navigation(editor, isRoot, cell);\n rng.each(range => {\n editor.selection.setRng(range);\n });\n return true;\n }).getOr(false);\n };\n\n const executeKeydownOverride$4 = (editor, caret, evt) => {\n const isMac = Env.os.isMacOS() || Env.os.isiOS();\n execute([\n {\n keyCode: VK.RIGHT,\n action: action(moveH$2, editor, true)\n },\n {\n keyCode: VK.LEFT,\n action: action(moveH$2, editor, false)\n },\n {\n keyCode: VK.UP,\n action: action(moveV$4, editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: action(moveV$4, editor, true)\n },\n ...isMac ? [\n {\n keyCode: VK.UP,\n action: action(selectToEndPoint, editor, false),\n metaKey: true,\n shiftKey: true\n },\n {\n keyCode: VK.DOWN,\n action: action(selectToEndPoint, editor, true),\n metaKey: true,\n shiftKey: true\n }\n ] : [],\n {\n keyCode: VK.RIGHT,\n action: action(moveH, editor, true)\n },\n {\n keyCode: VK.LEFT,\n action: action(moveH, editor, false)\n },\n {\n keyCode: VK.UP,\n action: action(moveV, editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: action(moveV, editor, true)\n },\n {\n keyCode: VK.UP,\n action: action(moveV, editor, false)\n },\n {\n keyCode: VK.UP,\n action: action(moveV$2, editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: action(moveV$2, editor, true)\n },\n {\n keyCode: VK.RIGHT,\n action: action(moveH$1, editor, true)\n },\n {\n keyCode: VK.LEFT,\n action: action(moveH$1, editor, false)\n },\n {\n keyCode: VK.UP,\n action: action(moveV$1, editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: action(moveV$1, editor, true)\n },\n {\n keyCode: VK.RIGHT,\n action: action(move$3, editor, caret, true)\n },\n {\n keyCode: VK.LEFT,\n action: action(move$3, editor, caret, false)\n },\n {\n keyCode: VK.RIGHT,\n ctrlKey: !isMac,\n altKey: isMac,\n action: action(moveNextWord, editor, caret)\n },\n {\n keyCode: VK.LEFT,\n ctrlKey: !isMac,\n altKey: isMac,\n action: action(movePrevWord, editor, caret)\n },\n {\n keyCode: VK.UP,\n action: action(moveV$3, editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: action(moveV$3, editor, true)\n }\n ], evt).each(_ => {\n evt.preventDefault();\n });\n };\n const setup$l = (editor, caret) => {\n editor.on('keydown', evt => {\n if (!evt.isDefaultPrevented()) {\n executeKeydownOverride$4(editor, caret, evt);\n }\n });\n };\n\n const point = (container, offset) => ({\n container,\n offset\n });\n\n const DOM$7 = DOMUtils.DOM;\n const alwaysNext = startNode => node => startNode === node ? -1 : 0;\n const isBoundary = dom => node => dom.isBlock(node) || contains$2([\n 'BR',\n 'IMG',\n 'HR',\n 'INPUT'\n ], node.nodeName) || dom.getContentEditable(node) === 'false';\n const textBefore = (node, offset, rootNode) => {\n if (isText$b(node) && offset >= 0) {\n return Optional.some(point(node, offset));\n } else {\n const textSeeker = TextSeeker(DOM$7);\n return Optional.from(textSeeker.backwards(node, offset, alwaysNext(node), rootNode)).map(prev => point(prev.container, prev.container.data.length));\n }\n };\n const textAfter = (node, offset, rootNode) => {\n if (isText$b(node) && offset >= node.length) {\n return Optional.some(point(node, offset));\n } else {\n const textSeeker = TextSeeker(DOM$7);\n return Optional.from(textSeeker.forwards(node, offset, alwaysNext(node), rootNode)).map(prev => point(prev.container, 0));\n }\n };\n const scanLeft = (node, offset, rootNode) => {\n if (!isText$b(node)) {\n return Optional.none();\n }\n const text = node.data;\n if (offset >= 0 && offset <= text.length) {\n return Optional.some(point(node, offset));\n } else {\n const textSeeker = TextSeeker(DOM$7);\n return Optional.from(textSeeker.backwards(node, offset, alwaysNext(node), rootNode)).bind(prev => {\n const prevText = prev.container.data;\n return scanLeft(prev.container, offset + prevText.length, rootNode);\n });\n }\n };\n const scanRight = (node, offset, rootNode) => {\n if (!isText$b(node)) {\n return Optional.none();\n }\n const text = node.data;\n if (offset <= text.length) {\n return Optional.some(point(node, offset));\n } else {\n const textSeeker = TextSeeker(DOM$7);\n return Optional.from(textSeeker.forwards(node, offset, alwaysNext(node), rootNode)).bind(next => scanRight(next.container, offset - text.length, rootNode));\n }\n };\n const repeatLeft = (dom, node, offset, process, rootNode) => {\n const search = TextSeeker(dom, isBoundary(dom));\n return Optional.from(search.backwards(node, offset, process, rootNode));\n };\n\n const isValidTextRange = rng => rng.collapsed && isText$b(rng.startContainer);\n const getText = rng => trim$2(rng.toString().replace(/\\u00A0/g, ' '));\n const isWhitespace = chr => chr !== '' && ' \\xA0\\uFEFF\\f\\n\\r\\t\\x0B'.indexOf(chr) !== -1;\n\n const stripTrigger = (text, trigger) => text.substring(trigger.length);\n const findTrigger = (text, index, trigger, includeWhitespace = false) => {\n let i;\n const firstChar = trigger.charAt(0);\n for (i = index - 1; i >= 0; i--) {\n const char = text.charAt(i);\n if (!includeWhitespace && isWhitespace(char)) {\n return Optional.none();\n }\n if (firstChar === char && contains$1(text, trigger, i, index)) {\n break;\n }\n }\n return Optional.some(i);\n };\n const getContext = (dom, initRange, trigger, includeWhitespace = false) => {\n if (!isValidTextRange(initRange)) {\n return Optional.none();\n }\n const buffer = {\n text: '',\n offset: 0\n };\n const findTriggerIndex = (element, offset, text) => {\n buffer.text = text + buffer.text;\n buffer.offset += offset;\n return findTrigger(buffer.text, buffer.offset, trigger, includeWhitespace).getOr(offset);\n };\n const root = dom.getParent(initRange.startContainer, dom.isBlock) || dom.getRoot();\n return repeatLeft(dom, initRange.startContainer, initRange.startOffset, findTriggerIndex, root).bind(spot => {\n const range = initRange.cloneRange();\n range.setStart(spot.container, spot.offset);\n range.setEnd(initRange.endContainer, initRange.endOffset);\n if (range.collapsed) {\n return Optional.none();\n }\n const text = getText(range);\n const triggerIndex = text.lastIndexOf(trigger);\n if (triggerIndex !== 0) {\n return Optional.none();\n } else {\n return Optional.some({\n text: stripTrigger(text, trigger),\n range,\n trigger\n });\n }\n });\n };\n\n const isText$1 = node => node.nodeType === TEXT;\n const isElement = node => node.nodeType === ELEMENT;\n const toLast = node => {\n if (isText$1(node)) {\n return point(node, node.data.length);\n } else {\n const children = node.childNodes;\n return children.length > 0 ? toLast(children[children.length - 1]) : point(node, children.length);\n }\n };\n const toLeaf = (node, offset) => {\n const children = node.childNodes;\n if (children.length > 0 && offset < children.length) {\n return toLeaf(children[offset], 0);\n } else if (children.length > 0 && isElement(node) && children.length === offset) {\n return toLast(children[children.length - 1]);\n } else {\n return point(node, offset);\n }\n };\n\n const isPreviousCharContent = (dom, leaf) => {\n var _a;\n const root = (_a = dom.getParent(leaf.container, dom.isBlock)) !== null && _a !== void 0 ? _a : dom.getRoot();\n return repeatLeft(dom, leaf.container, leaf.offset, (_element, offset) => offset === 0 ? -1 : offset, root).filter(spot => {\n const char = spot.container.data.charAt(spot.offset - 1);\n return !isWhitespace(char);\n }).isSome();\n };\n const isStartOfWord = dom => rng => {\n const leaf = toLeaf(rng.startContainer, rng.startOffset);\n return !isPreviousCharContent(dom, leaf);\n };\n const getTriggerContext = (dom, initRange, database) => findMap(database.triggers, trigger => getContext(dom, initRange, trigger));\n const lookup = (editor, getDatabase) => {\n const database = getDatabase();\n const rng = editor.selection.getRng();\n return getTriggerContext(editor.dom, rng, database).bind(context => lookupWithContext(editor, getDatabase, context));\n };\n const lookupWithContext = (editor, getDatabase, context, fetchOptions = {}) => {\n var _a;\n const database = getDatabase();\n const rng = editor.selection.getRng();\n const startText = (_a = rng.startContainer.nodeValue) !== null && _a !== void 0 ? _a : '';\n const autocompleters = filter$5(database.lookupByTrigger(context.trigger), autocompleter => context.text.length >= autocompleter.minChars && autocompleter.matches.getOrThunk(() => isStartOfWord(editor.dom))(context.range, startText, context.text));\n if (autocompleters.length === 0) {\n return Optional.none();\n }\n const lookupData = Promise.all(map$3(autocompleters, ac => {\n const fetchResult = ac.fetch(context.text, ac.maxResults, fetchOptions);\n return fetchResult.then(results => ({\n matchText: context.text,\n items: results,\n columns: ac.columns,\n onAction: ac.onAction,\n highlightOn: ac.highlightOn\n }));\n }));\n return Optional.some({\n lookupData,\n context\n });\n };\n\n var SimpleResultType;\n (function (SimpleResultType) {\n SimpleResultType[SimpleResultType['Error'] = 0] = 'Error';\n SimpleResultType[SimpleResultType['Value'] = 1] = 'Value';\n }(SimpleResultType || (SimpleResultType = {})));\n const fold$1 = (res, onError, onValue) => res.stype === SimpleResultType.Error ? onError(res.serror) : onValue(res.svalue);\n const partition = results => {\n const values = [];\n const errors = [];\n each$e(results, obj => {\n fold$1(obj, err => errors.push(err), val => values.push(val));\n });\n return {\n values,\n errors\n };\n };\n const mapError = (res, f) => {\n if (res.stype === SimpleResultType.Error) {\n return {\n stype: SimpleResultType.Error,\n serror: f(res.serror)\n };\n } else {\n return res;\n }\n };\n const map = (res, f) => {\n if (res.stype === SimpleResultType.Value) {\n return {\n stype: SimpleResultType.Value,\n svalue: f(res.svalue)\n };\n } else {\n return res;\n }\n };\n const bind$1 = (res, f) => {\n if (res.stype === SimpleResultType.Value) {\n return f(res.svalue);\n } else {\n return res;\n }\n };\n const bindError = (res, f) => {\n if (res.stype === SimpleResultType.Error) {\n return f(res.serror);\n } else {\n return res;\n }\n };\n const svalue = v => ({\n stype: SimpleResultType.Value,\n svalue: v\n });\n const serror = e => ({\n stype: SimpleResultType.Error,\n serror: e\n });\n const toResult = res => fold$1(res, Result.error, Result.value);\n const fromResult = res => res.fold(serror, svalue);\n const SimpleResult = {\n fromResult,\n toResult,\n svalue,\n partition,\n serror,\n bind: bind$1,\n bindError,\n map,\n mapError,\n fold: fold$1\n };\n\n const formatObj = input => {\n return isObject(input) && keys(input).length > 100 ? ' removed due to size' : JSON.stringify(input, null, 2);\n };\n const formatErrors = errors => {\n const es = errors.length > 10 ? errors.slice(0, 10).concat([{\n path: [],\n getErrorInfo: constant('... (only showing first ten failures)')\n }]) : errors;\n return map$3(es, e => {\n return 'Failed path: (' + e.path.join(' > ') + ')\\n' + e.getErrorInfo();\n });\n };\n\n const nu = (path, getErrorInfo) => {\n return SimpleResult.serror([{\n path,\n getErrorInfo\n }]);\n };\n const missingRequired = (path, key, obj) => nu(path, () => 'Could not find valid *required* value for \"' + key + '\" in ' + formatObj(obj));\n const missingKey = (path, key) => nu(path, () => 'Choice schema did not contain choice key: \"' + key + '\"');\n const missingBranch = (path, branches, branch) => nu(path, () => 'The chosen schema: \"' + branch + '\" did not exist in branches: ' + formatObj(branches));\n const custom = (path, err) => nu(path, constant(err));\n\n const chooseFrom = (path, input, branches, ch) => {\n const fields = get$a(branches, ch);\n return fields.fold(() => missingBranch(path, branches, ch), vp => vp.extract(path.concat(['branch: ' + ch]), input));\n };\n const choose$1 = (key, branches) => {\n const extract = (path, input) => {\n const choice = get$a(input, key);\n return choice.fold(() => missingKey(path, key), chosen => chooseFrom(path, input, branches, chosen));\n };\n const toString = () => 'chooseOn(' + key + '). Possible values: ' + keys(branches);\n return {\n extract,\n toString\n };\n };\n\n const shallow = (old, nu) => {\n return nu;\n };\n const deep = (old, nu) => {\n const bothObjects = isPlainObject(old) && isPlainObject(nu);\n return bothObjects ? deepMerge(old, nu) : nu;\n };\n const baseMerge = merger => {\n return (...objects) => {\n if (objects.length === 0) {\n throw new Error(`Can't merge zero objects`);\n }\n const ret = {};\n for (let j = 0; j < objects.length; j++) {\n const curObject = objects[j];\n for (const key in curObject) {\n if (has$2(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n const deepMerge = baseMerge(deep);\n const merge = baseMerge(shallow);\n\n const required = () => ({\n tag: 'required',\n process: {}\n });\n const defaultedThunk = fallbackThunk => ({\n tag: 'defaultedThunk',\n process: fallbackThunk\n });\n const defaulted$1 = fallback => defaultedThunk(constant(fallback));\n const asOption = () => ({\n tag: 'option',\n process: {}\n });\n\n const mergeValues = (values, base) => values.length > 0 ? SimpleResult.svalue(deepMerge(base, merge.apply(undefined, values))) : SimpleResult.svalue(base);\n const mergeErrors = errors => compose(SimpleResult.serror, flatten)(errors);\n const consolidateObj = (objects, base) => {\n const partition = SimpleResult.partition(objects);\n return partition.errors.length > 0 ? mergeErrors(partition.errors) : mergeValues(partition.values, base);\n };\n const consolidateArr = objects => {\n const partitions = SimpleResult.partition(objects);\n return partitions.errors.length > 0 ? mergeErrors(partitions.errors) : SimpleResult.svalue(partitions.values);\n };\n const ResultCombine = {\n consolidateObj,\n consolidateArr\n };\n\n const field$1 = (key, newKey, presence, prop) => ({\n tag: 'field',\n key,\n newKey,\n presence,\n prop\n });\n const customField$1 = (newKey, instantiator) => ({\n tag: 'custom',\n newKey,\n instantiator\n });\n const fold = (value, ifField, ifCustom) => {\n switch (value.tag) {\n case 'field':\n return ifField(value.key, value.newKey, value.presence, value.prop);\n case 'custom':\n return ifCustom(value.newKey, value.instantiator);\n }\n };\n\n const value = validator => {\n const extract = (path, val) => {\n return SimpleResult.bindError(validator(val), err => custom(path, err));\n };\n const toString = constant('val');\n return {\n extract,\n toString\n };\n };\n const anyValue$1 = value(SimpleResult.svalue);\n\n const requiredAccess = (path, obj, key, bundle) => get$a(obj, key).fold(() => missingRequired(path, key, obj), bundle);\n const fallbackAccess = (obj, key, fallback, bundle) => {\n const v = get$a(obj, key).getOrThunk(() => fallback(obj));\n return bundle(v);\n };\n const optionAccess = (obj, key, bundle) => bundle(get$a(obj, key));\n const optionDefaultedAccess = (obj, key, fallback, bundle) => {\n const opt = get$a(obj, key).map(val => val === true ? fallback(obj) : val);\n return bundle(opt);\n };\n const extractField = (field, path, obj, key, prop) => {\n const bundle = av => prop.extract(path.concat([key]), av);\n const bundleAsOption = optValue => optValue.fold(() => SimpleResult.svalue(Optional.none()), ov => {\n const result = prop.extract(path.concat([key]), ov);\n return SimpleResult.map(result, Optional.some);\n });\n switch (field.tag) {\n case 'required':\n return requiredAccess(path, obj, key, bundle);\n case 'defaultedThunk':\n return fallbackAccess(obj, key, field.process, bundle);\n case 'option':\n return optionAccess(obj, key, bundleAsOption);\n case 'defaultedOptionThunk':\n return optionDefaultedAccess(obj, key, field.process, bundleAsOption);\n case 'mergeWithThunk': {\n return fallbackAccess(obj, key, constant({}), v => {\n const result = deepMerge(field.process(obj), v);\n return bundle(result);\n });\n }\n }\n };\n const extractFields = (path, obj, fields) => {\n const success = {};\n const errors = [];\n for (const field of fields) {\n fold(field, (key, newKey, presence, prop) => {\n const result = extractField(presence, path, obj, key, prop);\n SimpleResult.fold(result, err => {\n errors.push(...err);\n }, res => {\n success[newKey] = res;\n });\n }, (newKey, instantiator) => {\n success[newKey] = instantiator(obj);\n });\n }\n return errors.length > 0 ? SimpleResult.serror(errors) : SimpleResult.svalue(success);\n };\n const objOf = values => {\n const extract = (path, o) => extractFields(path, o, values);\n const toString = () => {\n const fieldStrings = map$3(values, value => fold(value, (key, _okey, _presence, prop) => key + ' -> ' + prop.toString(), (newKey, _instantiator) => 'state(' + newKey + ')'));\n return 'obj{\\n' + fieldStrings.join('\\n') + '}';\n };\n return {\n extract,\n toString\n };\n };\n const arrOf = prop => {\n const extract = (path, array) => {\n const results = map$3(array, (a, i) => prop.extract(path.concat(['[' + i + ']']), a));\n return ResultCombine.consolidateArr(results);\n };\n const toString = () => 'array(' + prop.toString() + ')';\n return {\n extract,\n toString\n };\n };\n const oneOf = (props, rawF) => {\n const f = rawF !== undefined ? rawF : identity;\n const extract = (path, val) => {\n const errors = [];\n for (const prop of props) {\n const res = prop.extract(path, val);\n if (res.stype === SimpleResultType.Value) {\n return {\n stype: SimpleResultType.Value,\n svalue: f(res.svalue)\n };\n }\n errors.push(res);\n }\n return ResultCombine.consolidateArr(errors);\n };\n const toString = () => 'oneOf(' + map$3(props, prop => prop.toString()).join(', ') + ')';\n return {\n extract,\n toString\n };\n };\n const arrOfObj = compose(arrOf, objOf);\n\n const valueOf = validator => value(v => validator(v).fold(SimpleResult.serror, SimpleResult.svalue));\n const extractValue = (label, prop, obj) => {\n const res = prop.extract([label], obj);\n return SimpleResult.mapError(res, errs => ({\n input: obj,\n errors: errs\n }));\n };\n const asRaw = (label, prop, obj) => SimpleResult.toResult(extractValue(label, prop, obj));\n const formatError = errInfo => {\n return 'Errors: \\n' + formatErrors(errInfo.errors).join('\\n') + '\\n\\nInput object: ' + formatObj(errInfo.input);\n };\n const choose = (key, branches) => choose$1(key, map$2(branches, objOf));\n\n const anyValue = constant(anyValue$1);\n const typedValue = (validator, expectedType) => value(a => {\n const actualType = typeof a;\n return validator(a) ? SimpleResult.svalue(a) : SimpleResult.serror(`Expected type: ${ expectedType } but got: ${ actualType }`);\n });\n const number = typedValue(isNumber, 'number');\n const string = typedValue(isString, 'string');\n const boolean = typedValue(isBoolean, 'boolean');\n const functionProcessor = typedValue(isFunction, 'function');\n\n const field = field$1;\n const customField = customField$1;\n const validateEnum = values => valueOf(value => contains$2(values, value) ? Result.value(value) : Result.error(`Unsupported value: \"${ value }\", choose one of \"${ values.join(', ') }\".`));\n const requiredOf = (key, schema) => field(key, key, required(), schema);\n const requiredString = key => requiredOf(key, string);\n const requiredStringEnum = (key, values) => field(key, key, required(), validateEnum(values));\n const requiredFunction = key => requiredOf(key, functionProcessor);\n const requiredArrayOf = (key, schema) => field(key, key, required(), arrOf(schema));\n const optionOf = (key, schema) => field(key, key, asOption(), schema);\n const optionString = key => optionOf(key, string);\n const optionFunction = key => optionOf(key, functionProcessor);\n const defaulted = (key, fallback) => field(key, key, defaulted$1(fallback), anyValue());\n const defaultedOf = (key, fallback, schema) => field(key, key, defaulted$1(fallback), schema);\n const defaultedNumber = (key, fallback) => defaultedOf(key, fallback, number);\n const defaultedString = (key, fallback) => defaultedOf(key, fallback, string);\n const defaultedStringEnum = (key, fallback, values) => defaultedOf(key, fallback, validateEnum(values));\n const defaultedBoolean = (key, fallback) => defaultedOf(key, fallback, boolean);\n const defaultedFunction = (key, fallback) => defaultedOf(key, fallback, functionProcessor);\n const defaultedArrayOf = (key, fallback, schema) => defaultedOf(key, fallback, arrOf(schema));\n\n const type = requiredString('type');\n const fetch$1 = requiredFunction('fetch');\n const onAction = requiredFunction('onAction');\n const onSetup = defaultedFunction('onSetup', () => noop);\n const optionalText = optionString('text');\n const optionalIcon = optionString('icon');\n const optionalTooltip = optionString('tooltip');\n const optionalLabel = optionString('label');\n const active = defaultedBoolean('active', false);\n const enabled = defaultedBoolean('enabled', true);\n const primary = defaultedBoolean('primary', false);\n const defaultedColumns = num => defaulted('columns', num);\n const defaultedType = type => defaultedString('type', type);\n\n const autocompleterSchema = objOf([\n type,\n requiredString('trigger'),\n defaultedNumber('minChars', 1),\n defaultedColumns(1),\n defaultedNumber('maxResults', 10),\n optionFunction('matches'),\n fetch$1,\n onAction,\n defaultedArrayOf('highlightOn', [], string)\n ]);\n const createAutocompleter = spec => asRaw('Autocompleter', autocompleterSchema, spec);\n\n const baseToolbarButtonFields = [\n enabled,\n optionalTooltip,\n optionalIcon,\n optionalText,\n onSetup,\n defaultedString('context', 'mode:design')\n ];\n\n const baseToolbarToggleButtonFields = [active].concat(baseToolbarButtonFields);\n\n const contextBarFields = [\n defaultedFunction('predicate', never),\n defaultedStringEnum('scope', 'node', [\n 'node',\n 'editor'\n ]),\n defaultedStringEnum('position', 'selection', [\n 'node',\n 'selection',\n 'line'\n ])\n ];\n\n const contextButtonFields = baseToolbarButtonFields.concat([\n defaultedType('contextformbutton'),\n defaultedString('align', 'end'),\n primary,\n onAction,\n customField('original', identity)\n ]);\n const contextToggleButtonFields = baseToolbarToggleButtonFields.concat([\n defaultedType('contextformbutton'),\n defaultedString('align', 'end'),\n primary,\n onAction,\n customField('original', identity)\n ]);\n const launchButtonFields = baseToolbarButtonFields.concat([defaultedType('contextformbutton')]);\n const launchToggleButtonFields = baseToolbarToggleButtonFields.concat([defaultedType('contextformtogglebutton')]);\n const toggleOrNormal = choose('type', {\n contextformbutton: contextButtonFields,\n contextformtogglebutton: contextToggleButtonFields\n });\n const baseContextFormFields = [\n optionalLabel,\n requiredArrayOf('commands', toggleOrNormal),\n optionOf('launch', choose('type', {\n contextformbutton: launchButtonFields,\n contextformtogglebutton: launchToggleButtonFields\n })),\n defaultedFunction('onInput', noop),\n defaultedFunction('onSetup', noop)\n ];\n const contextFormFields = [\n ...contextBarFields,\n ...baseContextFormFields,\n requiredStringEnum('type', ['contextform']),\n defaultedFunction('initValue', constant('')),\n optionString('placeholder')\n ];\n const contextSliderFormFields = [\n ...contextBarFields,\n ...baseContextFormFields,\n requiredStringEnum('type', ['contextsliderform']),\n defaultedFunction('initValue', constant(0)),\n defaultedFunction('min', constant(0)),\n defaultedFunction('max', constant(100))\n ];\n const contextSizeInputFormFields = [\n ...contextBarFields,\n ...baseContextFormFields,\n requiredStringEnum('type', ['contextsizeinputform']),\n defaultedFunction('initValue', constant({\n width: '',\n height: ''\n }))\n ];\n choose('type', {\n contextform: contextFormFields,\n contextsliderform: contextSliderFormFields,\n contextsizeinputform: contextSizeInputFormFields\n });\n\n objOf([\n defaultedType('contexttoolbar'),\n requiredOf('items', oneOf([\n string,\n arrOfObj([\n optionString('name'),\n optionString('label'),\n requiredArrayOf('items', string)\n ])\n ]))\n ].concat(contextBarFields));\n\n const register$2 = editor => {\n const popups = editor.ui.registry.getAll().popups;\n const dataset = map$2(popups, popup => createAutocompleter(popup).fold(err => {\n throw new Error(formatError(err));\n }, identity));\n const triggers = stringArray(mapToArray(dataset, v => v.trigger));\n const datasetValues = values(dataset);\n const lookupByTrigger = trigger => filter$5(datasetValues, dv => dv.trigger === trigger);\n return {\n dataset,\n triggers,\n lookupByTrigger\n };\n };\n\n const setupEditorInput = (editor, api) => {\n const update = last(api.load, 50);\n editor.on('input', e => {\n if (e.inputType === 'insertCompositionText' && !editor.composing) {\n return;\n }\n update.throttle();\n });\n editor.on('keydown', e => {\n const keyCode = e.which;\n if (keyCode === 8) {\n update.throttle();\n } else if (keyCode === 27) {\n update.cancel();\n api.cancelIfNecessary();\n } else if (keyCode === 38 || keyCode === 40) {\n update.cancel();\n }\n }, true);\n editor.on('remove', update.cancel);\n };\n const setup$k = editor => {\n const activeAutocompleter = value$2();\n const uiActive = Cell(false);\n const isActive = activeAutocompleter.isSet;\n const cancelIfNecessary = () => {\n if (isActive()) {\n fireAutocompleterEnd(editor);\n uiActive.set(false);\n activeAutocompleter.clear();\n }\n };\n const commenceIfNecessary = context => {\n if (!isActive()) {\n activeAutocompleter.set({\n trigger: context.trigger,\n matchLength: context.text.length\n });\n }\n };\n const getAutocompleters = cached(() => register$2(editor));\n const doLookup = fetchOptions => activeAutocompleter.get().map(ac => getContext(editor.dom, editor.selection.getRng(), ac.trigger, true).bind(newContext => lookupWithContext(editor, getAutocompleters, newContext, fetchOptions))).getOrThunk(() => lookup(editor, getAutocompleters));\n const load = fetchOptions => {\n doLookup(fetchOptions).fold(cancelIfNecessary, lookupInfo => {\n commenceIfNecessary(lookupInfo.context);\n lookupInfo.lookupData.then(lookupData => {\n activeAutocompleter.get().map(ac => {\n const context = lookupInfo.context;\n if (ac.trigger !== context.trigger) {\n return;\n }\n activeAutocompleter.set({\n ...ac,\n matchLength: context.text.length\n });\n if (uiActive.get()) {\n fireAutocompleterUpdateActiveRange(editor, { range: context.range });\n fireAutocompleterUpdate(editor, { lookupData });\n } else {\n uiActive.set(true);\n fireAutocompleterUpdateActiveRange(editor, { range: context.range });\n fireAutocompleterStart(editor, { lookupData });\n }\n });\n });\n });\n };\n const isRangeInsideOrEqual = (innerRange, outerRange) => {\n const startComparison = innerRange.compareBoundaryPoints(window.Range.START_TO_START, outerRange);\n const endComparison = innerRange.compareBoundaryPoints(window.Range.END_TO_END, outerRange);\n return startComparison >= 0 && endComparison <= 0;\n };\n const readActiveRange = () => {\n return activeAutocompleter.get().bind(({trigger}) => {\n const selRange = editor.selection.getRng();\n return getContext(editor.dom, selRange, trigger, uiActive.get()).filter(({range}) => isRangeInsideOrEqual(selRange, range)).map(({range}) => range);\n });\n };\n editor.addCommand('mceAutocompleterReload', (_ui, value) => {\n const fetchOptions = isObject(value) ? value.fetchOptions : {};\n load(fetchOptions);\n });\n editor.addCommand('mceAutocompleterClose', cancelIfNecessary);\n editor.addCommand('mceAutocompleterRefreshActiveRange', () => {\n readActiveRange().each(range => {\n fireAutocompleterUpdateActiveRange(editor, { range });\n });\n });\n editor.editorCommands.addQueryStateHandler('mceAutoCompleterInRange', () => readActiveRange().isSome());\n setupEditorInput(editor, {\n cancelIfNecessary,\n load\n });\n };\n\n const browser$1 = detect$1().browser;\n const isSafari = browser$1.isSafari();\n const emptyNodeContents = node => fillWithPaddingBr(SugarElement.fromDom(node));\n const isEntireNodeSelected = (rng, node) => {\n var _a;\n return rng.startOffset === 0 && rng.endOffset === ((_a = node.textContent) === null || _a === void 0 ? void 0 : _a.length);\n };\n const getParentDetailsElementAtPos = (dom, pos) => Optional.from(dom.getParent(pos.container(), 'details'));\n const isInDetailsElement = (dom, pos) => getParentDetailsElementAtPos(dom, pos).isSome();\n const getDetailsElements = (dom, rng) => {\n const startDetails = Optional.from(dom.getParent(rng.startContainer, 'details'));\n const endDetails = Optional.from(dom.getParent(rng.endContainer, 'details'));\n if (startDetails.isSome() || endDetails.isSome()) {\n const startSummary = startDetails.bind(details => Optional.from(dom.select('summary', details)[0]));\n return Optional.some({\n startSummary,\n startDetails,\n endDetails\n });\n } else {\n return Optional.none();\n }\n };\n const isCaretInTheBeginningOf = (caretPos, element) => firstPositionIn(element).exists(pos => pos.isEqual(caretPos));\n const isCaretInTheEndOf = (caretPos, element) => {\n return lastPositionIn(element).exists(pos => {\n if (isBr$6(pos.getNode())) {\n return prevPosition(element, pos).exists(pos2 => pos2.isEqual(caretPos)) || pos.isEqual(caretPos);\n } else {\n return pos.isEqual(caretPos);\n }\n });\n };\n const isCaretAtStartOfSummary = (caretPos, detailsElements) => detailsElements.startSummary.exists(summary => isCaretInTheBeginningOf(caretPos, summary));\n const isCaretAtEndOfSummary = (caretPos, detailsElements) => detailsElements.startSummary.exists(summary => isCaretInTheEndOf(caretPos, summary));\n const isCaretInFirstPositionInBody = (caretPos, detailsElements) => detailsElements.startDetails.exists(details => prevPosition(details, caretPos).forall(pos => detailsElements.startSummary.exists(summary => !summary.contains(caretPos.container()) && summary.contains(pos.container()))));\n const isCaretInLastPositionInBody = (root, caretPos, detailsElements) => detailsElements.startDetails.exists(details => nextPosition(root, caretPos).forall(pos => !details.contains(pos.container())));\n const setCaretToPosition = (editor, position) => {\n const node = position.getNode();\n if (!isUndefined(node)) {\n editor.selection.setCursorLocation(node, position.offset());\n }\n };\n const moveCaretToDetailsPos = (editor, pos, forward) => {\n const details = editor.dom.getParent(pos.container(), 'details');\n if (details && !details.open) {\n const summary = editor.dom.select('summary', details)[0];\n if (summary) {\n const newPos = forward ? firstPositionIn(summary) : lastPositionIn(summary);\n newPos.each(pos => setCaretToPosition(editor, pos));\n }\n } else {\n setCaretToPosition(editor, pos);\n }\n };\n const isPartialDelete = (rng, detailsElements) => {\n const containsStart = element => element.contains(rng.startContainer);\n const containsEnd = element => element.contains(rng.endContainer);\n const startInSummary = detailsElements.startSummary.exists(containsStart);\n const endInSummary = detailsElements.startSummary.exists(containsEnd);\n const isPartiallySelectedDetailsElements = detailsElements.startDetails.forall(startDetails => detailsElements.endDetails.forall(endDetails => startDetails !== endDetails));\n const isInPartiallySelectedSummary = (startInSummary || endInSummary) && !(startInSummary && endInSummary);\n return isInPartiallySelectedSummary || isPartiallySelectedDetailsElements;\n };\n const shouldPreventDeleteIntoDetails = (editor, forward, granularity) => {\n const {dom, selection} = editor;\n const root = editor.getBody();\n if (granularity === 'character') {\n const caretPos = CaretPosition.fromRangeStart(selection.getRng());\n const parentBlock = dom.getParent(caretPos.container(), dom.isBlock);\n const parentDetailsAtCaret = getParentDetailsElementAtPos(dom, caretPos);\n const inEmptyParentBlock = parentBlock && dom.isEmpty(parentBlock);\n const isFirstBlock = isNull(parentBlock === null || parentBlock === void 0 ? void 0 : parentBlock.previousSibling);\n const isLastBlock = isNull(parentBlock === null || parentBlock === void 0 ? void 0 : parentBlock.nextSibling);\n if (inEmptyParentBlock) {\n const firstOrLast = forward ? isLastBlock : isFirstBlock;\n if (firstOrLast) {\n const isBeforeAfterDetails = navigate(!forward, root, caretPos).exists(pos => {\n return isInDetailsElement(dom, pos) && !equals(parentDetailsAtCaret, getParentDetailsElementAtPos(dom, pos));\n });\n if (isBeforeAfterDetails) {\n return true;\n }\n }\n }\n return navigate(forward, root, caretPos).fold(never, pos => {\n const parentDetailsAtNewPos = getParentDetailsElementAtPos(dom, pos);\n if (isInDetailsElement(dom, pos) && !equals(parentDetailsAtCaret, parentDetailsAtNewPos)) {\n if (!forward) {\n moveCaretToDetailsPos(editor, pos, false);\n }\n if (parentBlock && inEmptyParentBlock) {\n if (forward && isFirstBlock) {\n return true;\n } else if (!forward && isLastBlock) {\n return true;\n }\n moveCaretToDetailsPos(editor, pos, forward);\n editor.dom.remove(parentBlock);\n }\n return true;\n } else {\n return false;\n }\n });\n } else {\n return false;\n }\n };\n const shouldPreventDeleteSummaryAction = (editor, detailElements, forward, granularity) => {\n const selection = editor.selection;\n const rng = selection.getRng();\n const caretPos = CaretPosition.fromRangeStart(rng);\n const root = editor.getBody();\n if (granularity === 'selection') {\n return isPartialDelete(rng, detailElements);\n } else if (forward) {\n return isCaretAtEndOfSummary(caretPos, detailElements) || isCaretInLastPositionInBody(root, caretPos, detailElements);\n } else {\n return isCaretAtStartOfSummary(caretPos, detailElements) || isCaretInFirstPositionInBody(caretPos, detailElements);\n }\n };\n const shouldPreventDeleteAction = (editor, forward, granularity) => getDetailsElements(editor.dom, editor.selection.getRng()).fold(() => shouldPreventDeleteIntoDetails(editor, forward, granularity), detailsElements => shouldPreventDeleteSummaryAction(editor, detailsElements, forward, granularity) || shouldPreventDeleteIntoDetails(editor, forward, granularity));\n const handleDeleteActionSafari = (editor, forward, granularity) => {\n const selection = editor.selection;\n const node = selection.getNode();\n const rng = selection.getRng();\n const caretPos = CaretPosition.fromRangeStart(rng);\n if (isSummary$1(node)) {\n if (granularity === 'selection' && isEntireNodeSelected(rng, node) || willDeleteLastPositionInElement(forward, caretPos, node)) {\n emptyNodeContents(node);\n } else {\n editor.undoManager.transact(() => {\n const sel = selection.getSel();\n let {anchorNode, anchorOffset, focusNode, focusOffset} = sel !== null && sel !== void 0 ? sel : {};\n const applySelection = () => {\n if (isNonNullable(anchorNode) && isNonNullable(anchorOffset) && isNonNullable(focusNode) && isNonNullable(focusOffset)) {\n sel === null || sel === void 0 ? void 0 : sel.setBaseAndExtent(anchorNode, anchorOffset, focusNode, focusOffset);\n }\n };\n const updateSelection = () => {\n anchorNode = sel === null || sel === void 0 ? void 0 : sel.anchorNode;\n anchorOffset = sel === null || sel === void 0 ? void 0 : sel.anchorOffset;\n focusNode = sel === null || sel === void 0 ? void 0 : sel.focusNode;\n focusOffset = sel === null || sel === void 0 ? void 0 : sel.focusOffset;\n };\n const appendAllChildNodes = (from, to) => {\n each$e(from.childNodes, child => {\n if (isNode(child)) {\n to.appendChild(child);\n }\n });\n };\n const container = editor.dom.create('span', { 'data-mce-bogus': '1' });\n appendAllChildNodes(node, container);\n node.appendChild(container);\n applySelection();\n if (granularity === 'word' || granularity === 'line') {\n sel === null || sel === void 0 ? void 0 : sel.modify('extend', forward ? 'right' : 'left', granularity);\n }\n if (!selection.isCollapsed() && isEntireNodeSelected(selection.getRng(), container)) {\n emptyNodeContents(node);\n } else {\n editor.execCommand(forward ? 'ForwardDelete' : 'Delete');\n updateSelection();\n appendAllChildNodes(container, node);\n applySelection();\n }\n editor.dom.remove(container);\n });\n }\n return true;\n } else {\n return false;\n }\n };\n const backspaceDelete = (editor, forward, granularity) => shouldPreventDeleteAction(editor, forward, granularity) || isSafari && handleDeleteActionSafari(editor, forward, granularity) ? Optional.some(noop) : Optional.none();\n\n const createAndFireInputEvent = eventType => (editor, inputType, specifics = {}) => {\n const target = editor.getBody();\n const overrides = {\n bubbles: true,\n composed: true,\n data: null,\n isComposing: false,\n detail: 0,\n view: null,\n target,\n currentTarget: target,\n eventPhase: Event.AT_TARGET,\n originalTarget: target,\n explicitOriginalTarget: target,\n isTrusted: false,\n srcElement: target,\n cancelable: false,\n preventDefault: noop,\n inputType\n };\n const input = clone$3(new InputEvent(eventType));\n return editor.dispatch(eventType, {\n ...input,\n ...overrides,\n ...specifics\n });\n };\n const fireInputEvent = createAndFireInputEvent('input');\n const fireBeforeInputEvent = createAndFireInputEvent('beforeinput');\n\n const platform$2 = detect$1();\n const os = platform$2.os;\n const isMacOSOriOS = os.isMacOS() || os.isiOS();\n const browser = platform$2.browser;\n const isFirefox = browser.isFirefox();\n const executeKeydownOverride$3 = (editor, caret, evt) => {\n const inputType = evt.keyCode === VK.BACKSPACE ? 'deleteContentBackward' : 'deleteContentForward';\n const isCollapsed = editor.selection.isCollapsed();\n const unmodifiedGranularity = isCollapsed ? 'character' : 'selection';\n const getModifiedGranularity = isWord => {\n if (isCollapsed) {\n return isWord ? 'word' : 'line';\n } else {\n return 'selection';\n }\n };\n executeWithDelayedAction([\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$1, editor)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$7, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$7, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$8, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$8, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$4, editor, caret, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$4, editor, caret, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$b, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$b, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete, editor, false, unmodifiedGranularity)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete, editor, true, unmodifiedGranularity)\n },\n ...isMacOSOriOS ? [\n {\n keyCode: VK.BACKSPACE,\n altKey: true,\n action: action(backspaceDelete, editor, false, getModifiedGranularity(true))\n },\n {\n keyCode: VK.DELETE,\n altKey: true,\n action: action(backspaceDelete, editor, true, getModifiedGranularity(true))\n },\n {\n keyCode: VK.BACKSPACE,\n metaKey: true,\n action: action(backspaceDelete, editor, false, getModifiedGranularity(false))\n }\n ] : [\n {\n keyCode: VK.BACKSPACE,\n ctrlKey: true,\n action: action(backspaceDelete, editor, false, getModifiedGranularity(true))\n },\n {\n keyCode: VK.DELETE,\n ctrlKey: true,\n action: action(backspaceDelete, editor, true, getModifiedGranularity(true))\n }\n ],\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$5, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$5, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$2, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$2, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$9, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$9, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$a, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$a, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$3, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$3, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$6, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$6, editor, true)\n }\n ], evt).filter(_ => editor.selection.isEditable()).each(applyAction => {\n evt.preventDefault();\n const beforeInput = fireBeforeInputEvent(editor, inputType);\n if (!beforeInput.isDefaultPrevented()) {\n applyAction();\n fireInputEvent(editor, inputType);\n }\n });\n };\n const executeKeyupOverride = (editor, evt, isBackspaceKeydown) => execute([\n {\n keyCode: VK.BACKSPACE,\n action: action(paddEmptyElement, editor)\n },\n {\n keyCode: VK.DELETE,\n action: action(paddEmptyElement, editor)\n },\n ...isMacOSOriOS ? [\n {\n keyCode: VK.BACKSPACE,\n altKey: true,\n action: action(refreshCaret, editor)\n },\n {\n keyCode: VK.DELETE,\n altKey: true,\n action: action(refreshCaret, editor)\n },\n ...isBackspaceKeydown ? [{\n keyCode: isFirefox ? 224 : 91,\n action: action(refreshCaret, editor)\n }] : []\n ] : [\n {\n keyCode: VK.BACKSPACE,\n ctrlKey: true,\n action: action(refreshCaret, editor)\n },\n {\n keyCode: VK.DELETE,\n ctrlKey: true,\n action: action(refreshCaret, editor)\n }\n ]\n ], evt);\n const setup$j = (editor, caret) => {\n let isBackspaceKeydown = false;\n editor.on('keydown', evt => {\n isBackspaceKeydown = evt.keyCode === VK.BACKSPACE;\n if (!evt.isDefaultPrevented()) {\n executeKeydownOverride$3(editor, caret, evt);\n }\n });\n editor.on('keyup', evt => {\n if (!evt.isDefaultPrevented()) {\n executeKeyupOverride(editor, evt, isBackspaceKeydown);\n }\n isBackspaceKeydown = false;\n });\n };\n\n const firstNonWhiteSpaceNodeSibling = node => {\n while (node) {\n if (isElement$6(node) || isText$b(node) && node.data && /[\\r\\n\\s]/.test(node.data)) {\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n };\n const moveToCaretPosition = (editor, root) => {\n const dom = editor.dom;\n const moveCaretBeforeOnEnterElementsMap = editor.schema.getMoveCaretBeforeOnEnterElements();\n if (!root) {\n return;\n }\n if (/^(LI|DT|DD)$/.test(root.nodeName)) {\n const firstChild = firstNonWhiteSpaceNodeSibling(root.firstChild);\n if (firstChild && /^(UL|OL|DL)$/.test(firstChild.nodeName)) {\n root.insertBefore(dom.doc.createTextNode(nbsp), root.firstChild);\n }\n }\n const rng = dom.createRng();\n root.normalize();\n if (root.hasChildNodes()) {\n const walker = new DomTreeWalker(root, root);\n let lastNode = root;\n let node;\n while (node = walker.current()) {\n if (isText$b(node)) {\n rng.setStart(node, 0);\n rng.setEnd(node, 0);\n break;\n }\n if (moveCaretBeforeOnEnterElementsMap[node.nodeName.toLowerCase()]) {\n rng.setStartBefore(node);\n rng.setEndBefore(node);\n break;\n }\n lastNode = node;\n node = walker.next();\n }\n if (!node) {\n rng.setStart(lastNode, 0);\n rng.setEnd(lastNode, 0);\n }\n } else {\n if (isBr$6(root)) {\n if (root.nextSibling && dom.isBlock(root.nextSibling)) {\n rng.setStartBefore(root);\n rng.setEndBefore(root);\n } else {\n rng.setStartAfter(root);\n rng.setEndAfter(root);\n }\n } else {\n rng.setStart(root, 0);\n rng.setEnd(root, 0);\n }\n }\n editor.selection.setRng(rng);\n scrollRangeIntoView(editor, rng);\n };\n const getEditableRoot = (dom, node) => {\n const root = dom.getRoot();\n let editableRoot;\n let parent = node;\n while (parent !== root && parent && dom.getContentEditable(parent) !== 'false') {\n if (dom.getContentEditable(parent) === 'true') {\n editableRoot = parent;\n break;\n }\n parent = parent.parentNode;\n }\n return parent !== root ? editableRoot : root;\n };\n const getParentBlock$1 = editor => {\n return Optional.from(editor.dom.getParent(editor.selection.getStart(true), editor.dom.isBlock));\n };\n const getParentBlockName = editor => {\n return getParentBlock$1(editor).fold(constant(''), parentBlock => {\n return parentBlock.nodeName.toUpperCase();\n });\n };\n const isListItemParentBlock = editor => {\n return getParentBlock$1(editor).filter(elm => {\n return isListItem$1(SugarElement.fromDom(elm));\n }).isSome();\n };\n const emptyBlock = elm => {\n elm.innerHTML = '
    ';\n };\n const applyAttributes = (editor, node, forcedRootBlockAttrs) => {\n const dom = editor.dom;\n Optional.from(forcedRootBlockAttrs.style).map(dom.parseStyle).each(attrStyles => {\n const currentStyles = getAllRaw(SugarElement.fromDom(node));\n const newStyles = {\n ...currentStyles,\n ...attrStyles\n };\n dom.setStyles(node, newStyles);\n });\n const attrClassesOpt = Optional.from(forcedRootBlockAttrs.class).map(attrClasses => attrClasses.split(/\\s+/));\n const currentClassesOpt = Optional.from(node.className).map(currentClasses => filter$5(currentClasses.split(/\\s+/), clazz => clazz !== ''));\n lift2(attrClassesOpt, currentClassesOpt, (attrClasses, currentClasses) => {\n const filteredClasses = filter$5(currentClasses, clazz => !contains$2(attrClasses, clazz));\n const newClasses = [\n ...attrClasses,\n ...filteredClasses\n ];\n dom.setAttrib(node, 'class', newClasses.join(' '));\n });\n const appliedAttrs = [\n 'style',\n 'class'\n ];\n const remainingAttrs = filter$4(forcedRootBlockAttrs, (_, attrs) => !contains$2(appliedAttrs, attrs));\n dom.setAttribs(node, remainingAttrs);\n };\n const setForcedBlockAttrs = (editor, node) => {\n const forcedRootBlockName = getForcedRootBlock(editor);\n if (forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) {\n const forcedRootBlockAttrs = getForcedRootBlockAttrs(editor);\n applyAttributes(editor, node, forcedRootBlockAttrs);\n }\n };\n const createNewBlock = (editor, container, parentBlock, editableRoot, keepStyles = true, name, styles) => {\n const dom = editor.dom;\n const schema = editor.schema;\n const newBlockName = getForcedRootBlock(editor);\n const parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : '';\n let node = container;\n const textInlineElements = schema.getTextInlineElements();\n let block;\n if (name || parentBlockName === 'TABLE' || parentBlockName === 'HR') {\n block = dom.create(name || newBlockName, styles || {});\n } else {\n block = parentBlock.cloneNode(false);\n }\n let caretNode = block;\n if (!keepStyles) {\n dom.setAttrib(block, 'style', null);\n dom.setAttrib(block, 'class', null);\n } else {\n do {\n if (textInlineElements[node.nodeName]) {\n if (isCaretNode(node) || isBookmarkNode$1(node)) {\n continue;\n }\n const clonedNode = node.cloneNode(false);\n dom.setAttrib(clonedNode, 'id', '');\n if (block.hasChildNodes()) {\n clonedNode.appendChild(block.firstChild);\n block.appendChild(clonedNode);\n } else {\n caretNode = clonedNode;\n block.appendChild(clonedNode);\n }\n }\n } while ((node = node.parentNode) && node !== editableRoot);\n }\n setForcedBlockAttrs(editor, block);\n emptyBlock(caretNode);\n return block;\n };\n\n const getDetailsRoot = (editor, element) => editor.dom.getParent(element, isDetails);\n const isAtDetailsEdge = (root, element, isTextBlock) => {\n let node = element;\n while (node && node !== root && isNull(node.nextSibling)) {\n const parent = node.parentElement;\n if (!parent || !isTextBlock(parent)) {\n return isDetails(parent);\n }\n node = parent;\n }\n return false;\n };\n const isLastEmptyBlockInDetails = (editor, shiftKey, element) => !shiftKey && element.nodeName.toLowerCase() === getForcedRootBlock(editor) && editor.dom.isEmpty(element) && isAtDetailsEdge(editor.getBody(), element, el => has$2(editor.schema.getTextBlockElements(), el.nodeName.toLowerCase()));\n const insertNewLine = (editor, createNewBlock, parentBlock) => {\n var _a, _b, _c;\n const newBlock = createNewBlock(getForcedRootBlock(editor));\n const root = getDetailsRoot(editor, parentBlock);\n if (!root) {\n return;\n }\n editor.dom.insertAfter(newBlock, root);\n moveToCaretPosition(editor, newBlock);\n if (((_c = (_b = (_a = parentBlock.parentElement) === null || _a === void 0 ? void 0 : _a.childNodes) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0) > 1) {\n editor.dom.remove(parentBlock);\n }\n };\n\n const hasFirstChild = (elm, name) => {\n return elm.firstChild && elm.firstChild.nodeName === name;\n };\n const isFirstChild = elm => {\n var _a;\n return ((_a = elm.parentNode) === null || _a === void 0 ? void 0 : _a.firstChild) === elm;\n };\n const hasParent = (elm, parentName) => {\n const parentNode = elm === null || elm === void 0 ? void 0 : elm.parentNode;\n return isNonNullable(parentNode) && parentNode.nodeName === parentName;\n };\n const isListBlock = elm => {\n return isNonNullable(elm) && /^(OL|UL|LI)$/.test(elm.nodeName);\n };\n const isListItem = elm => {\n return isNonNullable(elm) && /^(LI|DT|DD)$/.test(elm.nodeName);\n };\n const isNestedList = elm => {\n return isListBlock(elm) && isListBlock(elm.parentNode);\n };\n const getContainerBlock = containerBlock => {\n const containerBlockParent = containerBlock.parentNode;\n return isListItem(containerBlockParent) ? containerBlockParent : containerBlock;\n };\n const isFirstOrLastLi = (containerBlock, parentBlock, first) => {\n let node = containerBlock[first ? 'firstChild' : 'lastChild'];\n while (node) {\n if (isElement$6(node)) {\n break;\n }\n node = node[first ? 'nextSibling' : 'previousSibling'];\n }\n return node === parentBlock;\n };\n const getStyles = elm => foldl(mapToArray(getAllRaw(SugarElement.fromDom(elm)), (style, styleName) => `${ styleName }: ${ style };`), (acc, s) => acc + s, '');\n const insert$4 = (editor, createNewBlock, containerBlock, parentBlock, newBlockName) => {\n const dom = editor.dom;\n const rng = editor.selection.getRng();\n const containerParent = containerBlock.parentNode;\n if (containerBlock === editor.getBody() || !containerParent) {\n return;\n }\n if (isNestedList(containerBlock)) {\n newBlockName = 'LI';\n }\n const parentBlockStyles = isListItem(parentBlock) ? getStyles(parentBlock) : undefined;\n let newBlock = isListItem(parentBlock) && parentBlockStyles ? createNewBlock(newBlockName, { style: getStyles(parentBlock) }) : createNewBlock(newBlockName);\n if (isFirstOrLastLi(containerBlock, parentBlock, true) && isFirstOrLastLi(containerBlock, parentBlock, false)) {\n if (hasParent(containerBlock, 'LI')) {\n const containerBlockParent = getContainerBlock(containerBlock);\n dom.insertAfter(newBlock, containerBlockParent);\n if (isFirstChild(containerBlock)) {\n dom.remove(containerBlockParent);\n } else {\n dom.remove(containerBlock);\n }\n } else {\n dom.replace(newBlock, containerBlock);\n }\n } else if (isFirstOrLastLi(containerBlock, parentBlock, true)) {\n if (hasParent(containerBlock, 'LI')) {\n dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n newBlock.appendChild(dom.doc.createTextNode(' '));\n newBlock.appendChild(containerBlock);\n } else {\n containerParent.insertBefore(newBlock, containerBlock);\n }\n dom.remove(parentBlock);\n } else if (isFirstOrLastLi(containerBlock, parentBlock, false)) {\n dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n dom.remove(parentBlock);\n } else {\n containerBlock = getContainerBlock(containerBlock);\n const tmpRng = rng.cloneRange();\n tmpRng.setStartAfter(parentBlock);\n tmpRng.setEndAfter(containerBlock);\n const fragment = tmpRng.extractContents();\n if (newBlockName === 'LI' && hasFirstChild(fragment, 'LI')) {\n const previousChildren = filter$5(map$3(newBlock.children, SugarElement.fromDom), not(isTag('br')));\n newBlock = fragment.firstChild;\n dom.insertAfter(fragment, containerBlock);\n each$e(previousChildren, child => prepend(SugarElement.fromDom(newBlock), child));\n if (parentBlockStyles) {\n newBlock.setAttribute('style', parentBlockStyles);\n }\n } else {\n dom.insertAfter(fragment, containerBlock);\n dom.insertAfter(newBlock, containerBlock);\n }\n dom.remove(parentBlock);\n }\n moveToCaretPosition(editor, newBlock);\n };\n\n const trimZwsp = fragment => {\n each$e(descendants$1(SugarElement.fromDom(fragment), isText$c), text => {\n const rawNode = text.dom;\n rawNode.nodeValue = trim$2(rawNode.data);\n });\n };\n const isWithinNonEditableList = (editor, node) => {\n const parentList = editor.dom.getParent(node, 'ol,ul,dl');\n return parentList !== null && editor.dom.getContentEditableParent(parentList) === 'false';\n };\n const isEmptyAnchor = (dom, elm) => {\n return elm && elm.nodeName === 'A' && dom.isEmpty(elm);\n };\n const containerAndPreviousSiblingName = (container, nodeName) => {\n return container.nodeName === nodeName || container.previousSibling && container.previousSibling.nodeName === nodeName;\n };\n const containerAndNextSiblingName = (container, nodeName) => {\n return container.nodeName === nodeName || container.nextSibling && container.nextSibling.nodeName === nodeName;\n };\n const canSplitBlock = (dom, node) => {\n return isNonNullable(node) && dom.isBlock(node) && !/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName) && !/^(fixed|absolute)/i.test(node.style.position) && dom.isEditable(node.parentNode) && dom.getContentEditable(node) !== 'false';\n };\n const trimInlineElementsOnLeftSideOfBlock = (dom, nonEmptyElementsMap, block) => {\n var _a;\n const firstChilds = [];\n if (!block) {\n return;\n }\n let currentNode = block;\n while (currentNode = currentNode.firstChild) {\n if (dom.isBlock(currentNode)) {\n return;\n }\n if (isElement$6(currentNode) && !nonEmptyElementsMap[currentNode.nodeName.toLowerCase()]) {\n firstChilds.push(currentNode);\n }\n }\n let i = firstChilds.length;\n while (i--) {\n currentNode = firstChilds[i];\n if (!currentNode.hasChildNodes() || currentNode.firstChild === currentNode.lastChild && ((_a = currentNode.firstChild) === null || _a === void 0 ? void 0 : _a.nodeValue) === '') {\n dom.remove(currentNode);\n } else {\n if (isEmptyAnchor(dom, currentNode)) {\n dom.remove(currentNode);\n }\n }\n }\n };\n const normalizeZwspOffset = (start, container, offset) => {\n if (!isText$b(container)) {\n return offset;\n } else if (start) {\n return offset === 1 && container.data.charAt(offset - 1) === ZWSP$1 ? 0 : offset;\n } else {\n return offset === container.data.length - 1 && container.data.charAt(offset) === ZWSP$1 ? container.data.length : offset;\n }\n };\n const includeZwspInRange = rng => {\n const newRng = rng.cloneRange();\n newRng.setStart(rng.startContainer, normalizeZwspOffset(true, rng.startContainer, rng.startOffset));\n newRng.setEnd(rng.endContainer, normalizeZwspOffset(false, rng.endContainer, rng.endOffset));\n return newRng;\n };\n const trimLeadingLineBreaks = node => {\n let currentNode = node;\n do {\n if (isText$b(currentNode)) {\n currentNode.data = currentNode.data.replace(/^[\\r\\n]+/, '');\n }\n currentNode = currentNode.firstChild;\n } while (currentNode);\n };\n const wrapSelfAndSiblingsInDefaultBlock = (editor, newBlockName, rng, container, offset) => {\n var _a, _b;\n const dom = editor.dom;\n const editableRoot = (_a = getEditableRoot(dom, container)) !== null && _a !== void 0 ? _a : dom.getRoot();\n let parentBlock = dom.getParent(container, dom.isBlock);\n if (!parentBlock || !canSplitBlock(dom, parentBlock)) {\n parentBlock = parentBlock || editableRoot;\n if (!parentBlock.hasChildNodes()) {\n const newBlock = dom.create(newBlockName);\n setForcedBlockAttrs(editor, newBlock);\n parentBlock.appendChild(newBlock);\n rng.setStart(newBlock, 0);\n rng.setEnd(newBlock, 0);\n return newBlock;\n }\n let node = container;\n while (node && node.parentNode !== parentBlock) {\n node = node.parentNode;\n }\n let startNode;\n while (node && !dom.isBlock(node)) {\n startNode = node;\n node = node.previousSibling;\n }\n const startNodeName = (_b = startNode === null || startNode === void 0 ? void 0 : startNode.parentElement) === null || _b === void 0 ? void 0 : _b.nodeName;\n if (startNode && startNodeName && editor.schema.isValidChild(startNodeName, newBlockName.toLowerCase())) {\n const startNodeParent = startNode.parentNode;\n const newBlock = dom.create(newBlockName);\n setForcedBlockAttrs(editor, newBlock);\n startNodeParent.insertBefore(newBlock, startNode);\n node = startNode;\n while (node && !dom.isBlock(node)) {\n const next = node.nextSibling;\n newBlock.appendChild(node);\n node = next;\n }\n rng.setStart(container, offset);\n rng.setEnd(container, offset);\n }\n }\n return container;\n };\n const addBrToBlockIfNeeded = (dom, block) => {\n block.normalize();\n const lastChild = block.lastChild;\n if (!lastChild || isElement$6(lastChild) && /^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true))) {\n dom.add(block, 'br');\n }\n };\n const shouldEndContainer = (editor, container) => {\n const optionValue = shouldEndContainerOnEmptyBlock(editor);\n if (isNullable(container)) {\n return false;\n } else if (isString(optionValue)) {\n return contains$2(Tools.explode(optionValue), container.nodeName.toLowerCase());\n } else {\n return optionValue;\n }\n };\n const insert$3 = (editor, evt) => {\n let container;\n let offset;\n let parentBlockName;\n let containerBlock;\n let isAfterLastNodeInContainer = false;\n const dom = editor.dom;\n const schema = editor.schema, nonEmptyElementsMap = schema.getNonEmptyElements();\n const rng = editor.selection.getRng();\n const newBlockName = getForcedRootBlock(editor);\n const start = SugarElement.fromDom(rng.startContainer);\n const child = child$1(start, rng.startOffset);\n const isCef = child.exists(element => isHTMLElement$1(element) && !isEditable$2(element));\n const collapsedAndCef = rng.collapsed && isCef;\n const createNewBlock$1 = (name, styles) => {\n return createNewBlock(editor, container, parentBlock, editableRoot, shouldKeepStyles(editor), name, styles);\n };\n const isCaretAtStartOrEndOfBlock = start => {\n const normalizedOffset = normalizeZwspOffset(start, container, offset);\n if (isText$b(container) && (start ? normalizedOffset > 0 : normalizedOffset < container.data.length)) {\n return false;\n }\n if ((container.parentNode === parentBlock || container === parentBlock) && isAfterLastNodeInContainer && !start) {\n return true;\n }\n if (start && isElement$6(container) && container === parentBlock.firstChild) {\n return true;\n }\n if (containerAndPreviousSiblingName(container, 'TABLE') || containerAndPreviousSiblingName(container, 'HR')) {\n if (containerAndNextSiblingName(container, 'BR')) {\n return !start;\n }\n return isAfterLastNodeInContainer && !start || !isAfterLastNodeInContainer && start;\n }\n const walker = new DomTreeWalker(container, parentBlock);\n if (isText$b(container)) {\n if (start && normalizedOffset === 0) {\n walker.prev();\n } else if (!start && normalizedOffset === container.data.length) {\n walker.next();\n }\n }\n let node;\n while (node = walker.current()) {\n if (isElement$6(node)) {\n if (!node.getAttribute('data-mce-bogus')) {\n const name = node.nodeName.toLowerCase();\n if (nonEmptyElementsMap[name] && name !== 'br') {\n return false;\n }\n }\n } else if (isText$b(node) && !isWhitespaceText(node.data)) {\n return false;\n }\n if (start) {\n walker.prev();\n } else {\n walker.next();\n }\n }\n return true;\n };\n const insertNewBlockAfter = () => {\n let block;\n if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName !== 'HGROUP') {\n block = createNewBlock$1(newBlockName);\n } else {\n block = createNewBlock$1();\n }\n if (shouldEndContainer(editor, containerBlock) && canSplitBlock(dom, containerBlock) && dom.isEmpty(parentBlock, undefined, { includeZwsp: true })) {\n block = dom.split(containerBlock, parentBlock);\n } else {\n dom.insertAfter(block, parentBlock);\n }\n moveToCaretPosition(editor, block);\n return block;\n };\n normalize$2(dom, rng).each(normRng => {\n rng.setStart(normRng.startContainer, normRng.startOffset);\n rng.setEnd(normRng.endContainer, normRng.endOffset);\n });\n container = rng.startContainer;\n offset = rng.startOffset;\n const shiftKey = !!(evt && evt.shiftKey);\n const ctrlKey = !!(evt && evt.ctrlKey);\n if (isElement$6(container) && container.hasChildNodes() && !collapsedAndCef) {\n isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n if (isAfterLastNodeInContainer && isText$b(container)) {\n offset = container.data.length;\n } else {\n offset = 0;\n }\n }\n const editableRoot = getEditableRoot(dom, container);\n if (!editableRoot || isWithinNonEditableList(editor, container)) {\n return;\n }\n if (!shiftKey) {\n container = wrapSelfAndSiblingsInDefaultBlock(editor, newBlockName, rng, container, offset);\n }\n let parentBlock = dom.getParent(container, dom.isBlock) || dom.getRoot();\n containerBlock = isNonNullable(parentBlock === null || parentBlock === void 0 ? void 0 : parentBlock.parentNode) ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : '';\n const containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n if (containerBlockName === 'LI' && !ctrlKey) {\n const liBlock = containerBlock;\n parentBlock = liBlock;\n containerBlock = liBlock.parentNode;\n parentBlockName = containerBlockName;\n }\n if (isElement$6(containerBlock) && isLastEmptyBlockInDetails(editor, shiftKey, parentBlock)) {\n return insertNewLine(editor, createNewBlock$1, parentBlock);\n }\n if (/^(LI|DT|DD)$/.test(parentBlockName) && isElement$6(containerBlock)) {\n if (dom.isEmpty(parentBlock)) {\n insert$4(editor, createNewBlock$1, containerBlock, parentBlock, newBlockName);\n return;\n }\n }\n if (!collapsedAndCef && (parentBlock === editor.getBody() || !canSplitBlock(dom, parentBlock))) {\n return;\n }\n const parentBlockParent = parentBlock.parentNode;\n let newBlock;\n if (collapsedAndCef) {\n newBlock = createNewBlock$1(newBlockName);\n child.fold(() => {\n append$1(start, SugarElement.fromDom(newBlock));\n }, child => {\n before$3(child, SugarElement.fromDom(newBlock));\n });\n editor.selection.setCursorLocation(newBlock, 0);\n } else if (isCaretContainerBlock$1(parentBlock)) {\n newBlock = showCaretContainerBlock(parentBlock);\n if (dom.isEmpty(parentBlock)) {\n emptyBlock(parentBlock);\n }\n setForcedBlockAttrs(editor, newBlock);\n moveToCaretPosition(editor, newBlock);\n } else if (isCaretAtStartOrEndOfBlock(false)) {\n newBlock = insertNewBlockAfter();\n } else if (isCaretAtStartOrEndOfBlock(true) && parentBlockParent) {\n const caretPos = CaretPosition.fromRangeStart(rng);\n const afterTable = isAfterTable(caretPos);\n const parentBlockSugar = SugarElement.fromDom(parentBlock);\n const afterBr = isAfterBr(parentBlockSugar, caretPos, editor.schema);\n const prevBrOpt = afterBr ? findPreviousBr(parentBlockSugar, caretPos, editor.schema).bind(pos => Optional.from(pos.getNode())) : Optional.none();\n newBlock = parentBlockParent.insertBefore(createNewBlock$1(), parentBlock);\n const root = containerAndPreviousSiblingName(parentBlock, 'HR') || afterTable ? newBlock : prevBrOpt.getOr(parentBlock);\n moveToCaretPosition(editor, root);\n } else {\n const tmpRng = includeZwspInRange(rng).cloneRange();\n tmpRng.setEndAfter(parentBlock);\n const fragment = tmpRng.extractContents();\n trimZwsp(fragment);\n trimLeadingLineBreaks(fragment);\n newBlock = fragment.firstChild;\n dom.insertAfter(fragment, parentBlock);\n trimInlineElementsOnLeftSideOfBlock(dom, nonEmptyElementsMap, newBlock);\n addBrToBlockIfNeeded(dom, parentBlock);\n if (dom.isEmpty(parentBlock)) {\n emptyBlock(parentBlock);\n }\n newBlock.normalize();\n if (dom.isEmpty(newBlock)) {\n dom.remove(newBlock);\n insertNewBlockAfter();\n } else {\n setForcedBlockAttrs(editor, newBlock);\n moveToCaretPosition(editor, newBlock);\n }\n }\n dom.setAttrib(newBlock, 'id', '');\n editor.dispatch('NewBlock', { newBlock });\n };\n const fakeEventName$1 = 'insertParagraph';\n const blockbreak = {\n insert: insert$3,\n fakeEventName: fakeEventName$1\n };\n\n const hasRightSideContent = (schema, container, parentBlock) => {\n const walker = new DomTreeWalker(container, parentBlock);\n let node;\n const nonEmptyElementsMap = schema.getNonEmptyElements();\n while (node = walker.next()) {\n if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || isText$b(node) && node.length > 0) {\n return true;\n }\n }\n return false;\n };\n const moveSelectionToBr = (editor, brElm, extraBr) => {\n const rng = editor.dom.createRng();\n if (!extraBr) {\n rng.setStartAfter(brElm);\n rng.setEndAfter(brElm);\n } else {\n rng.setStartBefore(brElm);\n rng.setEndBefore(brElm);\n }\n editor.selection.setRng(rng);\n scrollRangeIntoView(editor, rng);\n };\n const insertBrAtCaret = (editor, evt) => {\n const selection = editor.selection;\n const dom = editor.dom;\n const rng = selection.getRng();\n let brElm;\n let extraBr = false;\n normalize$2(dom, rng).each(normRng => {\n rng.setStart(normRng.startContainer, normRng.startOffset);\n rng.setEnd(normRng.endContainer, normRng.endOffset);\n });\n let offset = rng.startOffset;\n let container = rng.startContainer;\n if (isElement$6(container) && container.hasChildNodes()) {\n const isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n if (isAfterLastNodeInContainer && isText$b(container)) {\n offset = container.data.length;\n } else {\n offset = 0;\n }\n }\n let parentBlock = dom.getParent(container, dom.isBlock);\n const containerBlock = parentBlock && parentBlock.parentNode ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n const containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n const isControlKey = !!(evt && evt.ctrlKey);\n if (containerBlockName === 'LI' && !isControlKey) {\n parentBlock = containerBlock;\n }\n if (isText$b(container) && offset >= container.data.length) {\n if (!hasRightSideContent(editor.schema, container, parentBlock || dom.getRoot())) {\n brElm = dom.create('br');\n rng.insertNode(brElm);\n rng.setStartAfter(brElm);\n rng.setEndAfter(brElm);\n extraBr = true;\n }\n }\n brElm = dom.create('br');\n rangeInsertNode(dom, rng, brElm);\n moveSelectionToBr(editor, brElm, extraBr);\n editor.undoManager.add();\n };\n const insertBrBefore = (editor, inline) => {\n const br = SugarElement.fromTag('br');\n before$3(SugarElement.fromDom(inline), br);\n editor.undoManager.add();\n };\n const insertBrAfter = (editor, inline) => {\n if (!hasBrAfter(editor.getBody(), inline)) {\n after$4(SugarElement.fromDom(inline), SugarElement.fromTag('br'));\n }\n const br = SugarElement.fromTag('br');\n after$4(SugarElement.fromDom(inline), br);\n moveSelectionToBr(editor, br.dom, false);\n editor.undoManager.add();\n };\n const isBeforeBr = pos => {\n return isBr$6(pos.getNode());\n };\n const hasBrAfter = (rootNode, startNode) => {\n if (isBeforeBr(CaretPosition.after(startNode))) {\n return true;\n } else {\n return nextPosition(rootNode, CaretPosition.after(startNode)).map(pos => {\n return isBr$6(pos.getNode());\n }).getOr(false);\n }\n };\n const isAnchorLink = elm => {\n return elm && elm.nodeName === 'A' && 'href' in elm;\n };\n const isInsideAnchor = location => {\n return location.fold(never, isAnchorLink, isAnchorLink, never);\n };\n const readInlineAnchorLocation = editor => {\n const isInlineTarget$1 = curry(isInlineTarget, editor);\n const position = CaretPosition.fromRangeStart(editor.selection.getRng());\n return readLocation(isInlineTarget$1, editor.getBody(), position).filter(isInsideAnchor);\n };\n const insertBrOutsideAnchor = (editor, location) => {\n location.fold(noop, curry(insertBrBefore, editor), curry(insertBrAfter, editor), noop);\n };\n const insert$2 = (editor, evt) => {\n const anchorLocation = readInlineAnchorLocation(editor);\n if (anchorLocation.isSome()) {\n anchorLocation.each(curry(insertBrOutsideAnchor, editor));\n } else {\n insertBrAtCaret(editor, evt);\n }\n };\n const fakeEventName = 'insertLineBreak';\n const linebreak = {\n insert: insert$2,\n fakeEventName\n };\n\n const matchesSelector = (editor, selector) => {\n return getParentBlock$1(editor).filter(parentBlock => {\n return selector.length > 0 && is$1(SugarElement.fromDom(parentBlock), selector);\n }).isSome();\n };\n const shouldInsertBr = editor => {\n return matchesSelector(editor, getBrNewLineSelector(editor));\n };\n const shouldBlockNewLine$1 = editor => {\n return matchesSelector(editor, getNoNewLineSelector(editor));\n };\n\n const newLineAction = Adt.generate([\n { br: [] },\n { block: [] },\n { none: [] }\n ]);\n const shouldBlockNewLine = (editor, _shiftKey) => {\n return shouldBlockNewLine$1(editor);\n };\n const inListBlock = requiredState => {\n return (editor, _shiftKey) => {\n return isListItemParentBlock(editor) === requiredState;\n };\n };\n const inBlock = (blockName, requiredState) => (editor, _shiftKey) => {\n const state = getParentBlockName(editor) === blockName.toUpperCase();\n return state === requiredState;\n };\n const inCefBlock = editor => {\n const editableRoot = getEditableRoot(editor.dom, editor.selection.getStart());\n return isNullable(editableRoot);\n };\n const inPreBlock = requiredState => inBlock('pre', requiredState);\n const inSummaryBlock = () => inBlock('summary', true);\n const shouldPutBrInPre = requiredState => {\n return (editor, _shiftKey) => {\n return shouldPutBrInPre$1(editor) === requiredState;\n };\n };\n const inBrContext = (editor, _shiftKey) => {\n return shouldInsertBr(editor);\n };\n const hasShiftKey = (_editor, shiftKey) => {\n return shiftKey;\n };\n const canInsertIntoEditableRoot = editor => {\n const forcedRootBlock = getForcedRootBlock(editor);\n const rootEditable = getEditableRoot(editor.dom, editor.selection.getStart());\n return isNonNullable(rootEditable) && editor.schema.isValidChild(rootEditable.nodeName, forcedRootBlock);\n };\n const isInRootWithEmptyOrCEF = editor => {\n const rng = editor.selection.getRng();\n const start = SugarElement.fromDom(rng.startContainer);\n const child = child$1(start, rng.startOffset);\n const isCefOpt = child.map(element => isHTMLElement$1(element) && !isEditable$2(element));\n return rng.collapsed && isCefOpt.getOr(true);\n };\n const match = (predicates, action) => {\n return (editor, shiftKey) => {\n const isMatch = foldl(predicates, (res, p) => {\n return res && p(editor, shiftKey);\n }, true);\n return isMatch ? Optional.some(action) : Optional.none();\n };\n };\n const getAction = (editor, evt) => {\n return evaluateUntil([\n match([shouldBlockNewLine], newLineAction.none()),\n match([\n inPreBlock(true),\n inCefBlock\n ], newLineAction.none()),\n match([inSummaryBlock()], newLineAction.br()),\n match([\n inPreBlock(true),\n shouldPutBrInPre(false),\n hasShiftKey\n ], newLineAction.br()),\n match([\n inPreBlock(true),\n shouldPutBrInPre(false)\n ], newLineAction.block()),\n match([\n inPreBlock(true),\n shouldPutBrInPre(true),\n hasShiftKey\n ], newLineAction.block()),\n match([\n inPreBlock(true),\n shouldPutBrInPre(true)\n ], newLineAction.br()),\n match([\n inListBlock(true),\n hasShiftKey\n ], newLineAction.br()),\n match([inListBlock(true)], newLineAction.block()),\n match([inBrContext], newLineAction.br()),\n match([hasShiftKey], newLineAction.br()),\n match([canInsertIntoEditableRoot], newLineAction.block()),\n match([isInRootWithEmptyOrCEF], newLineAction.block())\n ], [\n editor,\n !!(evt && evt.shiftKey)\n ]).getOr(newLineAction.none());\n };\n\n const insertBreak = (breakType, editor, evt) => {\n if (editor.mode.isReadOnly()) {\n return;\n }\n if (!editor.selection.isCollapsed()) {\n execEditorDeleteCommand(editor);\n }\n if (isNonNullable(evt)) {\n const event = fireBeforeInputEvent(editor, breakType.fakeEventName);\n if (event.isDefaultPrevented()) {\n return;\n }\n }\n breakType.insert(editor, evt);\n if (isNonNullable(evt)) {\n fireInputEvent(editor, breakType.fakeEventName);\n }\n };\n const insert$1 = (editor, evt) => {\n if (editor.mode.isReadOnly()) {\n return;\n }\n const br = () => insertBreak(linebreak, editor, evt);\n const block = () => insertBreak(blockbreak, editor, evt);\n const logicalAction = getAction(editor, evt);\n switch (getNewlineBehavior(editor)) {\n case 'linebreak':\n logicalAction.fold(br, br, noop);\n break;\n case 'block':\n logicalAction.fold(block, block, noop);\n break;\n case 'invert':\n logicalAction.fold(block, br, noop);\n break;\n default:\n logicalAction.fold(br, block, noop);\n break;\n }\n };\n\n const platform$1 = detect$1();\n const isIOSSafari = platform$1.os.isiOS() && platform$1.browser.isSafari();\n const handleEnterKeyEvent = (editor, event) => {\n if (event.isDefaultPrevented()) {\n return;\n }\n event.preventDefault();\n endTypingLevelIgnoreLocks(editor.undoManager);\n editor.undoManager.transact(() => {\n insert$1(editor, event);\n });\n };\n const isCaretAfterKoreanCharacter = rng => {\n if (!rng.collapsed) {\n return false;\n }\n const startContainer = rng.startContainer;\n if (isText$b(startContainer)) {\n const koreanCharRegex = /^[\\uAC00-\\uD7AF\\u1100-\\u11FF\\u3130-\\u318F\\uA960-\\uA97F\\uD7B0-\\uD7FF]$/;\n const char = startContainer.data.charAt(rng.startOffset - 1);\n return koreanCharRegex.test(char);\n } else {\n return false;\n }\n };\n const setup$i = editor => {\n let iOSSafariKeydownBookmark = Optional.none();\n const iOSSafariKeydownOverride = editor => {\n iOSSafariKeydownBookmark = Optional.some(editor.selection.getBookmark());\n editor.undoManager.add();\n };\n const iOSSafariKeyupOverride = (editor, event) => {\n editor.undoManager.undo();\n iOSSafariKeydownBookmark.fold(noop, b => editor.selection.moveToBookmark(b));\n handleEnterKeyEvent(editor, event);\n iOSSafariKeydownBookmark = Optional.none();\n };\n editor.on('keydown', event => {\n if (event.keyCode === VK.ENTER) {\n if (isIOSSafari && isCaretAfterKoreanCharacter(editor.selection.getRng())) {\n iOSSafariKeydownOverride(editor);\n } else {\n handleEnterKeyEvent(editor, event);\n }\n }\n });\n editor.on('keyup', event => {\n if (event.keyCode === VK.ENTER) {\n iOSSafariKeydownBookmark.each(() => iOSSafariKeyupOverride(editor, event));\n }\n });\n };\n\n const executeKeydownOverride$2 = (editor, caret, evt) => {\n const isMac = Env.os.isMacOS() || Env.os.isiOS();\n execute([\n {\n keyCode: VK.END,\n action: action(moveToLineEndPoint$1, editor, true)\n },\n {\n keyCode: VK.HOME,\n action: action(moveToLineEndPoint$1, editor, false)\n },\n ...!isMac ? [\n {\n keyCode: VK.HOME,\n action: action(selectToEndPoint, editor, false),\n ctrlKey: true,\n shiftKey: true\n },\n {\n keyCode: VK.END,\n action: action(selectToEndPoint, editor, true),\n ctrlKey: true,\n shiftKey: true\n }\n ] : [],\n {\n keyCode: VK.END,\n action: action(moveToLineEndPoint, editor, true)\n },\n {\n keyCode: VK.HOME,\n action: action(moveToLineEndPoint, editor, false)\n },\n {\n keyCode: VK.END,\n action: action(moveToLineEndPoint$2, editor, true, caret)\n },\n {\n keyCode: VK.HOME,\n action: action(moveToLineEndPoint$2, editor, false, caret)\n }\n ], evt).each(_ => {\n evt.preventDefault();\n });\n };\n const setup$h = (editor, caret) => {\n editor.on('keydown', evt => {\n if (!evt.isDefaultPrevented()) {\n executeKeydownOverride$2(editor, caret, evt);\n }\n });\n };\n\n const setup$g = editor => {\n editor.on('input', e => {\n if (!e.isComposing) {\n normalizeNbspsInEditor(editor);\n }\n });\n };\n\n const platform = detect$1();\n const executeKeyupAction = (editor, caret, evt) => {\n execute([\n {\n keyCode: VK.PAGE_UP,\n action: action(moveToLineEndPoint$2, editor, false, caret)\n },\n {\n keyCode: VK.PAGE_DOWN,\n action: action(moveToLineEndPoint$2, editor, true, caret)\n }\n ], evt);\n };\n const stopImmediatePropagation = e => e.stopImmediatePropagation();\n const isPageUpDown = evt => evt.keyCode === VK.PAGE_UP || evt.keyCode === VK.PAGE_DOWN;\n const setNodeChangeBlocker = (blocked, editor, block) => {\n if (block && !blocked.get()) {\n editor.on('NodeChange', stopImmediatePropagation, true);\n } else if (!block && blocked.get()) {\n editor.off('NodeChange', stopImmediatePropagation);\n }\n blocked.set(block);\n };\n const setup$f = (editor, caret) => {\n if (platform.os.isMacOS()) {\n return;\n }\n const blocked = Cell(false);\n editor.on('keydown', evt => {\n if (isPageUpDown(evt)) {\n setNodeChangeBlocker(blocked, editor, true);\n }\n });\n editor.on('keyup', evt => {\n if (!evt.isDefaultPrevented()) {\n executeKeyupAction(editor, caret, evt);\n }\n if (isPageUpDown(evt) && blocked.get()) {\n setNodeChangeBlocker(blocked, editor, false);\n editor.nodeChanged();\n }\n });\n };\n\n const isValidContainer = (root, container) => root === container || root.contains(container);\n const isInEditableRange = (editor, range) => {\n if (!isValidContainer(editor.getBody(), range.startContainer) || !isValidContainer(editor.getBody(), range.endContainer)) {\n return true;\n }\n return isEditableRange(editor.dom, range);\n };\n const setup$e = editor => {\n editor.on('beforeinput', e => {\n if (!editor.selection.isEditable() || exists(e.getTargetRanges(), rng => !isInEditableRange(editor, rng))) {\n e.preventDefault();\n }\n });\n };\n\n const insertTextAtPosition = (text, pos) => {\n const container = pos.container();\n const offset = pos.offset();\n if (isText$b(container)) {\n container.insertData(offset, text);\n return Optional.some(CaretPosition(container, offset + text.length));\n } else {\n return getElementFromPosition(pos).map(elm => {\n const textNode = SugarElement.fromText(text);\n if (pos.isAtEnd()) {\n after$4(elm, textNode);\n } else {\n before$3(elm, textNode);\n }\n return CaretPosition(textNode.dom, text.length);\n });\n }\n };\n const insertNbspAtPosition = curry(insertTextAtPosition, nbsp);\n const insertSpaceAtPosition = curry(insertTextAtPosition, ' ');\n\n const insertSpaceOrNbspAtPosition = (root, pos, schema) => needsToHaveNbsp(root, pos, schema) ? insertNbspAtPosition(pos) : insertSpaceAtPosition(pos);\n const locationToCaretPosition = root => location => location.fold(element => prevPosition(root.dom, CaretPosition.before(element)), element => firstPositionIn(element), element => lastPositionIn(element), element => nextPosition(root.dom, CaretPosition.after(element)));\n const insertInlineBoundarySpaceOrNbsp = (root, pos, schema) => checkPos => needsToHaveNbsp(root, checkPos, schema) ? insertNbspAtPosition(pos) : insertSpaceAtPosition(pos);\n const setSelection = editor => pos => {\n editor.selection.setRng(pos.toRange());\n editor.nodeChanged();\n };\n const isInsideSummary = (domUtils, node) => domUtils.isEditable(domUtils.getParent(node, 'summary'));\n const insertSpaceOrNbspAtSelection = editor => {\n const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n const root = SugarElement.fromDom(editor.getBody());\n if (editor.selection.isCollapsed()) {\n const isInlineTarget$1 = curry(isInlineTarget, editor);\n const caretPosition = CaretPosition.fromRangeStart(editor.selection.getRng());\n return readLocation(isInlineTarget$1, editor.getBody(), caretPosition).bind(locationToCaretPosition(root)).map(checkPos => () => insertInlineBoundarySpaceOrNbsp(root, pos, editor.schema)(checkPos).each(setSelection(editor)));\n } else {\n return Optional.none();\n }\n };\n const insertSpaceInSummaryAtSelectionOnFirefox = editor => {\n const insertSpaceThunk = () => {\n const root = SugarElement.fromDom(editor.getBody());\n if (!editor.selection.isCollapsed()) {\n editor.getDoc().execCommand('Delete');\n }\n const pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n insertSpaceOrNbspAtPosition(root, pos, editor.schema).each(setSelection(editor));\n };\n return someIf(Env.browser.isFirefox() && editor.selection.isEditable() && isInsideSummary(editor.dom, editor.selection.getRng().startContainer), insertSpaceThunk);\n };\n\n const executeKeydownOverride$1 = (editor, evt) => {\n executeWithDelayedAction([\n {\n keyCode: VK.SPACEBAR,\n action: action(insertSpaceOrNbspAtSelection, editor)\n },\n {\n keyCode: VK.SPACEBAR,\n action: action(insertSpaceInSummaryAtSelectionOnFirefox, editor)\n }\n ], evt).each(applyAction => {\n evt.preventDefault();\n const event = fireBeforeInputEvent(editor, 'insertText', { data: ' ' });\n if (!event.isDefaultPrevented()) {\n applyAction();\n fireInputEvent(editor, 'insertText', { data: ' ' });\n }\n });\n };\n const setup$d = editor => {\n editor.on('keydown', evt => {\n if (!evt.isDefaultPrevented()) {\n executeKeydownOverride$1(editor, evt);\n }\n });\n };\n\n const tableTabNavigation = editor => {\n if (hasTableTabNavigation(editor)) {\n return [\n {\n keyCode: VK.TAB,\n action: action(handleTab, editor, true)\n },\n {\n keyCode: VK.TAB,\n shiftKey: true,\n action: action(handleTab, editor, false)\n }\n ];\n } else {\n return [];\n }\n };\n const executeKeydownOverride = (editor, evt) => {\n execute([...tableTabNavigation(editor)], evt).each(_ => {\n evt.preventDefault();\n });\n };\n const setup$c = editor => {\n editor.on('keydown', evt => {\n if (!evt.isDefaultPrevented()) {\n executeKeydownOverride(editor, evt);\n }\n });\n };\n\n const setup$b = editor => {\n editor.addShortcut('Meta+P', '', 'mcePrint');\n setup$k(editor);\n if (isRtc(editor)) {\n return Cell(null);\n } else {\n const caret = setupSelectedState(editor);\n setup$e(editor);\n setup$m(editor);\n setup$l(editor, caret);\n setup$j(editor, caret);\n setup$i(editor);\n setup$d(editor);\n setup$g(editor);\n setup$c(editor);\n setup$h(editor, caret);\n setup$f(editor, caret);\n return caret;\n }\n };\n\n class NodeChange {\n constructor(editor) {\n this.lastPath = [];\n this.editor = editor;\n let lastRng;\n const self = this;\n if (!('onselectionchange' in editor.getDoc())) {\n editor.on('NodeChange click mouseup keyup focus', e => {\n const nativeRng = editor.selection.getRng();\n const fakeRng = {\n startContainer: nativeRng.startContainer,\n startOffset: nativeRng.startOffset,\n endContainer: nativeRng.endContainer,\n endOffset: nativeRng.endOffset\n };\n if (e.type === 'nodechange' || !isEq$4(fakeRng, lastRng)) {\n editor.dispatch('SelectionChange');\n }\n lastRng = fakeRng;\n });\n }\n editor.on('contextmenu', () => {\n store(editor);\n editor.dispatch('SelectionChange');\n });\n editor.on('SelectionChange', () => {\n const startElm = editor.selection.getStart(true);\n if (!startElm) {\n return;\n }\n if (hasAnyRanges(editor) && !self.isSameElementPath(startElm) && editor.dom.isChildOf(startElm, editor.getBody())) {\n editor.nodeChanged({ selectionChange: true });\n }\n });\n editor.on('mouseup', e => {\n if (!e.isDefaultPrevented() && hasAnyRanges(editor)) {\n if (editor.selection.getNode().nodeName === 'IMG') {\n Delay.setEditorTimeout(editor, () => {\n editor.nodeChanged();\n });\n } else {\n editor.nodeChanged();\n }\n }\n });\n }\n nodeChanged(args = {}) {\n const editor = this.editor;\n const selection = editor.selection;\n let node;\n if (editor.initialized && selection && !shouldDisableNodeChange(editor) && !isDisabled$1(editor)) {\n const root = editor.getBody();\n node = selection.getStart(true) || root;\n if (node.ownerDocument !== editor.getDoc() || !editor.dom.isChildOf(node, root)) {\n node = root;\n }\n const parents = [];\n editor.dom.getParent(node, node => {\n if (node === root) {\n return true;\n } else {\n parents.push(node);\n return false;\n }\n });\n editor.dispatch('NodeChange', {\n ...args,\n element: node,\n parents\n });\n }\n }\n isSameElementPath(startElm) {\n let i;\n const editor = this.editor;\n const currentPath = reverse(editor.dom.getParents(startElm, always, editor.getBody()));\n if (currentPath.length === this.lastPath.length) {\n for (i = currentPath.length; i >= 0; i--) {\n if (currentPath[i] !== this.lastPath[i]) {\n break;\n }\n }\n if (i === -1) {\n this.lastPath = currentPath;\n return true;\n }\n }\n this.lastPath = currentPath;\n return false;\n }\n }\n\n const imageId = generate$1('image');\n const getDragImage = transfer => {\n const dt = transfer;\n return Optional.from(dt[imageId]);\n };\n const setDragImage = (transfer, imageData) => {\n const dt = transfer;\n dt[imageId] = imageData;\n };\n\n const eventId = generate$1('event');\n const getEvent = transfer => {\n const dt = transfer;\n return Optional.from(dt[eventId]);\n };\n const mkSetEventFn = type => transfer => {\n const dt = transfer;\n dt[eventId] = type;\n };\n const setEvent = (transfer, type) => mkSetEventFn(type)(transfer);\n const setDragstartEvent = mkSetEventFn(0);\n const setDropEvent = mkSetEventFn(2);\n const setDragendEvent = mkSetEventFn(1);\n const checkEvent = expectedType => transfer => {\n const dt = transfer;\n return Optional.from(dt[eventId]).exists(type => type === expectedType);\n };\n const isInDragStartEvent = checkEvent(0);\n\n const createEmptyFileList = () => Object.freeze({\n length: 0,\n item: _ => null\n });\n\n const modeId = generate$1('mode');\n const getMode = transfer => {\n const dt = transfer;\n return Optional.from(dt[modeId]);\n };\n const mkSetModeFn = mode => transfer => {\n const dt = transfer;\n dt[modeId] = mode;\n };\n const setMode$1 = (transfer, mode) => mkSetModeFn(mode)(transfer);\n const setReadWriteMode = mkSetModeFn(0);\n const setReadOnlyMode = mkSetModeFn(2);\n const setProtectedMode = mkSetModeFn(1);\n const checkMode = expectedMode => transfer => {\n const dt = transfer;\n return Optional.from(dt[modeId]).exists(mode => mode === expectedMode);\n };\n const isInReadWriteMode = checkMode(0);\n const isInProtectedMode = checkMode(1);\n\n const normalizeItems = (dataTransfer, itemsImpl) => ({\n ...itemsImpl,\n get length() {\n return itemsImpl.length;\n },\n add: (data, type) => {\n if (isInReadWriteMode(dataTransfer)) {\n if (isString(data)) {\n if (!isUndefined(type)) {\n return itemsImpl.add(data, type);\n }\n } else {\n return itemsImpl.add(data);\n }\n }\n return null;\n },\n remove: idx => {\n if (isInReadWriteMode(dataTransfer)) {\n itemsImpl.remove(idx);\n }\n },\n clear: () => {\n if (isInReadWriteMode(dataTransfer)) {\n itemsImpl.clear();\n }\n }\n });\n\n const validDropEffects = [\n 'none',\n 'copy',\n 'link',\n 'move'\n ];\n const validEffectAlloweds = [\n 'none',\n 'copy',\n 'copyLink',\n 'copyMove',\n 'link',\n 'linkMove',\n 'move',\n 'all',\n 'uninitialized'\n ];\n const createDataTransfer = () => {\n const dataTransferImpl = new window.DataTransfer();\n let dropEffect = 'move';\n let effectAllowed = 'all';\n const dataTransfer = {\n get dropEffect() {\n return dropEffect;\n },\n set dropEffect(effect) {\n if (contains$2(validDropEffects, effect)) {\n dropEffect = effect;\n }\n },\n get effectAllowed() {\n return effectAllowed;\n },\n set effectAllowed(allowed) {\n if (isInDragStartEvent(dataTransfer) && contains$2(validEffectAlloweds, allowed)) {\n effectAllowed = allowed;\n }\n },\n get items() {\n return normalizeItems(dataTransfer, dataTransferImpl.items);\n },\n get files() {\n if (isInProtectedMode(dataTransfer)) {\n return createEmptyFileList();\n } else {\n return dataTransferImpl.files;\n }\n },\n get types() {\n return dataTransferImpl.types;\n },\n setDragImage: (image, x, y) => {\n if (isInReadWriteMode(dataTransfer)) {\n setDragImage(dataTransfer, {\n image,\n x,\n y\n });\n dataTransferImpl.setDragImage(image, x, y);\n }\n },\n getData: format => {\n if (isInProtectedMode(dataTransfer)) {\n return '';\n } else {\n return dataTransferImpl.getData(format);\n }\n },\n setData: (format, data) => {\n if (isInReadWriteMode(dataTransfer)) {\n dataTransferImpl.setData(format, data);\n }\n },\n clearData: format => {\n if (isInReadWriteMode(dataTransfer)) {\n dataTransferImpl.clearData(format);\n }\n }\n };\n setReadWriteMode(dataTransfer);\n return dataTransfer;\n };\n const cloneDataTransfer = original => {\n const clone = createDataTransfer();\n const originalMode = getMode(original);\n setReadOnlyMode(original);\n setDragstartEvent(clone);\n clone.dropEffect = original.dropEffect;\n clone.effectAllowed = original.effectAllowed;\n getDragImage(original).each(imageData => clone.setDragImage(imageData.image, imageData.x, imageData.y));\n each$e(original.types, type => {\n if (type !== 'Files') {\n clone.setData(type, original.getData(type));\n }\n });\n each$e(original.files, file => clone.items.add(file));\n getEvent(original).each(type => {\n setEvent(clone, type);\n });\n originalMode.each(mode => {\n setMode$1(original, mode);\n setMode$1(clone, mode);\n });\n return clone;\n };\n\n const getHtmlData = dataTransfer => {\n const html = dataTransfer.getData('text/html');\n return html === '' ? Optional.none() : Optional.some(html);\n };\n const setHtmlData = (dataTransfer, html) => dataTransfer.setData('text/html', html);\n\n const internalMimeType = 'x-tinymce/html';\n const internalHtmlMime = constant(internalMimeType);\n const internalMark = '';\n const mark = html => internalMark + html;\n const unmark = html => html.replace(internalMark, '');\n const isMarked = html => html.indexOf(internalMark) !== -1;\n\n const isPlainText = text => {\n return !/<(?:\\/?(?!(?:div|p|br|span)>)\\w+|(?:(?!(?:span style=\"white-space:\\s?pre;?\">)|br\\s?\\/>))\\w+\\s[^>]+)>/i.test(text);\n };\n const openContainer = (rootTag, rootAttrs) => {\n let tag = '<' + rootTag;\n const attrs = mapToArray(rootAttrs, (value, key) => key + '=\"' + Entities.encodeAllRaw(value) + '\"');\n if (attrs.length) {\n tag += ' ' + attrs.join(' ');\n }\n return tag + '>';\n };\n const toBlockElements = (text, rootTag, rootAttrs) => {\n const blocks = text.split(/\\n\\n/);\n const tagOpen = openContainer(rootTag, rootAttrs);\n const tagClose = '';\n const paragraphs = map$3(blocks, p => {\n return p.split(/\\n/).join('
    ');\n });\n const stitch = p => {\n return tagOpen + p + tagClose;\n };\n return paragraphs.length === 1 ? paragraphs[0] : map$3(paragraphs, stitch).join('');\n };\n\n const pasteBinDefaultContent = '%MCEPASTEBIN%';\n const create$6 = (editor, lastRngCell) => {\n const {dom, selection} = editor;\n const body = editor.getBody();\n lastRngCell.set(selection.getRng());\n const pasteBinElm = dom.add(editor.getBody(), 'div', {\n 'id': 'mcepastebin',\n 'class': 'mce-pastebin',\n 'contentEditable': true,\n 'data-mce-bogus': 'all',\n 'style': 'position: fixed; top: 50%; width: 10px; height: 10px; overflow: hidden; opacity: 0'\n }, pasteBinDefaultContent);\n if (Env.browser.isFirefox()) {\n dom.setStyle(pasteBinElm, 'left', dom.getStyle(body, 'direction', true) === 'rtl' ? 65535 : -65535);\n }\n dom.bind(pasteBinElm, 'beforedeactivate focusin focusout', e => {\n e.stopPropagation();\n });\n pasteBinElm.focus();\n selection.select(pasteBinElm, true);\n };\n const remove = (editor, lastRngCell) => {\n const dom = editor.dom;\n if (getEl(editor)) {\n let pasteBinClone;\n const lastRng = lastRngCell.get();\n while (pasteBinClone = getEl(editor)) {\n dom.remove(pasteBinClone);\n dom.unbind(pasteBinClone);\n }\n if (lastRng) {\n editor.selection.setRng(lastRng);\n }\n }\n lastRngCell.set(null);\n };\n const getEl = editor => editor.dom.get('mcepastebin');\n const isPasteBin = elm => isNonNullable(elm) && elm.id === 'mcepastebin';\n const getHtml = editor => {\n const dom = editor.dom;\n const copyAndRemove = (toElm, fromElm) => {\n toElm.appendChild(fromElm);\n dom.remove(fromElm, true);\n };\n const [pasteBinElm, ...pasteBinClones] = filter$5(editor.getBody().childNodes, isPasteBin);\n each$e(pasteBinClones, pasteBinClone => {\n copyAndRemove(pasteBinElm, pasteBinClone);\n });\n const dirtyWrappers = dom.select('div[id=mcepastebin]', pasteBinElm);\n for (let i = dirtyWrappers.length - 1; i >= 0; i--) {\n const cleanWrapper = dom.create('div');\n pasteBinElm.insertBefore(cleanWrapper, dirtyWrappers[i]);\n copyAndRemove(cleanWrapper, dirtyWrappers[i]);\n }\n return pasteBinElm ? pasteBinElm.innerHTML : '';\n };\n const isDefaultPasteBinContent = content => content === pasteBinDefaultContent;\n const PasteBin = editor => {\n const lastRng = Cell(null);\n return {\n create: () => create$6(editor, lastRng),\n remove: () => remove(editor, lastRng),\n getEl: () => getEl(editor),\n getHtml: () => getHtml(editor),\n getLastRng: lastRng.get\n };\n };\n\n const filter$1 = (content, items) => {\n Tools.each(items, v => {\n if (is$4(v, RegExp)) {\n content = content.replace(v, '');\n } else {\n content = content.replace(v[0], v[1]);\n }\n });\n return content;\n };\n const innerText = html => {\n const schema = Schema();\n const domParser = DomParser({}, schema);\n let text = '';\n const voidElements = schema.getVoidElements();\n const ignoreElements = Tools.makeMap('script noscript style textarea video audio iframe object', ' ');\n const blockElements = schema.getBlockElements();\n const walk = node => {\n const name = node.name, currentNode = node;\n if (name === 'br') {\n text += '\\n';\n return;\n }\n if (name === 'wbr') {\n return;\n }\n if (voidElements[name]) {\n text += ' ';\n }\n if (ignoreElements[name]) {\n text += ' ';\n return;\n }\n if (node.type === 3) {\n text += node.value;\n }\n if (!(node.name in schema.getVoidElements())) {\n let currentNode = node.firstChild;\n if (currentNode) {\n do {\n walk(currentNode);\n } while (currentNode = currentNode.next);\n }\n }\n if (blockElements[name] && currentNode.next) {\n text += '\\n';\n if (name === 'p') {\n text += '\\n';\n }\n }\n };\n html = filter$1(html, [//g]);\n walk(domParser.parse(html));\n return text;\n };\n const trimHtml = html => {\n const trimSpaces = (all, s1, s2) => {\n if (!s1 && !s2) {\n return ' ';\n }\n return nbsp;\n };\n html = filter$1(html, [\n /^[\\s\\S]*]*>\\s*|\\s*<\\/body[^>]*>[\\s\\S]*$/ig,\n /|/g,\n [\n /( ?)\\u00a0<\\/span>( ?)/g,\n trimSpaces\n ],\n /
    /g,\n /
    $/i\n ]);\n return html;\n };\n const createIdGenerator = prefix => {\n let count = 0;\n return () => {\n return prefix + count++;\n };\n };\n const getImageMimeType = ext => {\n const lowerExt = ext.toLowerCase();\n const mimeOverrides = {\n jpg: 'jpeg',\n jpe: 'jpeg',\n jfi: 'jpeg',\n jif: 'jpeg',\n jfif: 'jpeg',\n pjpeg: 'jpeg',\n pjp: 'jpeg',\n svg: 'svg+xml'\n };\n return Tools.hasOwn(mimeOverrides, lowerExt) ? 'image/' + mimeOverrides[lowerExt] : 'image/' + lowerExt;\n };\n\n const preProcess = (editor, html) => {\n const parser = DomParser({\n sanitize: shouldSanitizeXss(editor),\n sandbox_iframes: shouldSandboxIframes(editor),\n sandbox_iframes_exclusions: getSandboxIframesExclusions(editor),\n convert_unsafe_embeds: shouldConvertUnsafeEmbeds(editor)\n }, editor.schema);\n parser.addNodeFilter('meta', nodes => {\n Tools.each(nodes, node => {\n node.remove();\n });\n });\n const fragment = parser.parse(html, {\n forced_root_block: false,\n isRootContent: true\n });\n return HtmlSerializer({ validate: true }, editor.schema).serialize(fragment);\n };\n const processResult = (content, cancelled) => ({\n content,\n cancelled\n });\n const postProcessFilter = (editor, html, internal) => {\n const tempBody = editor.dom.create('div', { style: 'display:none' }, html);\n const postProcessArgs = firePastePostProcess(editor, tempBody, internal);\n return processResult(postProcessArgs.node.innerHTML, postProcessArgs.isDefaultPrevented());\n };\n const filterContent = (editor, content, internal) => {\n const preProcessArgs = firePastePreProcess(editor, content, internal);\n const filteredContent = preProcess(editor, preProcessArgs.content);\n if (editor.hasEventListeners('PastePostProcess') && !preProcessArgs.isDefaultPrevented()) {\n return postProcessFilter(editor, filteredContent, internal);\n } else {\n return processResult(filteredContent, preProcessArgs.isDefaultPrevented());\n }\n };\n const process = (editor, html, internal) => {\n return filterContent(editor, html, internal);\n };\n\n const pasteHtml$1 = (editor, html) => {\n editor.insertContent(html, {\n merge: shouldPasteMergeFormats(editor),\n paste: true\n });\n return true;\n };\n const isAbsoluteUrl = url => /^https?:\\/\\/[\\w\\-\\/+=.,!;:&%@^~(){}?#]+$/i.test(url);\n const isImageUrl = (editor, url) => {\n return isAbsoluteUrl(url) && exists(getAllowedImageFileTypes(editor), type => endsWith(url.toLowerCase(), `.${ type.toLowerCase() }`));\n };\n const createImage = (editor, url, pasteHtmlFn) => {\n editor.undoManager.extra(() => {\n pasteHtmlFn(editor, url);\n }, () => {\n editor.insertContent('');\n });\n return true;\n };\n const createLink = (editor, url, pasteHtmlFn) => {\n editor.undoManager.extra(() => {\n pasteHtmlFn(editor, url);\n }, () => {\n editor.execCommand('mceInsertLink', false, url);\n });\n return true;\n };\n const linkSelection = (editor, html, pasteHtmlFn) => !editor.selection.isCollapsed() && isAbsoluteUrl(html) ? createLink(editor, html, pasteHtmlFn) : false;\n const insertImage = (editor, html, pasteHtmlFn) => isImageUrl(editor, html) ? createImage(editor, html, pasteHtmlFn) : false;\n const smartInsertContent = (editor, html) => {\n Tools.each([\n linkSelection,\n insertImage,\n pasteHtml$1\n ], action => {\n return !action(editor, html, pasteHtml$1);\n });\n };\n const insertContent = (editor, html, pasteAsText) => {\n if (pasteAsText || !isSmartPasteEnabled(editor)) {\n pasteHtml$1(editor, html);\n } else {\n smartInsertContent(editor, html);\n }\n };\n\n const uniqueId = createIdGenerator('mceclip');\n const createPasteDataTransfer = html => {\n const dataTransfer = createDataTransfer();\n setHtmlData(dataTransfer, html);\n setReadOnlyMode(dataTransfer);\n return dataTransfer;\n };\n const doPaste = (editor, content, internal, pasteAsText, shouldSimulateInputEvent) => {\n const res = process(editor, content, internal);\n if (!res.cancelled) {\n const content = res.content;\n const doPasteAction = () => insertContent(editor, content, pasteAsText);\n if (shouldSimulateInputEvent) {\n const args = fireBeforeInputEvent(editor, 'insertFromPaste', { dataTransfer: createPasteDataTransfer(content) });\n if (!args.isDefaultPrevented()) {\n doPasteAction();\n fireInputEvent(editor, 'insertFromPaste');\n }\n } else {\n doPasteAction();\n }\n }\n };\n const pasteHtml = (editor, html, internalFlag, shouldSimulateInputEvent) => {\n const internal = internalFlag ? internalFlag : isMarked(html);\n doPaste(editor, unmark(html), internal, false, shouldSimulateInputEvent);\n };\n const pasteText = (editor, text, shouldSimulateInputEvent) => {\n const encodedText = editor.dom.encode(text).replace(/\\r\\n/g, '\\n');\n const normalizedText = normalize$4(encodedText, getPasteTabSpaces(editor));\n const html = toBlockElements(normalizedText, getForcedRootBlock(editor), getForcedRootBlockAttrs(editor));\n doPaste(editor, html, false, true, shouldSimulateInputEvent);\n };\n const getDataTransferItems = dataTransfer => {\n const items = {};\n if (dataTransfer && dataTransfer.types) {\n for (let i = 0; i < dataTransfer.types.length; i++) {\n const contentType = dataTransfer.types[i];\n try {\n items[contentType] = dataTransfer.getData(contentType);\n } catch (_a) {\n items[contentType] = '';\n }\n }\n }\n return items;\n };\n const hasContentType = (clipboardContent, mimeType) => mimeType in clipboardContent && clipboardContent[mimeType].length > 0;\n const hasHtmlOrText = content => hasContentType(content, 'text/html') || hasContentType(content, 'text/plain');\n const extractFilename = (editor, str) => {\n const m = str.match(/([\\s\\S]+?)(?:\\.[a-z0-9.]+)$/i);\n return isNonNullable(m) ? editor.dom.encode(m[1]) : undefined;\n };\n const createBlobInfo = (editor, blobCache, file, base64) => {\n const id = uniqueId();\n const useFileName = shouldReuseFileName(editor) && isNonNullable(file.name);\n const name = useFileName ? extractFilename(editor, file.name) : id;\n const filename = useFileName ? file.name : undefined;\n const blobInfo = blobCache.create(id, file, base64, name, filename);\n blobCache.add(blobInfo);\n return blobInfo;\n };\n const pasteImage = (editor, imageItem) => {\n parseDataUri(imageItem.uri).each(({data, type, base64Encoded}) => {\n const base64 = base64Encoded ? data : btoa(data);\n const file = imageItem.file;\n const blobCache = editor.editorUpload.blobCache;\n const existingBlobInfo = blobCache.getByData(base64, type);\n const blobInfo = existingBlobInfo !== null && existingBlobInfo !== void 0 ? existingBlobInfo : createBlobInfo(editor, blobCache, file, base64);\n pasteHtml(editor, ``, false, true);\n });\n };\n const isClipboardEvent = event => event.type === 'paste';\n const readFilesAsDataUris = items => Promise.all(map$3(items, file => {\n return blobToDataUri(file).then(uri => ({\n file,\n uri\n }));\n }));\n const isImage = editor => {\n const allowedExtensions = getAllowedImageFileTypes(editor);\n return file => startsWith(file.type, 'image/') && exists(allowedExtensions, extension => {\n return getImageMimeType(extension) === file.type;\n });\n };\n const getImagesFromDataTransfer = (editor, dataTransfer) => {\n const items = dataTransfer.items ? bind$3(from(dataTransfer.items), item => {\n return item.kind === 'file' ? [item.getAsFile()] : [];\n }) : [];\n const files = dataTransfer.files ? from(dataTransfer.files) : [];\n return filter$5(items.length > 0 ? items : files, isImage(editor));\n };\n const pasteImageData = (editor, e, rng) => {\n const dataTransfer = isClipboardEvent(e) ? e.clipboardData : e.dataTransfer;\n if (shouldPasteDataImages(editor) && dataTransfer) {\n const images = getImagesFromDataTransfer(editor, dataTransfer);\n if (images.length > 0) {\n e.preventDefault();\n readFilesAsDataUris(images).then(fileResults => {\n if (rng) {\n editor.selection.setRng(rng);\n }\n each$e(fileResults, result => {\n pasteImage(editor, result);\n });\n });\n return true;\n }\n }\n return false;\n };\n const isBrokenAndroidClipboardEvent = e => {\n var _a, _b;\n return Env.os.isAndroid() && ((_b = (_a = e.clipboardData) === null || _a === void 0 ? void 0 : _a.items) === null || _b === void 0 ? void 0 : _b.length) === 0;\n };\n const isKeyboardPasteEvent = e => VK.metaKeyPressed(e) && e.keyCode === 86 || e.shiftKey && e.keyCode === 45;\n const insertClipboardContent = (editor, clipboardContent, html, plainTextMode, shouldSimulateInputEvent) => {\n let content = trimHtml(html);\n const isInternal = hasContentType(clipboardContent, internalHtmlMime()) || isMarked(html);\n const isPlainTextHtml = !isInternal && isPlainText(content);\n const isAbsoluteUrl$1 = isAbsoluteUrl(content);\n if (isDefaultPasteBinContent(content) || !content.length || isPlainTextHtml && !isAbsoluteUrl$1) {\n plainTextMode = true;\n }\n if (plainTextMode || isAbsoluteUrl$1) {\n if (hasContentType(clipboardContent, 'text/plain') && isPlainTextHtml) {\n content = clipboardContent['text/plain'];\n } else {\n content = innerText(content);\n }\n }\n if (isDefaultPasteBinContent(content)) {\n return;\n }\n if (plainTextMode) {\n pasteText(editor, content, shouldSimulateInputEvent);\n } else {\n pasteHtml(editor, content, isInternal, shouldSimulateInputEvent);\n }\n };\n const registerEventHandlers = (editor, pasteBin, pasteFormat) => {\n let keyboardPastePlainTextState;\n const getLastRng = () => pasteBin.getLastRng() || editor.selection.getRng();\n editor.on('keydown', e => {\n if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {\n keyboardPastePlainTextState = e.shiftKey && e.keyCode === 86;\n }\n });\n editor.on('paste', e => {\n if (e.isDefaultPrevented() || isBrokenAndroidClipboardEvent(e)) {\n return;\n }\n const plainTextMode = pasteFormat.get() === 'text' || keyboardPastePlainTextState;\n keyboardPastePlainTextState = false;\n const clipboardContent = getDataTransferItems(e.clipboardData);\n if (!hasHtmlOrText(clipboardContent) && pasteImageData(editor, e, getLastRng())) {\n return;\n }\n if (hasContentType(clipboardContent, 'text/html')) {\n e.preventDefault();\n insertClipboardContent(editor, clipboardContent, clipboardContent['text/html'], plainTextMode, true);\n } else if (hasContentType(clipboardContent, 'text/plain') && hasContentType(clipboardContent, 'text/uri-list')) {\n e.preventDefault();\n insertClipboardContent(editor, clipboardContent, clipboardContent['text/plain'], plainTextMode, true);\n } else {\n pasteBin.create();\n Delay.setEditorTimeout(editor, () => {\n const html = pasteBin.getHtml();\n pasteBin.remove();\n insertClipboardContent(editor, clipboardContent, html, plainTextMode, false);\n }, 0);\n }\n });\n };\n const registerDataImageFilter = editor => {\n const isWebKitFakeUrl = src => startsWith(src, 'webkit-fake-url');\n const isDataUri = src => startsWith(src, 'data:');\n const isPasteInsert = args => {\n var _a;\n return ((_a = args.data) === null || _a === void 0 ? void 0 : _a.paste) === true;\n };\n editor.parser.addNodeFilter('img', (nodes, name, args) => {\n if (!shouldPasteDataImages(editor) && isPasteInsert(args)) {\n for (const node of nodes) {\n const src = node.attr('src');\n if (isString(src) && !node.attr('data-mce-object') && src !== Env.transparentSrc) {\n if (isWebKitFakeUrl(src)) {\n node.remove();\n } else if (!shouldAllowHtmlDataUrls(editor) && isDataUri(src)) {\n node.remove();\n }\n }\n }\n }\n });\n };\n const registerEventsAndFilters = (editor, pasteBin, pasteFormat) => {\n registerEventHandlers(editor, pasteBin, pasteFormat);\n registerDataImageFilter(editor);\n };\n\n const togglePlainTextPaste = (editor, pasteFormat) => {\n if (pasteFormat.get() === 'text') {\n pasteFormat.set('html');\n firePastePlainTextToggle(editor, false);\n } else {\n pasteFormat.set('text');\n firePastePlainTextToggle(editor, true);\n }\n editor.focus();\n };\n const register$1 = (editor, pasteFormat) => {\n editor.addCommand('mceTogglePlainTextPaste', () => {\n togglePlainTextPaste(editor, pasteFormat);\n });\n editor.addCommand('mceInsertClipboardContent', (ui, value) => {\n if (value.html) {\n pasteHtml(editor, value.html, value.internal, false);\n }\n if (value.text) {\n pasteText(editor, value.text, false);\n }\n });\n };\n\n const setHtml5Clipboard = (clipboardData, html, text) => {\n if (clipboardData) {\n try {\n clipboardData.clearData();\n clipboardData.setData('text/html', html);\n clipboardData.setData('text/plain', text);\n clipboardData.setData(internalHtmlMime(), html);\n return true;\n } catch (_a) {\n return false;\n }\n } else {\n return false;\n }\n };\n const setClipboardData = (evt, data, fallback, done) => {\n if (setHtml5Clipboard(evt.clipboardData, data.html, data.text)) {\n evt.preventDefault();\n done();\n } else {\n fallback(data.html, done);\n }\n };\n const fallback = editor => (html, done) => {\n const {dom, selection} = editor;\n const outer = dom.create('div', {\n 'contenteditable': 'false',\n 'data-mce-bogus': 'all'\n });\n const inner = dom.create('div', { contenteditable: 'true' }, html);\n dom.setStyles(outer, {\n position: 'fixed',\n top: '0',\n left: '-3000px',\n width: '1000px',\n overflow: 'hidden'\n });\n outer.appendChild(inner);\n dom.add(editor.getBody(), outer);\n const range = selection.getRng();\n inner.focus();\n const offscreenRange = dom.createRng();\n offscreenRange.selectNodeContents(inner);\n selection.setRng(offscreenRange);\n Delay.setEditorTimeout(editor, () => {\n selection.setRng(range);\n dom.remove(outer);\n done();\n }, 0);\n };\n const getData = editor => ({\n html: mark(editor.selection.getContent({ contextual: true })),\n text: editor.selection.getContent({ format: 'text' })\n });\n const isTableSelection = editor => !!editor.dom.getParent(editor.selection.getStart(), 'td[data-mce-selected],th[data-mce-selected]', editor.getBody());\n const hasSelectedContent = editor => !editor.selection.isCollapsed() || isTableSelection(editor);\n const cut = editor => evt => {\n if (!evt.isDefaultPrevented() && hasSelectedContent(editor) && editor.selection.isEditable()) {\n setClipboardData(evt, getData(editor), fallback(editor), () => {\n if (Env.browser.isChromium() || Env.browser.isFirefox()) {\n const rng = editor.selection.getRng();\n Delay.setEditorTimeout(editor, () => {\n editor.selection.setRng(rng);\n editor.execCommand('Delete');\n }, 0);\n } else {\n editor.execCommand('Delete');\n }\n });\n }\n };\n const copy = editor => evt => {\n if (!evt.isDefaultPrevented() && hasSelectedContent(editor)) {\n setClipboardData(evt, getData(editor), fallback(editor), noop);\n }\n };\n const register = editor => {\n editor.on('cut', cut(editor));\n editor.on('copy', copy(editor));\n };\n\n const getCaretRangeFromEvent = (editor, e) => {\n var _a, _b;\n return RangeUtils.getCaretRangeFromPoint((_a = e.clientX) !== null && _a !== void 0 ? _a : 0, (_b = e.clientY) !== null && _b !== void 0 ? _b : 0, editor.getDoc());\n };\n const isPlainTextFileUrl = content => {\n const plainTextContent = content['text/plain'];\n return plainTextContent ? plainTextContent.indexOf('file://') === 0 : false;\n };\n const setFocusedRange = (editor, rng) => {\n editor.focus();\n if (rng) {\n editor.selection.setRng(rng);\n }\n };\n const hasImage = dataTransfer => exists(dataTransfer.files, file => /^image\\//.test(file.type));\n const needsCustomInternalDrop = (dom, schema, target, dropContent) => {\n const parentTransparent = dom.getParent(target, node => isTransparentBlock(schema, node));\n const inSummary = !isNull(dom.getParent(target, 'summary'));\n if (inSummary) {\n return true;\n } else if (parentTransparent && has$2(dropContent, 'text/html')) {\n const fragment = new DOMParser().parseFromString(dropContent['text/html'], 'text/html').body;\n return !isNull(fragment.querySelector(parentTransparent.nodeName.toLowerCase()));\n } else {\n return false;\n }\n };\n const setupSummaryDeleteByDragFix = editor => {\n editor.on('input', e => {\n const hasNoSummary = el => isNull(el.querySelector('summary'));\n if (e.inputType === 'deleteByDrag') {\n const brokenDetailElements = filter$5(editor.dom.select('details'), hasNoSummary);\n each$e(brokenDetailElements, details => {\n if (isBr$6(details.firstChild)) {\n details.firstChild.remove();\n }\n const summary = editor.dom.create('summary');\n summary.appendChild(createPaddingBr().dom);\n details.prepend(summary);\n });\n }\n });\n };\n const setup$a = (editor, draggingInternallyState) => {\n if (shouldPasteBlockDrop(editor)) {\n editor.on('dragend dragover draggesture dragdrop drop drag', e => {\n e.preventDefault();\n e.stopPropagation();\n });\n }\n if (!shouldPasteDataImages(editor)) {\n editor.on('drop', e => {\n const dataTransfer = e.dataTransfer;\n if (dataTransfer && hasImage(dataTransfer)) {\n e.preventDefault();\n }\n });\n }\n editor.on('drop', e => {\n if (e.isDefaultPrevented()) {\n return;\n }\n const rng = getCaretRangeFromEvent(editor, e);\n if (isNullable(rng)) {\n return;\n }\n const dropContent = getDataTransferItems(e.dataTransfer);\n const internal = hasContentType(dropContent, internalHtmlMime());\n if ((!hasHtmlOrText(dropContent) || isPlainTextFileUrl(dropContent)) && pasteImageData(editor, e, rng)) {\n return;\n }\n const internalContent = dropContent[internalHtmlMime()];\n const content = internalContent || dropContent['text/html'] || dropContent['text/plain'];\n const needsInternalDrop = needsCustomInternalDrop(editor.dom, editor.schema, rng.startContainer, dropContent);\n const isInternalDrop = draggingInternallyState.get();\n if (isInternalDrop && !needsInternalDrop) {\n return;\n }\n if (content) {\n e.preventDefault();\n Delay.setEditorTimeout(editor, () => {\n editor.undoManager.transact(() => {\n if (internalContent || isInternalDrop && needsInternalDrop) {\n editor.execCommand('Delete');\n }\n setFocusedRange(editor, rng);\n const trimmedContent = trimHtml(content);\n if (dropContent['text/html']) {\n pasteHtml(editor, trimmedContent, internal, true);\n } else {\n pasteText(editor, trimmedContent, true);\n }\n });\n });\n }\n });\n editor.on('dragstart', _e => {\n draggingInternallyState.set(true);\n });\n editor.on('dragover dragend', e => {\n if (shouldPasteDataImages(editor) && !draggingInternallyState.get()) {\n e.preventDefault();\n setFocusedRange(editor, getCaretRangeFromEvent(editor, e));\n }\n if (e.type === 'dragend') {\n draggingInternallyState.set(false);\n }\n });\n setupSummaryDeleteByDragFix(editor);\n };\n\n const setup$9 = editor => {\n const processEvent = f => e => {\n f(editor, e);\n };\n const preProcess = getPastePreProcess(editor);\n if (isFunction(preProcess)) {\n editor.on('PastePreProcess', processEvent(preProcess));\n }\n const postProcess = getPastePostProcess(editor);\n if (isFunction(postProcess)) {\n editor.on('PastePostProcess', processEvent(postProcess));\n }\n };\n\n const addPreProcessFilter = (editor, filterFunc) => {\n editor.on('PastePreProcess', e => {\n e.content = filterFunc(editor, e.content, e.internal);\n });\n };\n const rgbRegExp = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/gi;\n const rgbToHex = value => Tools.trim(value).replace(rgbRegExp, rgbaToHexString).toLowerCase();\n const removeWebKitStyles = (editor, content, internal) => {\n const webKitStylesOption = getPasteWebkitStyles(editor);\n if (internal || webKitStylesOption === 'all' || !shouldPasteRemoveWebKitStyles(editor)) {\n return content;\n }\n const webKitStyles = webKitStylesOption ? webKitStylesOption.split(/[, ]/) : [];\n if (webKitStyles && webKitStylesOption !== 'none') {\n const dom = editor.dom, node = editor.selection.getNode();\n content = content.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi, (all, before, value, after) => {\n const inputStyles = dom.parseStyle(dom.decode(value));\n const outputStyles = {};\n for (let i = 0; i < webKitStyles.length; i++) {\n const inputValue = inputStyles[webKitStyles[i]];\n let compareInput = inputValue;\n let currentValue = dom.getStyle(node, webKitStyles[i], true);\n if (/color/.test(webKitStyles[i])) {\n compareInput = rgbToHex(compareInput);\n currentValue = rgbToHex(currentValue);\n }\n if (currentValue !== compareInput) {\n outputStyles[webKitStyles[i]] = inputValue;\n }\n }\n const outputStyle = dom.serializeStyle(outputStyles, 'span');\n if (outputStyle) {\n return before + ' style=\"' + outputStyle + '\"' + after;\n }\n return before + after;\n });\n } else {\n content = content.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi, '$1$3');\n }\n content = content.replace(/(<[^>]+) data-mce-style=\"([^\"]+)\"([^>]*>)/gi, (all, before, value, after) => {\n return before + ' style=\"' + value + '\"' + after;\n });\n return content;\n };\n const setup$8 = editor => {\n if (Env.browser.isChromium() || Env.browser.isSafari()) {\n addPreProcessFilter(editor, removeWebKitStyles);\n }\n };\n\n const setup$7 = editor => {\n const draggingInternallyState = Cell(false);\n const pasteFormat = Cell(isPasteAsTextEnabled(editor) ? 'text' : 'html');\n const pasteBin = PasteBin(editor);\n setup$8(editor);\n register$1(editor, pasteFormat);\n setup$9(editor);\n editor.addQueryStateHandler('mceTogglePlainTextPaste', () => pasteFormat.get() === 'text');\n editor.on('PreInit', () => {\n register(editor);\n setup$a(editor, draggingInternallyState);\n registerEventsAndFilters(editor, pasteBin, pasteFormat);\n });\n };\n\n const preventSummaryToggle = editor => {\n editor.on('click', e => {\n if (editor.dom.getParent(e.target, 'details')) {\n e.preventDefault();\n }\n });\n };\n const filterDetails = editor => {\n editor.parser.addNodeFilter('details', elms => {\n const initialStateOption = getDetailsInitialState(editor);\n each$e(elms, details => {\n if (initialStateOption === 'expanded') {\n details.attr('open', 'open');\n } else if (initialStateOption === 'collapsed') {\n details.attr('open', null);\n }\n });\n });\n editor.serializer.addNodeFilter('details', elms => {\n const serializedStateOption = getDetailsSerializedState(editor);\n each$e(elms, details => {\n if (serializedStateOption === 'expanded') {\n details.attr('open', 'open');\n } else if (serializedStateOption === 'collapsed') {\n details.attr('open', null);\n }\n });\n });\n };\n const setup$6 = editor => {\n preventSummaryToggle(editor);\n filterDetails(editor);\n };\n\n const isBr = isBr$6;\n const isText = isText$b;\n const isContentEditableFalse$2 = elm => isContentEditableFalse$b(elm.dom);\n const isContentEditableTrue = elm => isContentEditableTrue$3(elm.dom);\n const isRoot = rootNode => elm => eq(SugarElement.fromDom(rootNode), elm);\n const getClosestScope = (node, rootNode, schema) => closest$4(SugarElement.fromDom(node), elm => isContentEditableTrue(elm) || schema.isBlock(name(elm)), isRoot(rootNode)).getOr(SugarElement.fromDom(rootNode)).dom;\n const getClosestCef = (node, rootNode) => closest$4(SugarElement.fromDom(node), isContentEditableFalse$2, isRoot(rootNode));\n const findEdgeCaretCandidate = (startNode, scope, forward) => {\n const walker = new DomTreeWalker(startNode, scope);\n const next = forward ? walker.next.bind(walker) : walker.prev.bind(walker);\n let result = startNode;\n for (let current = forward ? startNode : next(); current && !isBr(current); current = next()) {\n if (isCaretCandidate$3(current)) {\n result = current;\n }\n }\n return result;\n };\n const findClosestBlockRange = (startRng, rootNode, schema) => {\n const startPos = CaretPosition.fromRangeStart(startRng);\n const clickNode = startPos.getNode();\n const scope = getClosestScope(clickNode, rootNode, schema);\n const startNode = findEdgeCaretCandidate(clickNode, scope, false);\n const endNode = findEdgeCaretCandidate(clickNode, scope, true);\n const rng = document.createRange();\n getClosestCef(startNode, scope).fold(() => {\n if (isText(startNode)) {\n rng.setStart(startNode, 0);\n } else {\n rng.setStartBefore(startNode);\n }\n }, cef => rng.setStartBefore(cef.dom));\n getClosestCef(endNode, scope).fold(() => {\n if (isText(endNode)) {\n rng.setEnd(endNode, endNode.data.length);\n } else {\n rng.setEndAfter(endNode);\n }\n }, cef => rng.setEndAfter(cef.dom));\n return rng;\n };\n const onTripleClickSelect = editor => {\n const rng = findClosestBlockRange(editor.selection.getRng(), editor.getBody(), editor.schema);\n editor.selection.setRng(normalize(rng));\n };\n const setup$5 = editor => {\n editor.on('mousedown', e => {\n if (e.detail >= 3) {\n e.preventDefault();\n onTripleClickSelect(editor);\n }\n });\n };\n\n var FakeCaretPosition;\n (function (FakeCaretPosition) {\n FakeCaretPosition['Before'] = 'before';\n FakeCaretPosition['After'] = 'after';\n }(FakeCaretPosition || (FakeCaretPosition = {})));\n const distanceToRectLeft = (clientRect, clientX) => Math.abs(clientRect.left - clientX);\n const distanceToRectRight = (clientRect, clientX) => Math.abs(clientRect.right - clientX);\n const isInsideY = (clientY, clientRect) => clientY >= clientRect.top && clientY <= clientRect.bottom;\n const collidesY = (r1, r2) => r1.top < r2.bottom && r1.bottom > r2.top;\n const isOverlapping = (r1, r2) => {\n const overlap = overlapY(r1, r2) / Math.min(r1.height, r2.height);\n return collidesY(r1, r2) && overlap > 0.5;\n };\n const splitRectsPerAxis = (rects, y) => {\n const intersectingRects = filter$5(rects, rect => isInsideY(y, rect));\n return boundingClientRectFromRects(intersectingRects).fold(() => [\n [],\n rects\n ], boundingRect => {\n const {\n pass: horizontal,\n fail: vertical\n } = partition$2(rects, rect => isOverlapping(rect, boundingRect));\n return [\n horizontal,\n vertical\n ];\n });\n };\n const clientInfo = (rect, clientX) => {\n return {\n node: rect.node,\n position: distanceToRectLeft(rect, clientX) < distanceToRectRight(rect, clientX) ? FakeCaretPosition.Before : FakeCaretPosition.After\n };\n };\n const horizontalDistance = (rect, x, _y) => x > rect.left && x < rect.right ? 0 : Math.min(Math.abs(rect.left - x), Math.abs(rect.right - x));\n const closestChildCaretCandidateNodeRect = (children, clientX, clientY, findCloserTextNode) => {\n const caretCandidateRect = rect => {\n if (isCaretCandidate$3(rect.node)) {\n return Optional.some(rect);\n } else if (isElement$6(rect.node)) {\n return closestChildCaretCandidateNodeRect(from(rect.node.childNodes), clientX, clientY, false);\n } else {\n return Optional.none();\n }\n };\n const tryFindSecondBestTextNode = (closest, sndClosest, distance) => {\n return caretCandidateRect(sndClosest).filter(rect => {\n const deltaDistance = Math.abs(distance(closest, clientX, clientY) - distance(rect, clientX, clientY));\n return deltaDistance < 2 && isText$b(rect.node);\n });\n };\n const findClosestCaretCandidateNodeRect = (rects, distance) => {\n const sortedRects = sort(rects, (r1, r2) => distance(r1, clientX, clientY) - distance(r2, clientX, clientY));\n return findMap(sortedRects, caretCandidateRect).map(closest => {\n if (findCloserTextNode && !isText$b(closest.node) && sortedRects.length > 1) {\n return tryFindSecondBestTextNode(closest, sortedRects[1], distance).getOr(closest);\n } else {\n return closest;\n }\n });\n };\n const [horizontalRects, verticalRects] = splitRectsPerAxis(getClientRects(children), clientY);\n const {\n pass: above,\n fail: below\n } = partition$2(verticalRects, rect => rect.top < clientY);\n return findClosestCaretCandidateNodeRect(horizontalRects, horizontalDistance).orThunk(() => findClosestCaretCandidateNodeRect(below, distanceToRectEdgeFromXY)).orThunk(() => findClosestCaretCandidateNodeRect(above, distanceToRectEdgeFromXY));\n };\n const traverseUp = (rootElm, scope, clientX, clientY) => {\n const helper = (scope, prevScope) => {\n const isDragGhostContainer = node => isElement$6(node) && node.classList.contains('mce-drag-container');\n const childNodesWithoutGhost = filter$5(scope.dom.childNodes, not(isDragGhostContainer));\n return prevScope.fold(() => closestChildCaretCandidateNodeRect(childNodesWithoutGhost, clientX, clientY, true), prevScope => {\n const uncheckedChildren = filter$5(childNodesWithoutGhost, node => node !== prevScope.dom);\n return closestChildCaretCandidateNodeRect(uncheckedChildren, clientX, clientY, true);\n }).orThunk(() => {\n const parent = eq(scope, rootElm) ? Optional.none() : parentElement(scope);\n return parent.bind(newScope => helper(newScope, Optional.some(scope)));\n });\n };\n return helper(scope, Optional.none());\n };\n const closestCaretCandidateNodeRect = (root, clientX, clientY) => {\n const rootElm = SugarElement.fromDom(root);\n const ownerDoc = documentOrOwner(rootElm);\n const elementAtPoint = SugarElement.fromPoint(ownerDoc, clientX, clientY).filter(elm => contains(rootElm, elm));\n const element = elementAtPoint.getOr(rootElm);\n return traverseUp(rootElm, element, clientX, clientY);\n };\n const closestFakeCaretCandidate = (root, clientX, clientY) => closestCaretCandidateNodeRect(root, clientX, clientY).filter(rect => isFakeCaretTarget(rect.node)).map(rect => clientInfo(rect, clientX));\n\n const getAbsolutePosition = elm => {\n var _a, _b;\n const clientRect = elm.getBoundingClientRect();\n const doc = elm.ownerDocument;\n const docElem = doc.documentElement;\n const win = doc.defaultView;\n return {\n top: clientRect.top + ((_a = win === null || win === void 0 ? void 0 : win.scrollY) !== null && _a !== void 0 ? _a : 0) - docElem.clientTop,\n left: clientRect.left + ((_b = win === null || win === void 0 ? void 0 : win.scrollX) !== null && _b !== void 0 ? _b : 0) - docElem.clientLeft\n };\n };\n const getBodyPosition = editor => editor.inline ? getAbsolutePosition(editor.getBody()) : {\n left: 0,\n top: 0\n };\n const getScrollPosition = editor => {\n const body = editor.getBody();\n return editor.inline ? {\n left: body.scrollLeft,\n top: body.scrollTop\n } : {\n left: 0,\n top: 0\n };\n };\n const getBodyScroll = editor => {\n const body = editor.getBody(), docElm = editor.getDoc().documentElement;\n const inlineScroll = {\n left: body.scrollLeft,\n top: body.scrollTop\n };\n const iframeScroll = {\n left: body.scrollLeft || docElm.scrollLeft,\n top: body.scrollTop || docElm.scrollTop\n };\n return editor.inline ? inlineScroll : iframeScroll;\n };\n const getMousePosition = (editor, event) => {\n if (event.target.ownerDocument !== editor.getDoc()) {\n const iframePosition = getAbsolutePosition(editor.getContentAreaContainer());\n const scrollPosition = getBodyScroll(editor);\n return {\n left: event.pageX - iframePosition.left + scrollPosition.left,\n top: event.pageY - iframePosition.top + scrollPosition.top\n };\n }\n return {\n left: event.pageX,\n top: event.pageY\n };\n };\n const calculatePosition = (bodyPosition, scrollPosition, mousePosition) => ({\n pageX: mousePosition.left - bodyPosition.left + scrollPosition.left,\n pageY: mousePosition.top - bodyPosition.top + scrollPosition.top\n });\n const calc = (editor, event) => calculatePosition(getBodyPosition(editor), getScrollPosition(editor), getMousePosition(editor, event));\n\n const getTargetProps = target => ({\n target,\n srcElement: target\n });\n const makeDndEventFromMouseEvent = (type, mouseEvent, target, dataTransfer) => ({\n ...mouseEvent,\n dataTransfer,\n type,\n ...getTargetProps(target)\n });\n const makeDndEvent = (type, target, dataTransfer) => {\n const fail = die('Function not supported on simulated event.');\n const event = {\n bubbles: true,\n cancelBubble: false,\n cancelable: true,\n composed: false,\n currentTarget: null,\n defaultPrevented: false,\n eventPhase: 0,\n isTrusted: true,\n returnValue: false,\n timeStamp: 0,\n type,\n composedPath: fail,\n initEvent: fail,\n preventDefault: noop,\n stopImmediatePropagation: noop,\n stopPropagation: noop,\n AT_TARGET: window.Event.AT_TARGET,\n BUBBLING_PHASE: window.Event.BUBBLING_PHASE,\n CAPTURING_PHASE: window.Event.CAPTURING_PHASE,\n NONE: window.Event.NONE,\n altKey: false,\n button: 0,\n buttons: 0,\n clientX: 0,\n clientY: 0,\n ctrlKey: false,\n layerX: 0,\n layerY: 0,\n metaKey: false,\n movementX: 0,\n movementY: 0,\n offsetX: 0,\n offsetY: 0,\n pageX: 0,\n pageY: 0,\n relatedTarget: null,\n screenX: 0,\n screenY: 0,\n shiftKey: false,\n x: 0,\n y: 0,\n detail: 0,\n view: null,\n which: 0,\n initUIEvent: fail,\n initMouseEvent: fail,\n getModifierState: fail,\n dataTransfer,\n ...getTargetProps(target)\n };\n return event;\n };\n const makeDataTransferCopyForDragEvent = (dataTransfer, eventType) => {\n const copy = cloneDataTransfer(dataTransfer);\n if (eventType === 'dragstart') {\n setDragstartEvent(copy);\n setReadWriteMode(copy);\n } else if (eventType === 'drop') {\n setDropEvent(copy);\n setReadOnlyMode(copy);\n } else {\n setDragendEvent(copy);\n setProtectedMode(copy);\n }\n return copy;\n };\n const makeDragEvent = (type, target, dataTransfer, mouseEvent) => {\n const dataTransferForDispatch = makeDataTransferCopyForDragEvent(dataTransfer, type);\n return isUndefined(mouseEvent) ? makeDndEvent(type, target, dataTransferForDispatch) : makeDndEventFromMouseEvent(type, mouseEvent, target, dataTransferForDispatch);\n };\n\n const scrollPixelsPerInterval = 32;\n const scrollIntervalValue = 100;\n const mouseRangeToTriggerScrollInsideEditor = 8;\n const mouseRangeToTriggerScrollOutsideEditor = 16;\n const isContentEditableFalse$1 = isContentEditableFalse$b;\n const isContentEditable = or(isContentEditableFalse$1, isContentEditableTrue$3);\n const isDraggable = (dom, rootElm, elm) => isContentEditableFalse$1(elm) && elm !== rootElm && dom.isEditable(elm.parentElement);\n const isValidDropTarget = (editor, targetElement, dragElement) => {\n if (isNullable(targetElement)) {\n return false;\n } else if (targetElement === dragElement || editor.dom.isChildOf(targetElement, dragElement)) {\n return false;\n } else {\n return editor.dom.isEditable(targetElement);\n }\n };\n const createGhost = (editor, elm, width, height) => {\n const dom = editor.dom;\n const clonedElm = elm.cloneNode(true);\n dom.setStyles(clonedElm, {\n width,\n height\n });\n dom.setAttrib(clonedElm, 'data-mce-selected', null);\n const ghostElm = dom.create('div', {\n 'class': 'mce-drag-container',\n 'data-mce-bogus': 'all',\n 'unselectable': 'on',\n 'contenteditable': 'false'\n });\n dom.setStyles(ghostElm, {\n position: 'absolute',\n opacity: 0.5,\n overflow: 'hidden',\n border: 0,\n padding: 0,\n margin: 0,\n width,\n height\n });\n dom.setStyles(clonedElm, {\n margin: 0,\n boxSizing: 'border-box'\n });\n ghostElm.appendChild(clonedElm);\n return ghostElm;\n };\n const appendGhostToBody = (ghostElm, bodyElm) => {\n if (ghostElm.parentNode !== bodyElm) {\n bodyElm.appendChild(ghostElm);\n }\n };\n const scrollEditor = (direction, amount) => win => () => {\n const current = direction === 'left' ? win.scrollX : win.scrollY;\n win.scroll({\n [direction]: current + amount,\n behavior: 'smooth'\n });\n };\n const scrollLeft = scrollEditor('left', -scrollPixelsPerInterval);\n const scrollRight = scrollEditor('left', scrollPixelsPerInterval);\n const scrollUp = scrollEditor('top', -scrollPixelsPerInterval);\n const scrollDown = scrollEditor('top', scrollPixelsPerInterval);\n const moveGhost = (ghostElm, position, width, height, maxX, maxY, mouseY, mouseX, contentAreaContainer, win, state, mouseEventOriginatedFromWithinTheEditor) => {\n let overflowX = 0, overflowY = 0;\n ghostElm.style.left = position.pageX + 'px';\n ghostElm.style.top = position.pageY + 'px';\n if (position.pageX + width > maxX) {\n overflowX = position.pageX + width - maxX;\n }\n if (position.pageY + height > maxY) {\n overflowY = position.pageY + height - maxY;\n }\n ghostElm.style.width = width - overflowX + 'px';\n ghostElm.style.height = height - overflowY + 'px';\n const clientHeight = contentAreaContainer.clientHeight;\n const clientWidth = contentAreaContainer.clientWidth;\n const outerMouseY = mouseY + contentAreaContainer.getBoundingClientRect().top;\n const outerMouseX = mouseX + contentAreaContainer.getBoundingClientRect().left;\n state.on(state => {\n state.intervalId.clear();\n if (state.dragging && mouseEventOriginatedFromWithinTheEditor) {\n if (mouseY + mouseRangeToTriggerScrollInsideEditor >= clientHeight) {\n state.intervalId.set(scrollDown(win));\n } else if (mouseY - mouseRangeToTriggerScrollInsideEditor <= 0) {\n state.intervalId.set(scrollUp(win));\n } else if (mouseX + mouseRangeToTriggerScrollInsideEditor >= clientWidth) {\n state.intervalId.set(scrollRight(win));\n } else if (mouseX - mouseRangeToTriggerScrollInsideEditor <= 0) {\n state.intervalId.set(scrollLeft(win));\n } else if (outerMouseY + mouseRangeToTriggerScrollOutsideEditor >= window.innerHeight) {\n state.intervalId.set(scrollDown(window));\n } else if (outerMouseY - mouseRangeToTriggerScrollOutsideEditor <= 0) {\n state.intervalId.set(scrollUp(window));\n } else if (outerMouseX + mouseRangeToTriggerScrollOutsideEditor >= window.innerWidth) {\n state.intervalId.set(scrollRight(window));\n } else if (outerMouseX - mouseRangeToTriggerScrollOutsideEditor <= 0) {\n state.intervalId.set(scrollLeft(window));\n }\n }\n });\n };\n const removeElement = elm => {\n if (elm && elm.parentNode) {\n elm.parentNode.removeChild(elm);\n }\n };\n const removeElementWithPadding = (dom, elm) => {\n const parentBlock = dom.getParent(elm.parentNode, dom.isBlock);\n removeElement(elm);\n if (parentBlock && parentBlock !== dom.getRoot() && dom.isEmpty(parentBlock)) {\n fillWithPaddingBr(SugarElement.fromDom(parentBlock));\n }\n };\n const isLeftMouseButtonPressed = e => e.button === 0;\n const applyRelPos = (state, position) => ({\n pageX: position.pageX - state.relX,\n pageY: position.pageY + 5\n });\n const start = (state, editor) => e => {\n if (isLeftMouseButtonPressed(e)) {\n const ceElm = find$2(editor.dom.getParents(e.target), isContentEditable).getOr(null);\n if (isNonNullable(ceElm) && isDraggable(editor.dom, editor.getBody(), ceElm)) {\n const elmPos = editor.dom.getPos(ceElm);\n const bodyElm = editor.getBody();\n const docElm = editor.getDoc().documentElement;\n state.set({\n element: ceElm,\n dataTransfer: createDataTransfer(),\n dragging: false,\n screenX: e.screenX,\n screenY: e.screenY,\n maxX: (editor.inline ? bodyElm.scrollWidth : docElm.offsetWidth) - 2,\n maxY: (editor.inline ? bodyElm.scrollHeight : docElm.offsetHeight) - 2,\n relX: e.pageX - elmPos.x,\n relY: e.pageY - elmPos.y,\n width: ceElm.offsetWidth,\n height: ceElm.offsetHeight,\n ghost: createGhost(editor, ceElm, ceElm.offsetWidth, ceElm.offsetHeight),\n intervalId: repeatable(scrollIntervalValue)\n });\n }\n }\n };\n const placeCaretAt = (editor, clientX, clientY) => {\n editor._selectionOverrides.hideFakeCaret();\n closestFakeCaretCandidate(editor.getBody(), clientX, clientY).fold(() => editor.selection.placeCaretAt(clientX, clientY), caretInfo => {\n const range = editor._selectionOverrides.showCaret(1, caretInfo.node, caretInfo.position === FakeCaretPosition.Before, false);\n if (range) {\n editor.selection.setRng(range);\n } else {\n editor.selection.placeCaretAt(clientX, clientY);\n }\n });\n };\n const dispatchDragEvent = (editor, type, target, dataTransfer, mouseEvent) => {\n if (type === 'dragstart') {\n setHtmlData(dataTransfer, editor.dom.getOuterHTML(target));\n }\n const event = makeDragEvent(type, target, dataTransfer, mouseEvent);\n const args = editor.dispatch(type, event);\n return args;\n };\n const move = (state, editor) => {\n const throttledPlaceCaretAt = first$1((clientX, clientY) => placeCaretAt(editor, clientX, clientY), 0);\n editor.on('remove', throttledPlaceCaretAt.cancel);\n const state_ = state;\n return e => state.on(state => {\n const movement = Math.max(Math.abs(e.screenX - state.screenX), Math.abs(e.screenY - state.screenY));\n if (!state.dragging && movement > 10) {\n const args = dispatchDragEvent(editor, 'dragstart', state.element, state.dataTransfer, e);\n if (isNonNullable(args.dataTransfer)) {\n state.dataTransfer = args.dataTransfer;\n }\n if (args.isDefaultPrevented()) {\n return;\n }\n state.dragging = true;\n editor.focus();\n }\n if (state.dragging) {\n const mouseEventOriginatedFromWithinTheEditor = e.currentTarget === editor.getDoc().documentElement;\n const targetPos = applyRelPos(state, calc(editor, e));\n appendGhostToBody(state.ghost, editor.getBody());\n moveGhost(state.ghost, targetPos, state.width, state.height, state.maxX, state.maxY, e.clientY, e.clientX, editor.getContentAreaContainer(), editor.getWin(), state_, mouseEventOriginatedFromWithinTheEditor);\n throttledPlaceCaretAt.throttle(e.clientX, e.clientY);\n }\n });\n };\n const getRawTarget = selection => {\n const sel = selection.getSel();\n if (isNonNullable(sel)) {\n const rng = sel.getRangeAt(0);\n const startContainer = rng.startContainer;\n return isText$b(startContainer) ? startContainer.parentNode : startContainer;\n } else {\n return null;\n }\n };\n const drop = (state, editor) => e => {\n state.on(state => {\n var _a;\n state.intervalId.clear();\n if (state.dragging) {\n if (isValidDropTarget(editor, getRawTarget(editor.selection), state.element)) {\n const dropTarget = (_a = editor.getDoc().elementFromPoint(e.clientX, e.clientY)) !== null && _a !== void 0 ? _a : editor.getBody();\n const args = dispatchDragEvent(editor, 'drop', dropTarget, state.dataTransfer, e);\n if (!args.isDefaultPrevented()) {\n editor.undoManager.transact(() => {\n removeElementWithPadding(editor.dom, state.element);\n getHtmlData(state.dataTransfer).each(content => editor.insertContent(content));\n editor._selectionOverrides.hideFakeCaret();\n });\n }\n }\n dispatchDragEvent(editor, 'dragend', editor.getBody(), state.dataTransfer, e);\n }\n });\n removeDragState(state);\n };\n const stopDragging = (state, editor, e) => {\n state.on(state => {\n state.intervalId.clear();\n if (state.dragging) {\n e.fold(() => dispatchDragEvent(editor, 'dragend', state.element, state.dataTransfer), mouseEvent => dispatchDragEvent(editor, 'dragend', state.element, state.dataTransfer, mouseEvent));\n }\n });\n removeDragState(state);\n };\n const stop = (state, editor) => e => stopDragging(state, editor, Optional.some(e));\n const removeDragState = state => {\n state.on(state => {\n state.intervalId.clear();\n removeElement(state.ghost);\n });\n state.clear();\n };\n const bindFakeDragEvents = editor => {\n const state = value$2();\n const pageDom = DOMUtils.DOM;\n const rootDocument = document;\n const dragStartHandler = start(state, editor);\n const dragHandler = move(state, editor);\n const dropHandler = drop(state, editor);\n const dragEndHandler = stop(state, editor);\n editor.on('mousedown', dragStartHandler);\n editor.on('mousemove', dragHandler);\n editor.on('mouseup', dropHandler);\n pageDom.bind(rootDocument, 'mousemove', dragHandler);\n pageDom.bind(rootDocument, 'mouseup', dragEndHandler);\n editor.on('remove', () => {\n pageDom.unbind(rootDocument, 'mousemove', dragHandler);\n pageDom.unbind(rootDocument, 'mouseup', dragEndHandler);\n });\n editor.on('keydown', e => {\n if (e.keyCode === VK.ESC) {\n stopDragging(state, editor, Optional.none());\n }\n });\n };\n const blockUnsupportedFileDrop = editor => {\n const preventFileDrop = e => {\n if (!e.isDefaultPrevented()) {\n const dataTransfer = e.dataTransfer;\n if (dataTransfer && (contains$2(dataTransfer.types, 'Files') || dataTransfer.files.length > 0)) {\n e.preventDefault();\n if (e.type === 'drop') {\n displayError(editor, 'Dropped file type is not supported');\n }\n }\n }\n };\n const preventFileDropIfUIElement = e => {\n if (isUIElement(editor, e.target)) {\n preventFileDrop(e);\n }\n };\n const setup = () => {\n const pageDom = DOMUtils.DOM;\n const dom = editor.dom;\n const doc = document;\n const editorRoot = editor.inline ? editor.getBody() : editor.getDoc();\n const eventNames = [\n 'drop',\n 'dragover'\n ];\n each$e(eventNames, name => {\n pageDom.bind(doc, name, preventFileDropIfUIElement);\n dom.bind(editorRoot, name, preventFileDrop);\n });\n editor.on('remove', () => {\n each$e(eventNames, name => {\n pageDom.unbind(doc, name, preventFileDropIfUIElement);\n dom.unbind(editorRoot, name, preventFileDrop);\n });\n });\n };\n editor.on('init', () => {\n Delay.setEditorTimeout(editor, setup, 0);\n });\n };\n const init$2 = editor => {\n bindFakeDragEvents(editor);\n if (shouldBlockUnsupportedDrop(editor)) {\n blockUnsupportedFileDrop(editor);\n }\n };\n\n const setup$4 = editor => {\n const renderFocusCaret = first$1(() => {\n if (!editor.removed && editor.getBody().contains(document.activeElement)) {\n const rng = editor.selection.getRng();\n if (rng.collapsed) {\n const caretRange = renderRangeCaret(editor, rng, false);\n editor.selection.setRng(caretRange);\n }\n }\n }, 0);\n editor.on('focus', () => {\n renderFocusCaret.throttle();\n });\n editor.on('blur', () => {\n renderFocusCaret.cancel();\n });\n };\n\n const setup$3 = editor => {\n editor.on('init', () => {\n editor.on('focusin', e => {\n const target = e.target;\n if (isMedia$2(target)) {\n const ceRoot = getContentEditableRoot$1(editor.getBody(), target);\n const node = isContentEditableFalse$b(ceRoot) ? ceRoot : target;\n if (editor.selection.getNode() !== node) {\n selectNode(editor, node).each(rng => editor.selection.setRng(rng));\n }\n }\n });\n });\n };\n\n const isContentEditableFalse = isContentEditableFalse$b;\n const getContentEditableRoot = (editor, node) => getContentEditableRoot$1(editor.getBody(), node);\n const SelectionOverrides = editor => {\n const selection = editor.selection, dom = editor.dom;\n const rootNode = editor.getBody();\n const fakeCaret = FakeCaret(editor, rootNode, dom.isBlock, () => hasFocus(editor));\n const realSelectionId = 'sel-' + dom.uniqueId();\n const elementSelectionAttr = 'data-mce-selected';\n let selectedElement;\n const isFakeSelectionElement = node => isNonNullable(node) && dom.hasClass(node, 'mce-offscreen-selection');\n const isFakeSelectionTargetElement = node => node !== rootNode && (isContentEditableFalse(node) || isMedia$2(node)) && dom.isChildOf(node, rootNode) && dom.isEditable(node.parentNode);\n const setRange = range => {\n if (range) {\n selection.setRng(range);\n }\n };\n const showCaret = (direction, node, before, scrollIntoView = true) => {\n const e = editor.dispatch('ShowCaret', {\n target: node,\n direction,\n before\n });\n if (e.isDefaultPrevented()) {\n return null;\n }\n if (scrollIntoView) {\n selection.scrollIntoView(node, direction === -1);\n }\n return fakeCaret.show(before, node);\n };\n const showBlockCaretContainer = blockCaretContainer => {\n if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n showCaretContainerBlock(blockCaretContainer);\n selection.scrollIntoView(blockCaretContainer);\n }\n };\n const registerEvents = () => {\n editor.on('click', e => {\n if (!dom.isEditable(e.target)) {\n e.preventDefault();\n editor.focus();\n }\n });\n editor.on('blur NewBlock', removeElementSelection);\n editor.on('ResizeWindow FullscreenStateChanged', fakeCaret.reposition);\n editor.on('tap', e => {\n const targetElm = e.target;\n const contentEditableRoot = getContentEditableRoot(editor, targetElm);\n if (isContentEditableFalse(contentEditableRoot)) {\n e.preventDefault();\n selectNode(editor, contentEditableRoot).each(setElementSelection);\n } else if (isFakeSelectionTargetElement(targetElm)) {\n selectNode(editor, targetElm).each(setElementSelection);\n }\n }, true);\n editor.on('mousedown', e => {\n const targetElm = e.target;\n if (targetElm !== rootNode && targetElm.nodeName !== 'HTML' && !dom.isChildOf(targetElm, rootNode)) {\n return;\n }\n if (!isXYInContentArea(editor, e.clientX, e.clientY)) {\n return;\n }\n removeElementSelection();\n hideFakeCaret();\n const closestContentEditable = getContentEditableRoot(editor, targetElm);\n if (isContentEditableFalse(closestContentEditable)) {\n e.preventDefault();\n selectNode(editor, closestContentEditable).each(setElementSelection);\n } else {\n closestFakeCaretCandidate(rootNode, e.clientX, e.clientY).each(caretInfo => {\n e.preventDefault();\n const range = showCaret(1, caretInfo.node, caretInfo.position === FakeCaretPosition.Before, false);\n setRange(range);\n if (isHTMLElement(closestContentEditable)) {\n closestContentEditable.focus();\n } else {\n editor.getBody().focus();\n }\n });\n }\n });\n editor.on('keypress', e => {\n if (VK.modifierPressed(e)) {\n return;\n }\n if (isContentEditableFalse(selection.getNode())) {\n e.preventDefault();\n }\n });\n editor.on('GetSelectionRange', e => {\n let rng = e.range;\n if (selectedElement) {\n if (!selectedElement.parentNode) {\n selectedElement = null;\n return;\n }\n rng = rng.cloneRange();\n rng.selectNode(selectedElement);\n e.range = rng;\n }\n });\n editor.on('SetSelectionRange', e => {\n e.range = normalizeVoidElementSelection(e.range);\n const rng = setElementSelection(e.range, e.forward);\n if (rng) {\n e.range = rng;\n }\n });\n const isPasteBin = node => isElement$6(node) && node.id === 'mcepastebin';\n editor.on('AfterSetSelectionRange', e => {\n const rng = e.range;\n const parent = rng.startContainer.parentElement;\n if (!isRangeInCaretContainer(rng) && !isPasteBin(parent)) {\n hideFakeCaret();\n }\n if (!isFakeSelectionElement(parent)) {\n removeElementSelection();\n }\n });\n init$2(editor);\n setup$4(editor);\n setup$3(editor);\n };\n const isWithinCaretContainer = node => isCaretContainer$2(node) || startsWithCaretContainer$1(node) || endsWithCaretContainer$1(node);\n const isRangeInCaretContainer = rng => isWithinCaretContainer(rng.startContainer) || isWithinCaretContainer(rng.endContainer);\n const normalizeVoidElementSelection = rng => {\n const voidElements = editor.schema.getVoidElements();\n const newRng = dom.createRng();\n const startContainer = rng.startContainer;\n const startOffset = rng.startOffset;\n const endContainer = rng.endContainer;\n const endOffset = rng.endOffset;\n if (has$2(voidElements, startContainer.nodeName.toLowerCase())) {\n if (startOffset === 0) {\n newRng.setStartBefore(startContainer);\n } else {\n newRng.setStartAfter(startContainer);\n }\n } else {\n newRng.setStart(startContainer, startOffset);\n }\n if (has$2(voidElements, endContainer.nodeName.toLowerCase())) {\n if (endOffset === 0) {\n newRng.setEndBefore(endContainer);\n } else {\n newRng.setEndAfter(endContainer);\n }\n } else {\n newRng.setEnd(endContainer, endOffset);\n }\n return newRng;\n };\n const setupOffscreenSelection = (node, targetClone) => {\n const body = SugarElement.fromDom(editor.getBody());\n const doc = editor.getDoc();\n const realSelectionContainer = descendant$1(body, '#' + realSelectionId).getOrThunk(() => {\n const newContainer = SugarElement.fromHtml('
    ', doc);\n set$4(newContainer, 'id', realSelectionId);\n append$1(body, newContainer);\n return newContainer;\n });\n const newRange = dom.createRng();\n empty(realSelectionContainer);\n append(realSelectionContainer, [\n SugarElement.fromText(nbsp, doc),\n SugarElement.fromDom(targetClone),\n SugarElement.fromText(nbsp, doc)\n ]);\n newRange.setStart(realSelectionContainer.dom.firstChild, 1);\n newRange.setEnd(realSelectionContainer.dom.lastChild, 0);\n setAll(realSelectionContainer, { top: dom.getPos(node, editor.getBody()).y + 'px' });\n focus$1(realSelectionContainer);\n const sel = selection.getSel();\n if (sel) {\n sel.removeAllRanges();\n sel.addRange(newRange);\n }\n return newRange;\n };\n const selectElement = elm => {\n const targetClone = elm.cloneNode(true);\n const e = editor.dispatch('ObjectSelected', {\n target: elm,\n targetClone\n });\n if (e.isDefaultPrevented()) {\n return null;\n }\n const range = setupOffscreenSelection(elm, e.targetClone);\n const nodeElm = SugarElement.fromDom(elm);\n each$e(descendants(SugarElement.fromDom(editor.getBody()), `*[${ elementSelectionAttr }]`), elm => {\n if (!eq(nodeElm, elm)) {\n remove$9(elm, elementSelectionAttr);\n }\n });\n if (!dom.getAttrib(elm, elementSelectionAttr)) {\n elm.setAttribute(elementSelectionAttr, '1');\n }\n selectedElement = elm;\n hideFakeCaret();\n return range;\n };\n const setElementSelection = (range, forward) => {\n if (!range) {\n return null;\n }\n if (range.collapsed) {\n if (!isRangeInCaretContainer(range)) {\n const dir = forward ? 1 : -1;\n const caretPosition = getNormalizedRangeEndPoint(dir, rootNode, range);\n const beforeNode = caretPosition.getNode(!forward);\n if (isNonNullable(beforeNode)) {\n if (isFakeCaretTarget(beforeNode)) {\n return showCaret(dir, beforeNode, forward ? !caretPosition.isAtEnd() : false, false);\n }\n if (isCaretContainerInline(beforeNode) && isContentEditableFalse$b(beforeNode.nextSibling)) {\n const rng = dom.createRng();\n rng.setStart(beforeNode, 0);\n rng.setEnd(beforeNode, 0);\n return rng;\n }\n }\n const afterNode = caretPosition.getNode(forward);\n if (isNonNullable(afterNode)) {\n if (isFakeCaretTarget(afterNode)) {\n return showCaret(dir, afterNode, forward ? false : !caretPosition.isAtEnd(), false);\n }\n if (isCaretContainerInline(afterNode) && isContentEditableFalse$b(afterNode.previousSibling)) {\n const rng = dom.createRng();\n rng.setStart(afterNode, 1);\n rng.setEnd(afterNode, 1);\n return rng;\n }\n }\n }\n return null;\n }\n let startContainer = range.startContainer;\n let startOffset = range.startOffset;\n const endOffset = range.endOffset;\n if (isText$b(startContainer) && startOffset === 0 && isContentEditableFalse(startContainer.parentNode)) {\n startContainer = startContainer.parentNode;\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (!isElement$6(startContainer)) {\n return null;\n }\n if (endOffset === startOffset + 1 && startContainer === range.endContainer) {\n const node = startContainer.childNodes[startOffset];\n if (isFakeSelectionTargetElement(node)) {\n return selectElement(node);\n }\n }\n return null;\n };\n const removeElementSelection = () => {\n if (selectedElement) {\n selectedElement.removeAttribute(elementSelectionAttr);\n }\n descendant$1(SugarElement.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$4);\n selectedElement = null;\n };\n const destroy = () => {\n fakeCaret.destroy();\n selectedElement = null;\n };\n const hideFakeCaret = () => {\n fakeCaret.hide();\n };\n if (!isRtc(editor)) {\n registerEvents();\n }\n return {\n showCaret,\n showBlockCaretContainer,\n hideFakeCaret,\n destroy\n };\n };\n\n const getNormalizedTextOffset = (container, offset) => {\n let normalizedOffset = offset;\n for (let node = container.previousSibling; isText$b(node); node = node.previousSibling) {\n normalizedOffset += node.data.length;\n }\n return normalizedOffset;\n };\n const generatePath = (dom, root, node, offset, normalized) => {\n if (isText$b(node) && (offset < 0 || offset > node.data.length)) {\n return [];\n }\n const p = normalized && isText$b(node) ? [getNormalizedTextOffset(node, offset)] : [offset];\n let current = node;\n while (current !== root && current.parentNode) {\n p.push(dom.nodeIndex(current, normalized));\n current = current.parentNode;\n }\n return current === root ? p.reverse() : [];\n };\n const generatePathRange = (dom, root, startNode, startOffset, endNode, endOffset, normalized = false) => {\n const start = generatePath(dom, root, startNode, startOffset, normalized);\n const end = generatePath(dom, root, endNode, endOffset, normalized);\n return {\n start,\n end\n };\n };\n const resolvePath = (root, path) => {\n const nodePath = path.slice();\n const offset = nodePath.pop();\n if (!isNumber(offset)) {\n return Optional.none();\n } else {\n const resolvedNode = foldl(nodePath, (optNode, index) => optNode.bind(node => Optional.from(node.childNodes[index])), Optional.some(root));\n return resolvedNode.bind(node => {\n if (isText$b(node) && (offset < 0 || offset > node.data.length)) {\n return Optional.none();\n } else {\n return Optional.some({\n node,\n offset\n });\n }\n });\n }\n };\n const resolvePathRange = (root, range) => resolvePath(root, range.start).bind(({\n node: startNode,\n offset: startOffset\n }) => resolvePath(root, range.end).map(({\n node: endNode,\n offset: endOffset\n }) => {\n const rng = document.createRange();\n rng.setStart(startNode, startOffset);\n rng.setEnd(endNode, endOffset);\n return rng;\n }));\n const generatePathRangeFromRange = (dom, root, range, normalized = false) => generatePathRange(dom, root, range.startContainer, range.startOffset, range.endContainer, range.endOffset, normalized);\n\n const cleanEmptyNodes = (dom, node, isRoot) => {\n if (node && dom.isEmpty(node) && !isRoot(node)) {\n const parent = node.parentNode;\n dom.remove(node, isText$b(node.firstChild) && isWhitespaceText(node.firstChild.data));\n cleanEmptyNodes(dom, parent, isRoot);\n }\n };\n const deleteRng = (dom, rng, isRoot, clean = true) => {\n const startParent = rng.startContainer.parentNode;\n const endParent = rng.endContainer.parentNode;\n rng.deleteContents();\n if (clean && !isRoot(rng.startContainer)) {\n if (isText$b(rng.startContainer) && rng.startContainer.data.length === 0) {\n dom.remove(rng.startContainer);\n }\n if (isText$b(rng.endContainer) && rng.endContainer.data.length === 0) {\n dom.remove(rng.endContainer);\n }\n cleanEmptyNodes(dom, startParent, isRoot);\n if (startParent !== endParent) {\n cleanEmptyNodes(dom, endParent, isRoot);\n }\n }\n };\n const getParentBlock = (editor, rng) => Optional.from(editor.dom.getParent(rng.startContainer, editor.dom.isBlock));\n const resolveFromDynamicPatterns = (patternSet, block, beforeText) => {\n const dynamicPatterns = patternSet.dynamicPatternsLookup({\n text: beforeText,\n block\n });\n return {\n ...patternSet,\n blockPatterns: getBlockPatterns(dynamicPatterns).concat(patternSet.blockPatterns),\n inlinePatterns: getInlinePatterns(dynamicPatterns).concat(patternSet.inlinePatterns)\n };\n };\n const getBeforeText = (dom, block, node, offset) => {\n const rng = dom.createRng();\n rng.setStart(block, 0);\n rng.setEnd(node, offset);\n return rng.toString();\n };\n\n const newMarker = (dom, id) => dom.create('span', {\n 'data-mce-type': 'bookmark',\n id\n });\n const rangeFromMarker = (dom, marker) => {\n const rng = dom.createRng();\n rng.setStartAfter(marker.start);\n rng.setEndBefore(marker.end);\n return rng;\n };\n const createMarker = (dom, markerPrefix, pathRange) => {\n const rng = resolvePathRange(dom.getRoot(), pathRange).getOrDie('Unable to resolve path range');\n const startNode = rng.startContainer;\n const endNode = rng.endContainer;\n const textEnd = rng.endOffset === 0 ? endNode : endNode.splitText(rng.endOffset);\n const textStart = rng.startOffset === 0 ? startNode : startNode.splitText(rng.startOffset);\n const startParentNode = textStart.parentNode;\n const endParentNode = textEnd.parentNode;\n return {\n prefix: markerPrefix,\n end: endParentNode.insertBefore(newMarker(dom, markerPrefix + '-end'), textEnd),\n start: startParentNode.insertBefore(newMarker(dom, markerPrefix + '-start'), textStart)\n };\n };\n const removeMarker = (dom, marker, isRoot) => {\n cleanEmptyNodes(dom, dom.get(marker.prefix + '-end'), isRoot);\n cleanEmptyNodes(dom, dom.get(marker.prefix + '-start'), isRoot);\n };\n\n const isReplacementPattern = pattern => pattern.start.length === 0;\n const matchesPattern = patternContent => (element, offset) => {\n const text = element.data;\n const searchText = text.substring(0, offset);\n const startEndIndex = searchText.lastIndexOf(patternContent.charAt(patternContent.length - 1));\n const startIndex = searchText.lastIndexOf(patternContent);\n if (startIndex !== -1) {\n return startIndex + patternContent.length;\n } else if (startEndIndex !== -1) {\n return startEndIndex + 1;\n } else {\n return -1;\n }\n };\n const findPatternStartFromSpot = (dom, pattern, block, spot) => {\n const startPattern = pattern.start;\n const startSpot = repeatLeft(dom, spot.container, spot.offset, matchesPattern(startPattern), block);\n return startSpot.bind(spot => {\n var _a, _b;\n const startPatternIndex = (_b = (_a = block.textContent) === null || _a === void 0 ? void 0 : _a.indexOf(startPattern)) !== null && _b !== void 0 ? _b : -1;\n const isCompleteMatch = startPatternIndex !== -1 && spot.offset >= startPatternIndex + startPattern.length;\n if (isCompleteMatch) {\n const rng = dom.createRng();\n rng.setStart(spot.container, spot.offset - startPattern.length);\n rng.setEnd(spot.container, spot.offset);\n return Optional.some(rng);\n } else {\n const offset = spot.offset - startPattern.length;\n return scanLeft(spot.container, offset, block).map(nextSpot => {\n const rng = dom.createRng();\n rng.setStart(nextSpot.container, nextSpot.offset);\n rng.setEnd(spot.container, spot.offset);\n return rng;\n }).filter(rng => rng.toString() === startPattern).orThunk(() => findPatternStartFromSpot(dom, pattern, block, point(spot.container, 0)));\n }\n });\n };\n const findPatternStart = (dom, pattern, node, offset, block, requireGap = false) => {\n if (pattern.start.length === 0 && !requireGap) {\n const rng = dom.createRng();\n rng.setStart(node, offset);\n rng.setEnd(node, offset);\n return Optional.some(rng);\n }\n return textBefore(node, offset, block).bind(spot => {\n const start = findPatternStartFromSpot(dom, pattern, block, spot);\n return start.bind(startRange => {\n var _a;\n if (requireGap) {\n if (startRange.endContainer === spot.container && startRange.endOffset === spot.offset) {\n return Optional.none();\n } else if (spot.offset === 0 && ((_a = startRange.endContainer.textContent) === null || _a === void 0 ? void 0 : _a.length) === startRange.endOffset) {\n return Optional.none();\n }\n }\n return Optional.some(startRange);\n });\n });\n };\n const findPattern$3 = (editor, block, details, normalizedMatches) => {\n const dom = editor.dom;\n const root = dom.getRoot();\n const pattern = details.pattern;\n const endNode = details.position.container;\n const endOffset = details.position.offset;\n return scanLeft(endNode, endOffset - details.pattern.end.length, block).bind(spot => {\n const endPathRng = generatePathRange(dom, root, spot.container, spot.offset, endNode, endOffset, normalizedMatches);\n if (isReplacementPattern(pattern)) {\n return Optional.some({\n matches: [{\n pattern,\n startRng: endPathRng,\n endRng: endPathRng\n }],\n position: spot\n });\n } else {\n const resultsOpt = findPatternsRec(editor, details.remainingPatterns, spot.container, spot.offset, block, normalizedMatches);\n const results = resultsOpt.getOr({\n matches: [],\n position: spot\n });\n const pos = results.position;\n const start = findPatternStart(dom, pattern, pos.container, pos.offset, block, resultsOpt.isNone());\n return start.map(startRng => {\n const startPathRng = generatePathRangeFromRange(dom, root, startRng, normalizedMatches);\n return {\n matches: results.matches.concat([{\n pattern,\n startRng: startPathRng,\n endRng: endPathRng\n }]),\n position: point(startRng.startContainer, startRng.startOffset)\n };\n });\n }\n });\n };\n const findPatternsRec = (editor, patterns, node, offset, block, normalizedMatches) => {\n const dom = editor.dom;\n return textBefore(node, offset, dom.getRoot()).bind(endSpot => {\n const text = getBeforeText(dom, block, node, offset);\n for (let i = 0; i < patterns.length; i++) {\n const pattern = patterns[i];\n if (!endsWith(text, pattern.end)) {\n continue;\n }\n const patternsWithoutCurrent = patterns.slice();\n patternsWithoutCurrent.splice(i, 1);\n const result = findPattern$3(editor, block, {\n pattern,\n remainingPatterns: patternsWithoutCurrent,\n position: endSpot\n }, normalizedMatches);\n if (result.isNone() && offset > 0) {\n return findPatternsRec(editor, patterns, node, offset - 1, block, normalizedMatches);\n }\n if (result.isSome()) {\n return result;\n }\n }\n return Optional.none();\n });\n };\n const applyPattern$2 = (editor, pattern, patternRange) => {\n editor.selection.setRng(patternRange);\n if (pattern.type === 'inline-format') {\n each$e(pattern.format, format => {\n editor.formatter.apply(format);\n });\n } else {\n editor.execCommand(pattern.cmd, false, pattern.value);\n }\n };\n const applyReplacementPattern = (editor, pattern, marker, isRoot) => {\n const markerRange = rangeFromMarker(editor.dom, marker);\n deleteRng(editor.dom, markerRange, isRoot);\n applyPattern$2(editor, pattern, markerRange);\n };\n const applyPatternWithContent = (editor, pattern, startMarker, endMarker, isRoot) => {\n const dom = editor.dom;\n const markerEndRange = rangeFromMarker(dom, endMarker);\n const markerStartRange = rangeFromMarker(dom, startMarker);\n deleteRng(dom, markerStartRange, isRoot);\n deleteRng(dom, markerEndRange, isRoot);\n const patternMarker = {\n prefix: startMarker.prefix,\n start: startMarker.end,\n end: endMarker.start\n };\n const patternRange = rangeFromMarker(dom, patternMarker);\n applyPattern$2(editor, pattern, patternRange);\n };\n const addMarkers = (dom, matches) => {\n const markerPrefix = generate$1('mce_textpattern');\n const matchesWithEnds = foldr(matches, (acc, match) => {\n const endMarker = createMarker(dom, markerPrefix + `_end${ acc.length }`, match.endRng);\n return acc.concat([{\n ...match,\n endMarker\n }]);\n }, []);\n return foldr(matchesWithEnds, (acc, match) => {\n const idx = matchesWithEnds.length - acc.length - 1;\n const startMarker = isReplacementPattern(match.pattern) ? match.endMarker : createMarker(dom, markerPrefix + `_start${ idx }`, match.startRng);\n return acc.concat([{\n ...match,\n startMarker\n }]);\n }, []);\n };\n const sortPatterns$1 = patterns => sort(patterns, (a, b) => b.end.length - a.end.length);\n const getBestMatches = (matches, matchesWithSortedPatterns) => {\n const hasSameMatches = forall(matches, match => exists(matchesWithSortedPatterns, sortedMatch => match.pattern.start === sortedMatch.pattern.start && match.pattern.end === sortedMatch.pattern.end));\n if (matches.length === matchesWithSortedPatterns.length) {\n if (hasSameMatches) {\n return matches;\n } else {\n return matchesWithSortedPatterns;\n }\n }\n return matches.length > matchesWithSortedPatterns.length ? matches : matchesWithSortedPatterns;\n };\n const findPatterns$2 = (editor, block, node, offset, patternSet, normalizedMatches) => {\n const matches = findPatternsRec(editor, patternSet.inlinePatterns, node, offset, block, normalizedMatches).fold(() => [], result => result.matches);\n const matchesWithSortedPatterns = findPatternsRec(editor, sortPatterns$1(patternSet.inlinePatterns), node, offset, block, normalizedMatches).fold(() => [], result => result.matches);\n return getBestMatches(matches, matchesWithSortedPatterns);\n };\n const applyMatches$2 = (editor, matches) => {\n if (matches.length === 0) {\n return;\n }\n const dom = editor.dom;\n const bookmark = editor.selection.getBookmark();\n const matchesWithMarkers = addMarkers(dom, matches);\n each$e(matchesWithMarkers, match => {\n const block = dom.getParent(match.startMarker.start, dom.isBlock);\n const isRoot = node => node === block;\n if (isReplacementPattern(match.pattern)) {\n applyReplacementPattern(editor, match.pattern, match.endMarker, isRoot);\n } else {\n applyPatternWithContent(editor, match.pattern, match.startMarker, match.endMarker, isRoot);\n }\n removeMarker(dom, match.endMarker, isRoot);\n removeMarker(dom, match.startMarker, isRoot);\n });\n editor.selection.moveToBookmark(bookmark);\n };\n\n const stripPattern$1 = (dom, block, pattern) => {\n return textAfter(block, 0, block).map(spot => {\n const node = spot.container;\n scanRight(node, pattern.start.length, block).each(end => {\n const rng = dom.createRng();\n rng.setStart(node, 0);\n rng.setEnd(end.container, end.offset);\n deleteRng(dom, rng, e => e === block);\n });\n return node;\n });\n };\n const createApplyPattern = stripPattern => (editor, match) => {\n const dom = editor.dom;\n const pattern = match.pattern;\n const rng = resolvePathRange(dom.getRoot(), match.range).getOrDie('Unable to resolve path range');\n const isBlockFormatName = (name, formatter) => {\n const formatSet = formatter.get(name);\n return isArray$1(formatSet) && head(formatSet).exists(format => has$2(format, 'block'));\n };\n getParentBlock(editor, rng).each(block => {\n if (pattern.type === 'block-format') {\n if (isBlockFormatName(pattern.format, editor.formatter)) {\n editor.undoManager.transact(() => {\n stripPattern(editor.dom, block, pattern);\n editor.formatter.apply(pattern.format);\n });\n }\n } else if (pattern.type === 'block-command') {\n editor.undoManager.transact(() => {\n stripPattern(editor.dom, block, pattern);\n editor.execCommand(pattern.cmd, false, pattern.value);\n });\n }\n });\n return true;\n };\n const sortPatterns = patterns => sort(patterns, (a, b) => b.start.length - a.start.length);\n const findPattern$2 = predicate => (patterns, text) => {\n const sortedPatterns = sortPatterns(patterns);\n const nuText = text.replace(nbsp, ' ');\n return find$2(sortedPatterns, pattern => predicate(pattern, text, nuText));\n };\n const createFindPatterns = (findPattern, skipFullMatch) => (editor, block, patternSet, normalizedMatches, text) => {\n var _a;\n if (text === void 0) {\n text = (_a = block.textContent) !== null && _a !== void 0 ? _a : '';\n }\n const dom = editor.dom;\n const forcedRootBlock = getForcedRootBlock(editor);\n if (!dom.is(block, forcedRootBlock)) {\n return [];\n }\n return findPattern(patternSet.blockPatterns, text).map(pattern => {\n if (skipFullMatch && Tools.trim(text).length === pattern.start.length) {\n return [];\n }\n return [{\n pattern,\n range: generatePathRange(dom, dom.getRoot(), block, 0, block, 0, normalizedMatches)\n }];\n }).getOr([]);\n };\n\n const startsWithSingleSpace = s => /^\\s[^\\s]/.test(s);\n const stripPattern = (dom, block, pattern) => {\n stripPattern$1(dom, block, pattern).each(node => {\n const text = SugarElement.fromDom(node);\n const textContent = get$3(text);\n if (startsWithSingleSpace(textContent)) {\n set(text, textContent.slice(1));\n }\n });\n };\n const applyPattern$1 = createApplyPattern(stripPattern);\n const findPattern$1 = findPattern$2((pattern, text, nuText) => text.indexOf(pattern.start) === 0 || nuText.indexOf(pattern.start) === 0);\n const findPatterns$1 = createFindPatterns(findPattern$1, true);\n const getMatches$1 = (editor, patternSet) => {\n const rng = editor.selection.getRng();\n return getParentBlock(editor, rng).map(block => {\n var _a;\n const offset = Math.max(0, rng.startOffset);\n const dynamicPatternSet = resolveFromDynamicPatterns(patternSet, block, (_a = block.textContent) !== null && _a !== void 0 ? _a : '');\n const inlineMatches = findPatterns$2(editor, block, rng.startContainer, offset, dynamicPatternSet, true);\n const blockMatches = findPatterns$1(editor, block, dynamicPatternSet, true);\n return {\n inlineMatches,\n blockMatches\n };\n }).filter(({inlineMatches, blockMatches}) => blockMatches.length > 0 || inlineMatches.length > 0);\n };\n const applyMatches$1 = (editor, matches) => {\n if (matches.length === 0) {\n return;\n }\n const bookmark = editor.selection.getBookmark();\n each$e(matches, match => applyPattern$1(editor, match));\n editor.selection.moveToBookmark(bookmark);\n };\n\n const applyPattern = createApplyPattern(stripPattern$1);\n const findPattern = findPattern$2((pattern, text, nuText) => text === pattern.start || nuText === pattern.start);\n const findPatterns = createFindPatterns(findPattern, false);\n const getMatches = (editor, patternSet) => {\n const rng = editor.selection.getRng();\n return getParentBlock(editor, rng).map(block => {\n const offset = Math.max(0, rng.startOffset);\n const beforeText = getBeforeText(editor.dom, block, rng.startContainer, offset);\n const dynamicPatternSet = resolveFromDynamicPatterns(patternSet, block, beforeText);\n return findPatterns(editor, block, dynamicPatternSet, false, beforeText);\n }).filter(matches => matches.length > 0);\n };\n const applyMatches = (editor, matches) => {\n each$e(matches, match => applyPattern(editor, match));\n };\n\n const handleEnter = (editor, patternSet) => getMatches$1(editor, patternSet).fold(never, ({inlineMatches, blockMatches}) => {\n editor.undoManager.add();\n editor.undoManager.extra(() => {\n editor.execCommand('mceInsertNewLine');\n }, () => {\n insert$5(editor);\n applyMatches$2(editor, inlineMatches);\n applyMatches$1(editor, blockMatches);\n const range = editor.selection.getRng();\n const spot = textBefore(range.startContainer, range.startOffset, editor.dom.getRoot());\n editor.execCommand('mceInsertNewLine');\n spot.each(s => {\n const node = s.container;\n if (node.data.charAt(s.offset - 1) === zeroWidth) {\n node.deleteData(s.offset - 1, 1);\n cleanEmptyNodes(editor.dom, node.parentNode, e => e === editor.dom.getRoot());\n }\n });\n });\n return true;\n });\n const handleInlineKey = (editor, patternSet) => {\n const rng = editor.selection.getRng();\n getParentBlock(editor, rng).map(block => {\n const offset = Math.max(0, rng.startOffset - 1);\n const beforeText = getBeforeText(editor.dom, block, rng.startContainer, offset);\n const dynamicPatternSet = resolveFromDynamicPatterns(patternSet, block, beforeText);\n const inlineMatches = findPatterns$2(editor, block, rng.startContainer, offset, dynamicPatternSet, false);\n if (inlineMatches.length > 0) {\n editor.undoManager.transact(() => {\n applyMatches$2(editor, inlineMatches);\n });\n }\n });\n };\n const handleBlockPatternOnSpace = (editor, patternSet) => getMatches(editor, patternSet).fold(never, matches => {\n editor.undoManager.transact(() => {\n applyMatches(editor, matches);\n });\n return true;\n });\n const checkKeyEvent = (codes, event, predicate) => {\n for (let i = 0; i < codes.length; i++) {\n if (predicate(codes[i], event)) {\n return true;\n }\n }\n return false;\n };\n const checkKeyCode = (codes, event) => checkKeyEvent(codes, event, (code, event) => {\n return code === event.keyCode && !VK.modifierPressed(event);\n });\n const checkCharCode = (chars, event) => checkKeyEvent(chars, event, (chr, event) => {\n return chr.charCodeAt(0) === event.charCode;\n });\n\n const setup$2 = editor => {\n const charCodes = [\n ',',\n '.',\n ';',\n ':',\n '!',\n '?'\n ];\n const keyCodes = [32];\n const getPatternSet = () => createPatternSet(getTextPatterns(editor).filter(pattern => {\n if (pattern.type === 'inline-command' || pattern.type === 'block-command') {\n return editor.queryCommandSupported(pattern.cmd);\n }\n return true;\n }), getTextPatternsLookup(editor));\n const hasDynamicPatterns = () => hasTextPatternsLookup(editor);\n editor.on('keydown', e => {\n if (e.keyCode === 13 && !VK.modifierPressed(e) && editor.selection.isCollapsed() && editor.selection.isEditable()) {\n const patternSet = filterByTrigger(getPatternSet(), 'enter');\n const hasPatterns = patternSet.inlinePatterns.length > 0 || patternSet.blockPatterns.length > 0 || hasDynamicPatterns();\n if (hasPatterns && handleEnter(editor, patternSet)) {\n e.preventDefault();\n }\n }\n }, true);\n editor.on('keydown', e => {\n if (e.keyCode === 32 && editor.selection.isCollapsed() && editor.selection.isEditable()) {\n const patternSet = filterByTrigger(getPatternSet(), 'space');\n const hasPatterns = patternSet.blockPatterns.length > 0 || hasDynamicPatterns();\n if (hasPatterns && handleBlockPatternOnSpace(editor, patternSet)) {\n e.preventDefault();\n }\n }\n }, true);\n const handleInlineTrigger = () => {\n if (editor.selection.isCollapsed() && editor.selection.isEditable()) {\n const patternSet = filterByTrigger(getPatternSet(), 'space');\n const hasPatterns = patternSet.inlinePatterns.length > 0 || hasDynamicPatterns();\n if (hasPatterns) {\n handleInlineKey(editor, patternSet);\n }\n }\n };\n editor.on('keyup', e => {\n if (checkKeyCode(keyCodes, e)) {\n handleInlineTrigger();\n }\n });\n editor.on('keypress', e => {\n if (checkCharCode(charCodes, e)) {\n Delay.setEditorTimeout(editor, handleInlineTrigger);\n }\n });\n };\n\n const setup$1 = editor => {\n setup$2(editor);\n };\n\n const Quirks = editor => {\n const each = Tools.each;\n const BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, parser = editor.parser;\n const browser = Env.browser;\n const isGecko = browser.isFirefox();\n const isWebKit = browser.isChromium() || browser.isSafari();\n const isiOS = Env.deviceType.isiPhone() || Env.deviceType.isiPad();\n const isMac = Env.os.isMacOS() || Env.os.isiOS();\n const setEditorCommandState = (cmd, state) => {\n try {\n editor.getDoc().execCommand(cmd, false, String(state));\n } catch (_a) {\n }\n };\n const isDefaultPrevented = e => {\n return e.isDefaultPrevented();\n };\n const emptyEditorWhenDeleting = () => {\n const serializeRng = rng => {\n const body = dom.create('body');\n const contents = rng.cloneContents();\n body.appendChild(contents);\n return selection.serializer.serialize(body, { format: 'html' });\n };\n const allContentsSelected = rng => {\n const selection = serializeRng(rng);\n const allRng = dom.createRng();\n allRng.selectNode(editor.getBody());\n const allSelection = serializeRng(allRng);\n return selection === allSelection;\n };\n editor.on('keydown', e => {\n const keyCode = e.keyCode;\n if (!isDefaultPrevented(e) && (keyCode === DELETE || keyCode === BACKSPACE) && editor.selection.isEditable()) {\n const isCollapsed = editor.selection.isCollapsed();\n const body = editor.getBody();\n if (isCollapsed && !isEmptyNode(editor.schema, body)) {\n return;\n }\n if (!isCollapsed && !allContentsSelected(editor.selection.getRng())) {\n return;\n }\n e.preventDefault();\n editor.setContent('');\n if (body.firstChild && dom.isBlock(body.firstChild)) {\n editor.selection.setCursorLocation(body.firstChild, 0);\n } else {\n editor.selection.setCursorLocation(body, 0);\n }\n editor.nodeChanged();\n }\n });\n };\n const selectAll = () => {\n editor.shortcuts.add('meta+a', null, 'SelectAll');\n };\n const documentElementEditingFocus = () => {\n if (!editor.inline) {\n dom.bind(editor.getDoc(), 'mousedown mouseup', e => {\n let rng;\n if (e.target === editor.getDoc().documentElement) {\n rng = selection.getRng();\n editor.getBody().focus();\n if (e.type === 'mousedown') {\n if (isCaretContainer$2(rng.startContainer)) {\n return;\n }\n selection.placeCaretAt(e.clientX, e.clientY);\n } else {\n selection.setRng(rng);\n }\n }\n });\n }\n };\n const removeHrOnBackspace = () => {\n editor.on('keydown', e => {\n if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n if (!editor.getBody().getElementsByTagName('hr').length) {\n return;\n }\n if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n const node = selection.getNode();\n const previousSibling = node.previousSibling;\n if (node.nodeName === 'HR') {\n dom.remove(node);\n e.preventDefault();\n return;\n }\n if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'hr') {\n dom.remove(previousSibling);\n e.preventDefault();\n }\n }\n }\n });\n };\n const focusBody = () => {\n if (!Range.prototype.getClientRects) {\n editor.on('mousedown', e => {\n if (!isDefaultPrevented(e) && e.target.nodeName === 'HTML') {\n const body = editor.getBody();\n body.blur();\n Delay.setEditorTimeout(editor, () => {\n body.focus();\n });\n }\n });\n }\n };\n const selectControlElements = () => {\n const visualAidsAnchorClass = getVisualAidsAnchorClass(editor);\n editor.on('click', e => {\n const target = e.target;\n if (/^(IMG|HR)$/.test(target.nodeName) && dom.isEditable(target)) {\n e.preventDefault();\n editor.selection.select(target);\n editor.nodeChanged();\n }\n if (target.nodeName === 'A' && dom.hasClass(target, visualAidsAnchorClass) && target.childNodes.length === 0 && dom.isEditable(target.parentNode)) {\n e.preventDefault();\n selection.select(target);\n }\n });\n };\n const removeStylesWhenDeletingAcrossBlockElements = () => {\n const getAttributeApplyFunction = () => {\n const template = dom.getAttribs(selection.getStart().cloneNode(false));\n return () => {\n const target = selection.getStart();\n if (target !== editor.getBody()) {\n dom.setAttrib(target, 'style', null);\n each(template, attr => {\n target.setAttributeNode(attr.cloneNode(true));\n });\n }\n };\n };\n const isSelectionAcrossElements = () => {\n return !selection.isCollapsed() && dom.getParent(selection.getStart(), dom.isBlock) !== dom.getParent(selection.getEnd(), dom.isBlock);\n };\n editor.on('keypress', e => {\n let applyAttributes;\n if (!isDefaultPrevented(e) && (e.keyCode === 8 || e.keyCode === 46) && isSelectionAcrossElements()) {\n applyAttributes = getAttributeApplyFunction();\n editor.getDoc().execCommand('delete', false);\n applyAttributes();\n e.preventDefault();\n return false;\n } else {\n return true;\n }\n });\n dom.bind(editor.getDoc(), 'cut', e => {\n if (!isDefaultPrevented(e) && isSelectionAcrossElements()) {\n const applyAttributes = getAttributeApplyFunction();\n Delay.setEditorTimeout(editor, () => {\n applyAttributes();\n });\n }\n });\n };\n const disableBackspaceIntoATable = () => {\n editor.on('keydown', e => {\n if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n const previousSibling = selection.getNode().previousSibling;\n if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'table') {\n e.preventDefault();\n return false;\n }\n }\n }\n return true;\n });\n };\n const removeBlockQuoteOnBackSpace = () => {\n editor.on('keydown', e => {\n if (isDefaultPrevented(e) || e.keyCode !== VK.BACKSPACE) {\n return;\n }\n let rng = selection.getRng();\n const container = rng.startContainer;\n const offset = rng.startOffset;\n const root = dom.getRoot();\n let parent = container;\n if (!rng.collapsed || offset !== 0) {\n return;\n }\n while (parent.parentNode && parent.parentNode.firstChild === parent && parent.parentNode !== root) {\n parent = parent.parentNode;\n }\n if (parent.nodeName === 'BLOCKQUOTE') {\n editor.formatter.toggle('blockquote', undefined, parent);\n rng = dom.createRng();\n rng.setStart(container, 0);\n rng.setEnd(container, 0);\n selection.setRng(rng);\n }\n });\n };\n const setGeckoEditingOptions = () => {\n const setOpts = () => {\n setEditorCommandState('StyleWithCSS', false);\n setEditorCommandState('enableInlineTableEditing', false);\n if (!getObjectResizing(editor)) {\n setEditorCommandState('enableObjectResizing', false);\n }\n };\n if (!isReadOnly$1(editor)) {\n editor.on('BeforeExecCommand mousedown', setOpts);\n }\n };\n const addBrAfterLastLinks = () => {\n const fixLinks = () => {\n each(dom.select('a:not([data-mce-block])'), node => {\n var _a;\n let parentNode = node.parentNode;\n const root = dom.getRoot();\n if ((parentNode === null || parentNode === void 0 ? void 0 : parentNode.lastChild) === node) {\n while (parentNode && !dom.isBlock(parentNode)) {\n if (((_a = parentNode.parentNode) === null || _a === void 0 ? void 0 : _a.lastChild) !== parentNode || parentNode === root) {\n return;\n }\n parentNode = parentNode.parentNode;\n }\n dom.add(parentNode, 'br', { 'data-mce-bogus': 1 });\n }\n });\n };\n editor.on('SetContent ExecCommand', e => {\n if (e.type === 'setcontent' || e.command === 'mceInsertLink') {\n fixLinks();\n }\n });\n };\n const setDefaultBlockType = () => {\n editor.on('init', () => {\n setEditorCommandState('DefaultParagraphSeparator', getForcedRootBlock(editor));\n });\n };\n const isAllContentSelected = editor => {\n const body = editor.getBody();\n const rng = editor.selection.getRng();\n return rng.startContainer === rng.endContainer && rng.startContainer === body && rng.startOffset === 0 && rng.endOffset === body.childNodes.length;\n };\n const normalizeSelection = () => {\n editor.on('keyup focusin mouseup', e => {\n if (!VK.modifierPressed(e) && !isAllContentSelected(editor)) {\n selection.normalize();\n }\n }, true);\n };\n const showBrokenImageIcon = () => {\n editor.contentStyles.push('img:-moz-broken {' + '-moz-force-broken-image-icon:1;' + 'min-width:24px;' + 'min-height:24px' + '}');\n };\n const restoreFocusOnKeyDown = () => {\n if (!editor.inline) {\n editor.on('keydown', () => {\n if (document.activeElement === document.body) {\n editor.getWin().focus();\n }\n });\n }\n };\n const bodyHeight = () => {\n if (!editor.inline) {\n editor.contentStyles.push('body {min-height: 150px}');\n editor.on('click', e => {\n let rng;\n if (e.target.nodeName === 'HTML') {\n rng = editor.selection.getRng();\n editor.getBody().focus();\n editor.selection.setRng(rng);\n editor.selection.normalize();\n editor.nodeChanged();\n }\n });\n }\n };\n const blockCmdArrowNavigation = () => {\n if (isMac) {\n editor.on('keydown', e => {\n if (VK.metaKeyPressed(e) && !e.shiftKey && (e.keyCode === 37 || e.keyCode === 39)) {\n e.preventDefault();\n const selection = editor.selection.getSel();\n selection.modify('move', e.keyCode === 37 ? 'backward' : 'forward', 'lineboundary');\n }\n });\n }\n };\n const tapLinksAndImages = () => {\n editor.on('click', e => {\n let elm = e.target;\n do {\n if (elm.tagName === 'A') {\n e.preventDefault();\n return;\n }\n } while (elm = elm.parentNode);\n });\n editor.contentStyles.push('.mce-content-body {-webkit-touch-callout: none}');\n };\n const blockFormSubmitInsideEditor = () => {\n editor.on('init', () => {\n editor.dom.bind(editor.getBody(), 'submit', e => {\n e.preventDefault();\n });\n });\n };\n const removeAppleInterchangeBrs = () => {\n parser.addNodeFilter('br', nodes => {\n let i = nodes.length;\n while (i--) {\n if (nodes[i].attr('class') === 'Apple-interchange-newline') {\n nodes[i].remove();\n }\n }\n });\n };\n const refreshContentEditable = noop;\n const isHidden = () => {\n if (!isGecko || editor.removed) {\n return false;\n }\n const sel = editor.selection.getSel();\n return !sel || !sel.rangeCount || sel.rangeCount === 0;\n };\n const setupRtc = () => {\n if (isWebKit) {\n documentElementEditingFocus();\n selectControlElements();\n blockFormSubmitInsideEditor();\n selectAll();\n if (isiOS) {\n restoreFocusOnKeyDown();\n bodyHeight();\n tapLinksAndImages();\n }\n }\n if (isGecko) {\n focusBody();\n setGeckoEditingOptions();\n showBrokenImageIcon();\n blockCmdArrowNavigation();\n }\n };\n const setup = () => {\n removeBlockQuoteOnBackSpace();\n emptyEditorWhenDeleting();\n if (!Env.windowsPhone) {\n normalizeSelection();\n }\n if (isWebKit) {\n documentElementEditingFocus();\n selectControlElements();\n setDefaultBlockType();\n blockFormSubmitInsideEditor();\n disableBackspaceIntoATable();\n removeAppleInterchangeBrs();\n if (isiOS) {\n restoreFocusOnKeyDown();\n bodyHeight();\n tapLinksAndImages();\n } else {\n selectAll();\n }\n }\n if (isGecko) {\n removeHrOnBackspace();\n focusBody();\n removeStylesWhenDeletingAcrossBlockElements();\n setGeckoEditingOptions();\n addBrAfterLastLinks();\n showBrokenImageIcon();\n blockCmdArrowNavigation();\n disableBackspaceIntoATable();\n }\n };\n if (isRtc(editor)) {\n setupRtc();\n } else {\n setup();\n }\n return {\n refreshContentEditable,\n isHidden\n };\n };\n\n const isGplKey = key => key.toLowerCase() === 'gpl';\n const isValidGeneratedKey = key => key.length >= 64 && key.length <= 255;\n const validateLicenseKey = key => isGplKey(key) || isValidGeneratedKey(key) ? 'VALID' : 'INVALID';\n const validateEditorLicenseKey = editor => {\n const licenseKey = getLicenseKey(editor);\n const hasApiKey = isString(getApiKey(editor));\n if (!hasApiKey && (isUndefined(licenseKey) || validateLicenseKey(licenseKey) === 'INVALID')) {\n console.warn(`TinyMCE is running in evaluation mode. Provide a valid license key or add license_key: 'gpl' to the init config to agree to the open source license terms. Read more at https://www.tiny.cloud/license-key/`);\n }\n };\n\n const DOM$6 = DOMUtils.DOM;\n const appendStyle = (editor, text) => {\n const body = SugarElement.fromDom(editor.getBody());\n const container = getStyleContainer(getRootNode(body));\n const style = SugarElement.fromTag('style');\n set$4(style, 'type', 'text/css');\n append$1(style, SugarElement.fromText(text));\n append$1(container, style);\n editor.on('remove', () => {\n remove$4(style);\n });\n };\n const getRootName = editor => editor.inline ? editor.getElement().nodeName.toLowerCase() : undefined;\n const removeUndefined = obj => filter$4(obj, v => isUndefined(v) === false);\n const mkParserSettings = editor => {\n const getOption = editor.options.get;\n const blobCache = editor.editorUpload.blobCache;\n return removeUndefined({\n allow_conditional_comments: getOption('allow_conditional_comments'),\n allow_html_data_urls: getOption('allow_html_data_urls'),\n allow_svg_data_urls: getOption('allow_svg_data_urls'),\n allow_html_in_named_anchor: getOption('allow_html_in_named_anchor'),\n allow_script_urls: getOption('allow_script_urls'),\n allow_mathml_annotation_encodings: getOption('allow_mathml_annotation_encodings'),\n allow_unsafe_link_target: getOption('allow_unsafe_link_target'),\n convert_unsafe_embeds: getOption('convert_unsafe_embeds'),\n convert_fonts_to_spans: getOption('convert_fonts_to_spans'),\n fix_list_elements: getOption('fix_list_elements'),\n font_size_legacy_values: getOption('font_size_legacy_values'),\n forced_root_block: getOption('forced_root_block'),\n forced_root_block_attrs: getOption('forced_root_block_attrs'),\n preserve_cdata: getOption('preserve_cdata'),\n inline_styles: getOption('inline_styles'),\n root_name: getRootName(editor),\n sandbox_iframes: getOption('sandbox_iframes'),\n sandbox_iframes_exclusions: getSandboxIframesExclusions(editor),\n sanitize: getOption('xss_sanitization'),\n validate: true,\n blob_cache: blobCache,\n document: editor.getDoc()\n });\n };\n const mkSchemaSettings = editor => {\n const getOption = editor.options.get;\n return removeUndefined({\n custom_elements: getOption('custom_elements'),\n extended_valid_elements: getOption('extended_valid_elements'),\n invalid_elements: getOption('invalid_elements'),\n invalid_styles: getOption('invalid_styles'),\n schema: getOption('schema'),\n valid_children: getOption('valid_children'),\n valid_classes: getOption('valid_classes'),\n valid_elements: getOption('valid_elements'),\n valid_styles: getOption('valid_styles'),\n verify_html: getOption('verify_html'),\n padd_empty_block_inline_children: getOption('format_empty_lines')\n });\n };\n const mkSerializerSettings = editor => {\n const getOption = editor.options.get;\n return {\n ...mkParserSettings(editor),\n ...mkSchemaSettings(editor),\n ...removeUndefined({\n remove_trailing_brs: getOption('remove_trailing_brs'),\n pad_empty_with_br: getOption('pad_empty_with_br'),\n url_converter: getOption('url_converter'),\n url_converter_scope: getOption('url_converter_scope'),\n element_format: getOption('element_format'),\n entities: getOption('entities'),\n entity_encoding: getOption('entity_encoding'),\n indent: getOption('indent'),\n indent_after: getOption('indent_after'),\n indent_before: getOption('indent_before')\n })\n };\n };\n const createParser = editor => {\n const parser = DomParser(mkParserSettings(editor), editor.schema);\n parser.addAttributeFilter('src,href,style,tabindex', (nodes, name) => {\n const dom = editor.dom;\n const internalName = 'data-mce-' + name;\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n let value = node.attr(name);\n if (value && !node.attr(internalName)) {\n if (value.indexOf('data:') === 0 || value.indexOf('blob:') === 0) {\n continue;\n }\n if (name === 'style') {\n value = dom.serializeStyle(dom.parseStyle(value), node.name);\n if (!value.length) {\n value = null;\n }\n node.attr(internalName, value);\n node.attr(name, value);\n } else if (name === 'tabindex') {\n node.attr(internalName, value);\n node.attr(name, null);\n } else {\n node.attr(internalName, editor.convertURL(value, name, node.name));\n }\n }\n }\n });\n parser.addNodeFilter('script', nodes => {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n const type = node.attr('type') || 'no/type';\n if (type.indexOf('mce-') !== 0) {\n node.attr('type', 'mce-' + type);\n }\n }\n });\n if (shouldPreserveCData(editor)) {\n parser.addNodeFilter('#cdata', nodes => {\n var _a;\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n node.type = 8;\n node.name = '#comment';\n node.value = '[CDATA[' + editor.dom.encode((_a = node.value) !== null && _a !== void 0 ? _a : '') + ']]';\n }\n });\n }\n parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', nodes => {\n let i = nodes.length;\n const nonEmptyElements = editor.schema.getNonEmptyElements();\n while (i--) {\n const node = nodes[i];\n if (node.isEmpty(nonEmptyElements) && node.getAll('br').length === 0) {\n node.append(new AstNode('br', 1));\n }\n }\n });\n return parser;\n };\n const autoFocus = editor => {\n const autoFocus = getAutoFocus(editor);\n if (autoFocus) {\n Delay.setEditorTimeout(editor, () => {\n let focusEditor;\n if (autoFocus === true) {\n focusEditor = editor;\n } else {\n focusEditor = editor.editorManager.get(autoFocus);\n }\n if (focusEditor && !focusEditor.destroyed) {\n focusEditor.focus();\n focusEditor.selection.scrollIntoView();\n }\n }, 100);\n }\n };\n const moveSelectionToFirstCaretPosition = editor => {\n const root = editor.dom.getRoot();\n if (!editor.inline && (!hasAnyRanges(editor) || editor.selection.getStart(true) === root)) {\n firstPositionIn(root).each(pos => {\n const node = pos.getNode();\n const caretPos = isTable$2(node) ? firstPositionIn(node).getOr(pos) : pos;\n editor.selection.setRng(caretPos.toRange());\n });\n }\n };\n const initEditor = editor => {\n editor.bindPendingEventDelegates();\n editor.initialized = true;\n fireInit(editor);\n editor.focus(true);\n moveSelectionToFirstCaretPosition(editor);\n editor.nodeChanged({ initial: true });\n const initInstanceCallback = getInitInstanceCallback(editor);\n if (isFunction(initInstanceCallback)) {\n initInstanceCallback.call(editor, editor);\n }\n autoFocus(editor);\n if (isDisabled(editor)) {\n toggleDisabled(editor, true);\n }\n };\n const getStyleSheetLoader$1 = editor => editor.inline ? editor.ui.styleSheetLoader : editor.dom.styleSheetLoader;\n const makeStylesheetLoadingPromises = (editor, css, framedFonts) => {\n const {\n pass: bundledCss,\n fail: normalCss\n } = partition$2(css, name => tinymce.Resource.has(toContentSkinResourceName(name)));\n const bundledPromises = bundledCss.map(url => {\n const css = tinymce.Resource.get(toContentSkinResourceName(url));\n if (isString(css)) {\n return Promise.resolve(getStyleSheetLoader$1(editor).loadRawCss(url, css));\n }\n return Promise.resolve();\n });\n const promises = [\n ...bundledPromises,\n getStyleSheetLoader$1(editor).loadAll(normalCss)\n ];\n if (editor.inline) {\n return promises;\n } else {\n return promises.concat([editor.ui.styleSheetLoader.loadAll(framedFonts)]);\n }\n };\n const loadContentCss = editor => {\n const styleSheetLoader = getStyleSheetLoader$1(editor);\n const fontCss = getFontCss(editor);\n const css = editor.contentCSS;\n const removeCss = () => {\n styleSheetLoader.unloadAll(css);\n if (!editor.inline) {\n editor.ui.styleSheetLoader.unloadAll(fontCss);\n }\n };\n const loaded = () => {\n if (editor.removed) {\n removeCss();\n } else {\n editor.on('remove', removeCss);\n }\n };\n if (editor.contentStyles.length > 0) {\n let contentCssText = '';\n Tools.each(editor.contentStyles, style => {\n contentCssText += style + '\\r\\n';\n });\n editor.dom.addStyle(contentCssText);\n }\n const allStylesheets = Promise.all(makeStylesheetLoadingPromises(editor, css, fontCss)).then(loaded).catch(loaded);\n const contentStyle = getContentStyle(editor);\n if (contentStyle) {\n appendStyle(editor, contentStyle);\n }\n return allStylesheets;\n };\n const preInit = editor => {\n const doc = editor.getDoc(), body = editor.getBody();\n firePreInit(editor);\n if (!shouldBrowserSpellcheck(editor)) {\n doc.body.spellcheck = false;\n DOM$6.setAttrib(body, 'spellcheck', 'false');\n }\n editor.quirks = Quirks(editor);\n firePostRender(editor);\n const directionality = getDirectionality(editor);\n if (directionality !== undefined) {\n body.dir = directionality;\n }\n const protect = getProtect(editor);\n if (protect) {\n editor.on('BeforeSetContent', e => {\n Tools.each(protect, pattern => {\n e.content = e.content.replace(pattern, str => {\n return '';\n });\n });\n });\n }\n editor.on('SetContent', () => {\n editor.addVisual(editor.getBody());\n });\n editor.on('compositionstart compositionend', e => {\n editor.composing = e.type === 'compositionstart';\n });\n };\n const loadInitialContent = editor => {\n if (!isRtc(editor)) {\n editor.load({\n initial: true,\n format: 'html'\n });\n }\n editor.startContent = editor.getContent({ format: 'raw' });\n };\n const initEditorWithInitialContent = editor => {\n if (editor.removed !== true) {\n loadInitialContent(editor);\n initEditor(editor);\n }\n };\n const startProgress = editor => {\n let canceled = false;\n const progressTimeout = setTimeout(() => {\n if (!canceled) {\n editor.setProgressState(true);\n }\n }, 500);\n return () => {\n clearTimeout(progressTimeout);\n canceled = true;\n editor.setProgressState(false);\n };\n };\n const contentBodyLoaded = editor => {\n const targetElm = editor.getElement();\n let doc = editor.getDoc();\n if (editor.inline) {\n DOM$6.addClass(targetElm, 'mce-content-body');\n editor.contentDocument = doc = document;\n editor.contentWindow = window;\n editor.bodyElement = targetElm;\n editor.contentAreaContainer = targetElm;\n }\n const body = editor.getBody();\n body.disabled = true;\n editor.readonly = isReadOnly$1(editor);\n editor._editableRoot = hasEditableRoot$1(editor);\n if (!isDisabled$1(editor) && editor.hasEditableRoot()) {\n if (editor.inline && DOM$6.getStyle(body, 'position', true) === 'static') {\n body.style.position = 'relative';\n }\n body.contentEditable = 'true';\n }\n body.disabled = false;\n editor.editorUpload = EditorUpload(editor);\n editor.schema = Schema(mkSchemaSettings(editor));\n editor.dom = DOMUtils(doc, {\n keep_values: true,\n url_converter: editor.convertURL,\n url_converter_scope: editor,\n update_styles: true,\n root_element: editor.inline ? editor.getBody() : null,\n collect: editor.inline,\n schema: editor.schema,\n contentCssCors: shouldUseContentCssCors(editor),\n referrerPolicy: getReferrerPolicy(editor),\n onSetAttrib: e => {\n editor.dispatch('SetAttrib', e);\n }\n });\n editor.parser = createParser(editor);\n editor.serializer = DomSerializer(mkSerializerSettings(editor), editor);\n editor.selection = EditorSelection(editor.dom, editor.getWin(), editor.serializer, editor);\n editor.annotator = Annotator(editor);\n editor.formatter = Formatter(editor);\n editor.undoManager = UndoManager(editor);\n editor._nodeChangeDispatcher = new NodeChange(editor);\n editor._selectionOverrides = SelectionOverrides(editor);\n setup$p(editor);\n setup$6(editor);\n setup$n(editor);\n if (!isRtc(editor)) {\n setup$5(editor);\n setup$1(editor);\n }\n const caret = setup$b(editor);\n setup$q(editor, caret);\n setup$o(editor);\n setup$r(editor);\n setup$7(editor);\n const setupRtcThunk = setup$t(editor);\n preInit(editor);\n validateEditorLicenseKey(editor);\n setupRtcThunk.fold(() => {\n const cancelProgress = startProgress(editor);\n loadContentCss(editor).then(() => {\n initEditorWithInitialContent(editor);\n cancelProgress();\n });\n }, setupRtc => {\n editor.setProgressState(true);\n loadContentCss(editor).then(() => {\n setupRtc().then(_rtcMode => {\n editor.setProgressState(false);\n initEditorWithInitialContent(editor);\n bindEvents(editor);\n }, err => {\n editor.notificationManager.open({\n type: 'error',\n text: String(err)\n });\n initEditorWithInitialContent(editor);\n bindEvents(editor);\n });\n });\n });\n };\n\n const filter = always;\n const bind = (element, event, handler) => bind$2(element, event, filter, handler);\n\n const DOM$5 = DOMUtils.DOM;\n const createIframeElement = (id, title, customAttrs, tabindex) => {\n const iframe = SugarElement.fromTag('iframe');\n tabindex.each(t => set$4(iframe, 'tabindex', t));\n setAll$1(iframe, customAttrs);\n setAll$1(iframe, {\n id: id + '_ifr',\n frameBorder: '0',\n allowTransparency: 'true',\n title\n });\n add$2(iframe, 'tox-edit-area__iframe');\n return iframe;\n };\n const getIframeHtml = editor => {\n let iframeHTML = getDocType(editor) + '';\n if (getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {\n iframeHTML += '';\n }\n iframeHTML += '';\n const bodyId = getBodyId(editor);\n const bodyClass = getBodyClass(editor);\n const translatedAriaText = editor.translate(getIframeAriaText(editor));\n if (getContentSecurityPolicy(editor)) {\n iframeHTML += '';\n }\n iframeHTML += '' + `` + '
    ' + '';\n return iframeHTML;\n };\n const createIframe = (editor, boxInfo) => {\n const iframeTitle = Env.browser.isFirefox() ? getIframeAriaText(editor) : 'Rich Text Area';\n const translatedTitle = editor.translate(iframeTitle);\n const tabindex = getOpt(SugarElement.fromDom(editor.getElement()), 'tabindex').bind(toInt);\n const ifr = createIframeElement(editor.id, translatedTitle, getIframeAttrs(editor), tabindex).dom;\n ifr.onload = () => {\n ifr.onload = null;\n editor.dispatch('load');\n };\n editor.contentAreaContainer = boxInfo.iframeContainer;\n editor.iframeElement = ifr;\n editor.iframeHTML = getIframeHtml(editor);\n DOM$5.add(boxInfo.iframeContainer, ifr);\n };\n const setupIframeBody = editor => {\n const iframe = editor.iframeElement;\n const ready = () => {\n editor.contentDocument = iframe.contentDocument;\n contentBodyLoaded(editor);\n };\n if (shouldUseDocumentWrite(editor) || Env.browser.isFirefox()) {\n const doc = editor.getDoc();\n doc.open();\n doc.write(editor.iframeHTML);\n doc.close();\n ready();\n } else {\n const binder = bind(SugarElement.fromDom(iframe), 'load', () => {\n binder.unbind();\n ready();\n });\n iframe.srcdoc = editor.iframeHTML;\n }\n };\n const init$1 = (editor, boxInfo) => {\n createIframe(editor, boxInfo);\n if (boxInfo.editorContainer) {\n boxInfo.editorContainer.style.display = editor.orgDisplay;\n editor.hidden = DOM$5.isHidden(boxInfo.editorContainer);\n }\n editor.getElement().style.display = 'none';\n DOM$5.setAttrib(editor.id, 'aria-hidden', 'true');\n editor.getElement().style.visibility = editor.orgVisibility;\n setupIframeBody(editor);\n };\n\n const DOM$4 = DOMUtils.DOM;\n const initPlugin = (editor, initializedPlugins, plugin) => {\n const Plugin = PluginManager.get(plugin);\n const pluginUrl = PluginManager.urls[plugin] || editor.documentBaseUrl.replace(/\\/$/, '');\n plugin = Tools.trim(plugin);\n if (Plugin && Tools.inArray(initializedPlugins, plugin) === -1) {\n if (editor.plugins[plugin]) {\n return;\n }\n try {\n const pluginInstance = Plugin(editor, pluginUrl) || {};\n editor.plugins[plugin] = pluginInstance;\n if (isFunction(pluginInstance.init)) {\n pluginInstance.init(editor, pluginUrl);\n initializedPlugins.push(plugin);\n }\n } catch (e) {\n pluginInitError(editor, plugin, e);\n }\n }\n };\n const trimLegacyPrefix = name => {\n return name.replace(/^\\-/, '');\n };\n const initPlugins = editor => {\n const initializedPlugins = [];\n each$e(getPlugins(editor), name => {\n initPlugin(editor, initializedPlugins, trimLegacyPrefix(name));\n });\n };\n const initIcons = editor => {\n const iconPackName = Tools.trim(getIconPackName(editor));\n const currentIcons = editor.ui.registry.getAll().icons;\n const loadIcons = {\n ...IconManager.get('default').icons,\n ...IconManager.get(iconPackName).icons\n };\n each$d(loadIcons, (svgData, icon) => {\n if (!has$2(currentIcons, icon)) {\n editor.ui.registry.addIcon(icon, svgData);\n }\n });\n };\n const initTheme = editor => {\n const theme = getTheme(editor);\n if (isString(theme)) {\n const Theme = ThemeManager.get(theme);\n editor.theme = Theme(editor, ThemeManager.urls[theme]) || {};\n if (isFunction(editor.theme.init)) {\n editor.theme.init(editor, ThemeManager.urls[theme] || editor.documentBaseUrl.replace(/\\/$/, ''));\n }\n } else {\n editor.theme = {};\n }\n };\n const initModel = editor => {\n const model = getModel(editor);\n const Model = ModelManager.get(model);\n editor.model = Model(editor, ModelManager.urls[model]);\n };\n const renderFromLoadedTheme = editor => {\n const render = editor.theme.renderUI;\n return render ? render() : renderThemeFalse(editor);\n };\n const renderFromThemeFunc = editor => {\n const elm = editor.getElement();\n const theme = getTheme(editor);\n const info = theme(editor, elm);\n if (info.editorContainer.nodeType) {\n info.editorContainer.id = info.editorContainer.id || editor.id + '_parent';\n }\n if (info.iframeContainer && info.iframeContainer.nodeType) {\n info.iframeContainer.id = info.iframeContainer.id || editor.id + '_iframecontainer';\n }\n info.height = info.iframeHeight ? info.iframeHeight : elm.offsetHeight;\n return info;\n };\n const createThemeFalseResult = (element, iframe) => {\n return {\n editorContainer: element,\n iframeContainer: iframe,\n api: {}\n };\n };\n const renderThemeFalseIframe = targetElement => {\n const iframeContainer = DOM$4.create('div');\n DOM$4.insertAfter(iframeContainer, targetElement);\n return createThemeFalseResult(iframeContainer, iframeContainer);\n };\n const renderThemeFalse = editor => {\n const targetElement = editor.getElement();\n return editor.inline ? createThemeFalseResult(null) : renderThemeFalseIframe(targetElement);\n };\n const renderThemeUi = editor => {\n const elm = editor.getElement();\n editor.orgDisplay = elm.style.display;\n if (isString(getTheme(editor))) {\n return renderFromLoadedTheme(editor);\n } else if (isFunction(getTheme(editor))) {\n return renderFromThemeFunc(editor);\n } else {\n return renderThemeFalse(editor);\n }\n };\n const augmentEditorUiApi = (editor, api) => {\n const uiApiFacade = {\n show: Optional.from(api.show).getOr(noop),\n hide: Optional.from(api.hide).getOr(noop),\n isEnabled: Optional.from(api.isEnabled).getOr(always),\n setEnabled: state => {\n const shouldSkip = state && (editor.mode.get() === 'readonly' || isDisabled(editor));\n if (!shouldSkip) {\n Optional.from(api.setEnabled).each(f => f(state));\n }\n }\n };\n editor.ui = {\n ...editor.ui,\n ...uiApiFacade\n };\n };\n const init = async editor => {\n editor.dispatch('ScriptsLoaded');\n initIcons(editor);\n initTheme(editor);\n initModel(editor);\n initPlugins(editor);\n const renderInfo = await renderThemeUi(editor);\n augmentEditorUiApi(editor, Optional.from(renderInfo.api).getOr({}));\n editor.editorContainer = renderInfo.editorContainer;\n appendContentCssFromSettings(editor);\n if (editor.inline) {\n contentBodyLoaded(editor);\n } else {\n init$1(editor, {\n editorContainer: renderInfo.editorContainer,\n iframeContainer: renderInfo.iframeContainer\n });\n }\n };\n\n const DOM$3 = DOMUtils.DOM;\n const hasSkipLoadPrefix = name => name.charAt(0) === '-';\n const loadLanguage = (scriptLoader, editor) => {\n const languageCode = getLanguageCode(editor);\n const languageUrl = getLanguageUrl(editor);\n if (!I18n.hasCode(languageCode) && languageCode !== 'en') {\n const url = isNotEmpty(languageUrl) ? languageUrl : `${ editor.editorManager.baseURL }/langs/${ languageCode }.js`;\n scriptLoader.add(url).catch(() => {\n languageLoadError(editor, url, languageCode);\n });\n }\n };\n const loadTheme = (editor, suffix) => {\n const theme = getTheme(editor);\n if (isString(theme) && !hasSkipLoadPrefix(theme) && !has$2(ThemeManager.urls, theme)) {\n const themeUrl = getThemeUrl(editor);\n const url = themeUrl ? editor.documentBaseURI.toAbsolute(themeUrl) : `themes/${ theme }/theme${ suffix }.js`;\n ThemeManager.load(theme, url).catch(() => {\n themeLoadError(editor, url, theme);\n });\n }\n };\n const loadModel = (editor, suffix) => {\n const model = getModel(editor);\n if (model !== 'plugin' && !has$2(ModelManager.urls, model)) {\n const modelUrl = getModelUrl(editor);\n const url = isString(modelUrl) ? editor.documentBaseURI.toAbsolute(modelUrl) : `models/${ model }/model${ suffix }.js`;\n ModelManager.load(model, url).catch(() => {\n modelLoadError(editor, url, model);\n });\n }\n };\n const getIconsUrlMetaFromUrl = editor => Optional.from(getIconsUrl(editor)).filter(isNotEmpty).map(url => ({\n url,\n name: Optional.none()\n }));\n const getIconsUrlMetaFromName = (editor, name, suffix) => Optional.from(name).filter(name => isNotEmpty(name) && !IconManager.has(name)).map(name => ({\n url: `${ editor.editorManager.baseURL }/icons/${ name }/icons${ suffix }.js`,\n name: Optional.some(name)\n }));\n const loadIcons = (scriptLoader, editor, suffix) => {\n const defaultIconsUrl = getIconsUrlMetaFromName(editor, 'default', suffix);\n const customIconsUrl = getIconsUrlMetaFromUrl(editor).orThunk(() => getIconsUrlMetaFromName(editor, getIconPackName(editor), ''));\n each$e(cat([\n defaultIconsUrl,\n customIconsUrl\n ]), urlMeta => {\n scriptLoader.add(urlMeta.url).catch(() => {\n iconsLoadError(editor, urlMeta.url, urlMeta.name.getOrUndefined());\n });\n });\n };\n const loadPlugins = (editor, suffix) => {\n const loadPlugin = (name, url) => {\n PluginManager.load(name, url).catch(() => {\n pluginLoadError(editor, url, name);\n });\n };\n each$d(getExternalPlugins$1(editor), (url, name) => {\n loadPlugin(name, url);\n editor.options.set('plugins', getPlugins(editor).concat(name));\n });\n each$e(getPlugins(editor), plugin => {\n plugin = Tools.trim(plugin);\n if (plugin && !PluginManager.urls[plugin] && !hasSkipLoadPrefix(plugin)) {\n loadPlugin(plugin, `plugins/${ plugin }/plugin${ suffix }.js`);\n }\n });\n };\n const isThemeLoaded = editor => {\n const theme = getTheme(editor);\n return !isString(theme) || isNonNullable(ThemeManager.get(theme));\n };\n const isModelLoaded = editor => {\n const model = getModel(editor);\n return isNonNullable(ModelManager.get(model));\n };\n const loadScripts = (editor, suffix) => {\n const scriptLoader = ScriptLoader.ScriptLoader;\n const initEditor = () => {\n if (!editor.removed && isThemeLoaded(editor) && isModelLoaded(editor)) {\n init(editor);\n }\n };\n loadTheme(editor, suffix);\n loadModel(editor, suffix);\n loadLanguage(scriptLoader, editor);\n loadIcons(scriptLoader, editor, suffix);\n loadPlugins(editor, suffix);\n scriptLoader.loadQueue().then(initEditor, initEditor);\n };\n const getStyleSheetLoader = (element, editor) => instance.forElement(element, {\n contentCssCors: hasContentCssCors(editor),\n referrerPolicy: getReferrerPolicy(editor)\n });\n const render = editor => {\n const id = editor.id;\n I18n.setCode(getLanguageCode(editor));\n const readyHandler = () => {\n DOM$3.unbind(window, 'ready', readyHandler);\n editor.render();\n };\n if (!EventUtils.Event.domLoaded) {\n DOM$3.bind(window, 'ready', readyHandler);\n return;\n }\n if (!editor.getElement()) {\n return;\n }\n const element = SugarElement.fromDom(editor.getElement());\n const snapshot = clone$4(element);\n editor.on('remove', () => {\n eachr(element.dom.attributes, attr => remove$9(element, attr.name));\n setAll$1(element, snapshot);\n });\n editor.ui.styleSheetLoader = getStyleSheetLoader(element, editor);\n if (!isInline$1(editor)) {\n editor.orgVisibility = editor.getElement().style.visibility;\n editor.getElement().style.visibility = 'hidden';\n } else {\n editor.inline = true;\n }\n const form = editor.getElement().form || DOM$3.getParent(id, 'form');\n if (form) {\n editor.formElement = form;\n if (hasHiddenInput(editor) && !isTextareaOrInput(editor.getElement())) {\n DOM$3.insertAfter(DOM$3.create('input', {\n type: 'hidden',\n name: id\n }), id);\n editor.hasHiddenInput = true;\n }\n editor.formEventDelegate = e => {\n editor.dispatch(e.type, e);\n };\n DOM$3.bind(form, 'submit reset', editor.formEventDelegate);\n editor.on('reset', () => {\n editor.resetContent();\n });\n if (shouldPatchSubmit(editor) && !form.submit.nodeType && !form.submit.length && !form._mceOldSubmit) {\n form._mceOldSubmit = form.submit;\n form.submit = () => {\n editor.editorManager.triggerSave();\n editor.setDirty(false);\n return form._mceOldSubmit(form);\n };\n }\n }\n editor.windowManager = WindowManager(editor);\n editor.notificationManager = NotificationManager(editor);\n if (isEncodingXml(editor)) {\n editor.on('GetContent', e => {\n if (e.save) {\n e.content = DOM$3.encode(e.content);\n }\n });\n }\n if (shouldAddFormSubmitTrigger(editor)) {\n editor.on('submit', () => {\n if (editor.initialized) {\n editor.save();\n }\n });\n }\n if (shouldAddUnloadTrigger(editor)) {\n editor._beforeUnload = () => {\n if (editor.initialized && !editor.destroyed && !editor.isHidden()) {\n editor.save({\n format: 'raw',\n no_events: true,\n set_dirty: false\n });\n }\n };\n editor.editorManager.on('BeforeUnload', editor._beforeUnload);\n }\n editor.editorManager.add(editor);\n loadScripts(editor, editor.suffix);\n };\n\n const setEditableRoot = (editor, state) => {\n if (editor._editableRoot !== state) {\n editor._editableRoot = state;\n if (!isDisabled(editor)) {\n editor.getBody().contentEditable = String(editor.hasEditableRoot());\n editor.nodeChanged();\n }\n fireEditableRootStateChange(editor, state);\n }\n };\n const hasEditableRoot = editor => editor._editableRoot;\n\n const sectionResult = (sections, settings) => ({\n sections: constant(sections),\n options: constant(settings)\n });\n const deviceDetection = detect$1().deviceType;\n const isPhone = deviceDetection.isPhone();\n const isTablet = deviceDetection.isTablet();\n const normalizePlugins = plugins => {\n if (isNullable(plugins)) {\n return [];\n } else {\n const pluginNames = isArray$1(plugins) ? plugins : plugins.split(/[ ,]/);\n const trimmedPlugins = map$3(pluginNames, trim$4);\n return filter$5(trimmedPlugins, isNotEmpty);\n }\n };\n const extractSections = (keys, options) => {\n const result = bifilter(options, (value, key) => {\n return contains$2(keys, key);\n });\n return sectionResult(result.t, result.f);\n };\n const getSection = (sectionResult, name, defaults = {}) => {\n const sections = sectionResult.sections();\n const sectionOptions = get$a(sections, name).getOr({});\n return Tools.extend({}, defaults, sectionOptions);\n };\n const hasSection = (sectionResult, name) => {\n return has$2(sectionResult.sections(), name);\n };\n const getSectionConfig = (sectionResult, name) => {\n return hasSection(sectionResult, name) ? sectionResult.sections()[name] : {};\n };\n const getMobileOverrideOptions = (mobileOptions, isPhone) => {\n const defaultMobileOptions = {\n table_grid: false,\n object_resizing: false,\n resize: false,\n toolbar_mode: get$a(mobileOptions, 'toolbar_mode').getOr('scrolling'),\n toolbar_sticky: false\n };\n const defaultPhoneOptions = { menubar: false };\n return {\n ...defaultMobileOptions,\n ...isPhone ? defaultPhoneOptions : {}\n };\n };\n const getExternalPlugins = (overrideOptions, options) => {\n var _a;\n const userDefinedExternalPlugins = (_a = options.external_plugins) !== null && _a !== void 0 ? _a : {};\n if (overrideOptions && overrideOptions.external_plugins) {\n return Tools.extend({}, overrideOptions.external_plugins, userDefinedExternalPlugins);\n } else {\n return userDefinedExternalPlugins;\n }\n };\n const combinePlugins = (forcedPlugins, plugins) => [\n ...normalizePlugins(forcedPlugins),\n ...normalizePlugins(plugins)\n ];\n const getPlatformPlugins = (isMobileDevice, sectionResult, desktopPlugins, mobilePlugins) => {\n if (isMobileDevice && hasSection(sectionResult, 'mobile')) {\n return mobilePlugins;\n } else {\n return desktopPlugins;\n }\n };\n const processPlugins = (isMobileDevice, sectionResult, defaultOverrideOptions, options) => {\n const forcedPlugins = normalizePlugins(defaultOverrideOptions.forced_plugins);\n const desktopPlugins = normalizePlugins(options.plugins);\n const mobileConfig = getSectionConfig(sectionResult, 'mobile');\n const mobilePlugins = mobileConfig.plugins ? normalizePlugins(mobileConfig.plugins) : desktopPlugins;\n const platformPlugins = getPlatformPlugins(isMobileDevice, sectionResult, desktopPlugins, mobilePlugins);\n const combinedPlugins = combinePlugins(forcedPlugins, platformPlugins);\n return Tools.extend(options, {\n forced_plugins: forcedPlugins,\n plugins: combinedPlugins\n });\n };\n const isOnMobile = (isMobileDevice, sectionResult) => {\n return isMobileDevice && hasSection(sectionResult, 'mobile');\n };\n const combineOptions = (isMobileDevice, isPhone, defaultOptions, defaultOverrideOptions, options) => {\n var _a;\n const deviceOverrideOptions = isMobileDevice ? { mobile: getMobileOverrideOptions((_a = options.mobile) !== null && _a !== void 0 ? _a : {}, isPhone) } : {};\n const sectionResult = extractSections(['mobile'], deepMerge(deviceOverrideOptions, options));\n const extendedOptions = Tools.extend(defaultOptions, defaultOverrideOptions, sectionResult.options(), isOnMobile(isMobileDevice, sectionResult) ? getSection(sectionResult, 'mobile') : {}, { external_plugins: getExternalPlugins(defaultOverrideOptions, sectionResult.options()) });\n return processPlugins(isMobileDevice, sectionResult, defaultOverrideOptions, extendedOptions);\n };\n const normalizeOptions = (defaultOverrideOptions, options) => {\n const copiedOptions = merge(options);\n return combineOptions(isPhone || isTablet, isPhone, copiedOptions, defaultOverrideOptions, copiedOptions);\n };\n\n const addVisual = (editor, elm) => addVisual$1(editor, elm);\n\n const registerExecCommands$2 = editor => {\n const toggleFormat = (name, value) => {\n editor.formatter.toggle(name, value);\n editor.nodeChanged();\n };\n const toggleAlign = align => () => {\n each$e('left,center,right,justify'.split(','), name => {\n if (align !== name) {\n editor.formatter.remove('align' + name);\n }\n });\n if (align !== 'none') {\n toggleFormat('align' + align);\n }\n };\n editor.editorCommands.addCommands({\n JustifyLeft: toggleAlign('left'),\n JustifyCenter: toggleAlign('center'),\n JustifyRight: toggleAlign('right'),\n JustifyFull: toggleAlign('justify'),\n JustifyNone: toggleAlign('none')\n });\n };\n const registerQueryStateCommands = editor => {\n const alignStates = name => () => {\n const selection = editor.selection;\n const nodes = selection.isCollapsed() ? [editor.dom.getParent(selection.getNode(), editor.dom.isBlock)] : selection.getSelectedBlocks();\n return exists(nodes, node => isNonNullable(editor.formatter.matchNode(node, name)));\n };\n editor.editorCommands.addCommands({\n JustifyLeft: alignStates('alignleft'),\n JustifyCenter: alignStates('aligncenter'),\n JustifyRight: alignStates('alignright'),\n JustifyFull: alignStates('alignjustify')\n }, 'state');\n };\n const registerCommands$a = editor => {\n registerExecCommands$2(editor);\n registerQueryStateCommands(editor);\n };\n\n const registerCommands$9 = editor => {\n editor.editorCommands.addCommands({\n 'Cut,Copy,Paste': command => {\n const doc = editor.getDoc();\n let failed;\n try {\n doc.execCommand(command);\n } catch (_a) {\n failed = true;\n }\n if (command === 'paste' && !doc.queryCommandEnabled(command)) {\n failed = true;\n }\n if (failed || !doc.queryCommandSupported(command)) {\n let msg = editor.translate(`Your browser doesn't support direct access to the clipboard. ` + 'Please use the Ctrl+X/C/V keyboard shortcuts instead.');\n if (Env.os.isMacOS() || Env.os.isiOS()) {\n msg = msg.replace(/Ctrl\\+/g, '\\u2318+');\n }\n editor.notificationManager.open({\n text: msg,\n type: 'error'\n });\n }\n }\n });\n };\n\n const trimOrPadLeftRight = (dom, rng, html, schema) => {\n const root = SugarElement.fromDom(dom.getRoot());\n if (needsToBeNbspLeft(root, CaretPosition.fromRangeStart(rng), schema)) {\n html = html.replace(/^ /, ' ');\n } else {\n html = html.replace(/^ /, ' ');\n }\n if (needsToBeNbspRight(root, CaretPosition.fromRangeEnd(rng), schema)) {\n html = html.replace(/( | )()?$/, ' ');\n } else {\n html = html.replace(/ ()?$/, ' ');\n }\n return html;\n };\n\n const processValue$1 = value => {\n if (typeof value !== 'string') {\n const details = Tools.extend({\n paste: value.paste,\n data: { paste: value.paste }\n }, value);\n return {\n content: value.content,\n details\n };\n }\n return {\n content: value,\n details: {}\n };\n };\n const trimOrPad = (editor, value) => {\n const selection = editor.selection;\n const dom = editor.dom;\n if (/^ | $/.test(value)) {\n return trimOrPadLeftRight(dom, selection.getRng(), value, editor.schema);\n } else {\n return value;\n }\n };\n const insertAtCaret = (editor, value) => {\n if (editor.selection.isEditable()) {\n const {content, details} = processValue$1(value);\n preProcessSetContent(editor, {\n ...details,\n content: trimOrPad(editor, content),\n format: 'html',\n set: false,\n selection: true\n }).each(args => {\n const insertedContent = insertContent$1(editor, args.content, details);\n postProcessSetContent(editor, insertedContent, args);\n editor.addVisual();\n });\n }\n };\n\n const registerCommands$8 = editor => {\n editor.editorCommands.addCommands({\n mceCleanup: () => {\n const bm = editor.selection.getBookmark();\n editor.setContent(editor.getContent());\n editor.selection.moveToBookmark(bm);\n },\n insertImage: (_command, _ui, value) => {\n insertAtCaret(editor, editor.dom.createHTML('img', { src: value }));\n },\n insertHorizontalRule: () => {\n editor.execCommand('mceInsertContent', false, '
    ');\n },\n insertText: (_command, _ui, value) => {\n insertAtCaret(editor, editor.dom.encode(value));\n },\n insertHTML: (_command, _ui, value) => {\n insertAtCaret(editor, value);\n },\n mceInsertContent: (_command, _ui, value) => {\n insertAtCaret(editor, value);\n },\n mceSetContent: (_command, _ui, value) => {\n editor.setContent(value);\n },\n mceReplaceContent: (_command, _ui, value) => {\n editor.execCommand('mceInsertContent', false, value.replace(/\\{\\$selection\\}/g, editor.selection.getContent({ format: 'text' })));\n },\n mceNewDocument: () => {\n editor.setContent(getNewDocumentContent(editor));\n }\n });\n };\n\n const legacyPropNames = {\n 'font-size': 'size',\n 'font-family': 'face'\n };\n const isFont = isTag('font');\n const getSpecifiedFontProp = (propName, rootElm, elm) => {\n const getProperty = elm => getRaw(elm, propName).orThunk(() => {\n if (isFont(elm)) {\n return get$a(legacyPropNames, propName).bind(legacyPropName => getOpt(elm, legacyPropName));\n } else {\n return Optional.none();\n }\n });\n const isRoot = elm => eq(SugarElement.fromDom(rootElm), elm);\n return closest$1(SugarElement.fromDom(elm), elm => getProperty(elm), isRoot);\n };\n const normalizeFontFamily = fontFamily => fontFamily.replace(/[\\'\\\"\\\\]/g, '').replace(/,\\s+/g, ',');\n const getComputedFontProp = (propName, elm) => Optional.from(DOMUtils.DOM.getStyle(elm, propName, true));\n const getFontProp = propName => (rootElm, elm) => Optional.from(elm).map(SugarElement.fromDom).filter(isElement$7).bind(element => getSpecifiedFontProp(propName, rootElm, element.dom).or(getComputedFontProp(propName, element.dom))).getOr('');\n const getFontSize = getFontProp('font-size');\n const getFontFamily = compose(normalizeFontFamily, getFontProp('font-family'));\n\n const findFirstCaretElement = editor => firstPositionIn(editor.getBody()).bind(caret => {\n const container = caret.container();\n return Optional.from(isText$b(container) ? container.parentNode : container);\n });\n const getCaretElement = editor => Optional.from(editor.selection.getRng()).bind(rng => {\n const root = editor.getBody();\n const atStartOfNode = rng.startContainer === root && rng.startOffset === 0;\n return atStartOfNode ? Optional.none() : Optional.from(editor.selection.getStart(true));\n });\n const bindRange = (editor, binder) => getCaretElement(editor).orThunk(curry(findFirstCaretElement, editor)).map(SugarElement.fromDom).filter(isElement$7).bind(binder);\n const mapRange = (editor, mapper) => bindRange(editor, compose1(Optional.some, mapper));\n\n const fromFontSizeNumber = (editor, value) => {\n if (/^[0-9.]+$/.test(value)) {\n const fontSizeNumber = parseInt(value, 10);\n if (fontSizeNumber >= 1 && fontSizeNumber <= 7) {\n const fontSizes = getFontStyleValues(editor);\n const fontClasses = getFontSizeClasses(editor);\n if (fontClasses.length > 0) {\n return fontClasses[fontSizeNumber - 1] || value;\n } else {\n return fontSizes[fontSizeNumber - 1] || value;\n }\n } else {\n return value;\n }\n } else {\n return value;\n }\n };\n const normalizeFontNames = font => {\n const fonts = font.split(/\\s*,\\s*/);\n return map$3(fonts, font => {\n if (font.indexOf(' ') !== -1 && !(startsWith(font, '\"') || startsWith(font, `'`))) {\n return `'${ font }'`;\n } else {\n return font;\n }\n }).join(',');\n };\n const fontNameAction = (editor, value) => {\n const font = fromFontSizeNumber(editor, value);\n editor.formatter.toggle('fontname', { value: normalizeFontNames(font) });\n editor.nodeChanged();\n };\n const fontNameQuery = editor => mapRange(editor, elm => getFontFamily(editor.getBody(), elm.dom)).getOr('');\n const fontSizeAction = (editor, value) => {\n editor.formatter.toggle('fontsize', { value: fromFontSizeNumber(editor, value) });\n editor.nodeChanged();\n };\n const fontSizeQuery = editor => mapRange(editor, elm => getFontSize(editor.getBody(), elm.dom)).getOr('');\n\n const lineHeightQuery = editor => mapRange(editor, elm => {\n const root = SugarElement.fromDom(editor.getBody());\n const specifiedStyle = closest$1(elm, elm => getRaw(elm, 'line-height'), curry(eq, root));\n const computedStyle = () => {\n const lineHeight = parseFloat(get$7(elm, 'line-height'));\n const fontSize = parseFloat(get$7(elm, 'font-size'));\n return String(lineHeight / fontSize);\n };\n return specifiedStyle.getOrThunk(computedStyle);\n }).getOr('');\n const lineHeightAction = (editor, lineHeight) => {\n editor.formatter.toggle('lineheight', { value: String(lineHeight) });\n editor.nodeChanged();\n };\n\n const registerExecCommands$1 = editor => {\n const toggleFormat = (name, value) => {\n editor.formatter.toggle(name, value);\n editor.nodeChanged();\n };\n editor.editorCommands.addCommands({\n 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': command => {\n toggleFormat(command);\n },\n 'ForeColor,HiliteColor': (command, _ui, value) => {\n toggleFormat(command, { value });\n },\n 'BackColor': (_command, _ui, value) => {\n toggleFormat('hilitecolor', { value });\n },\n 'FontName': (_command, _ui, value) => {\n fontNameAction(editor, value);\n },\n 'FontSize': (_command, _ui, value) => {\n fontSizeAction(editor, value);\n },\n 'LineHeight': (_command, _ui, value) => {\n lineHeightAction(editor, value);\n },\n 'Lang': (command, _ui, lang) => {\n var _a;\n toggleFormat(command, {\n value: lang.code,\n customValue: (_a = lang.customCode) !== null && _a !== void 0 ? _a : null\n });\n },\n 'RemoveFormat': command => {\n editor.formatter.remove(command);\n },\n 'mceBlockQuote': () => {\n toggleFormat('blockquote');\n },\n 'FormatBlock': (_command, _ui, value) => {\n toggleFormat(isString(value) ? value : 'p');\n },\n 'mceToggleFormat': (_command, _ui, value) => {\n toggleFormat(value);\n }\n });\n };\n const registerQueryValueCommands = editor => {\n const isFormatMatch = name => editor.formatter.match(name);\n editor.editorCommands.addCommands({\n 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': command => isFormatMatch(command),\n 'mceBlockQuote': () => isFormatMatch('blockquote')\n }, 'state');\n editor.editorCommands.addQueryValueHandler('FontName', () => fontNameQuery(editor));\n editor.editorCommands.addQueryValueHandler('FontSize', () => fontSizeQuery(editor));\n editor.editorCommands.addQueryValueHandler('LineHeight', () => lineHeightQuery(editor));\n };\n const registerCommands$7 = editor => {\n registerExecCommands$1(editor);\n registerQueryValueCommands(editor);\n };\n\n const registerCommands$6 = editor => {\n editor.editorCommands.addCommands({\n mceAddUndoLevel: () => {\n editor.undoManager.add();\n },\n mceEndUndoLevel: () => {\n editor.undoManager.add();\n },\n Undo: () => {\n editor.undoManager.undo();\n },\n Redo: () => {\n editor.undoManager.redo();\n }\n });\n };\n\n const registerCommands$5 = editor => {\n editor.editorCommands.addCommands({\n Indent: () => {\n indent(editor);\n },\n Outdent: () => {\n outdent(editor);\n }\n });\n editor.editorCommands.addCommands({ Outdent: () => canOutdent(editor) }, 'state');\n };\n\n const registerCommands$4 = editor => {\n const applyLinkToSelection = (_command, _ui, value) => {\n if (editor.mode.isReadOnly()) {\n return;\n }\n const linkDetails = isString(value) ? { href: value } : value;\n const anchor = editor.dom.getParent(editor.selection.getNode(), 'a');\n if (isObject(linkDetails) && isString(linkDetails.href)) {\n linkDetails.href = linkDetails.href.replace(/ /g, '%20');\n if (!anchor || !linkDetails.href) {\n editor.formatter.remove('link');\n }\n if (linkDetails.href) {\n editor.formatter.apply('link', linkDetails, anchor);\n }\n }\n };\n editor.editorCommands.addCommands({\n unlink: () => {\n if (editor.selection.isEditable()) {\n if (editor.selection.isCollapsed()) {\n const elm = editor.dom.getParent(editor.selection.getStart(), 'a');\n if (elm) {\n editor.dom.remove(elm, true);\n }\n return;\n }\n editor.formatter.remove('link');\n }\n },\n mceInsertLink: applyLinkToSelection,\n createLink: applyLinkToSelection\n });\n };\n\n const getTopParentBlock = (editor, node, root, container) => {\n const dom = editor.dom;\n const selector = node => dom.isBlock(node) && node.parentElement === root;\n const topParentBlock = selector(node) ? node : dom.getParent(container, selector, root);\n return Optional.from(topParentBlock).map(SugarElement.fromDom);\n };\n const insert = (editor, before) => {\n if (editor.mode.isReadOnly()) {\n return;\n }\n const dom = editor.dom;\n const rng = editor.selection.getRng();\n const node = before ? editor.selection.getStart() : editor.selection.getEnd();\n const container = before ? rng.startContainer : rng.endContainer;\n const root = getEditableRoot(dom, container);\n if (!root || !root.isContentEditable) {\n return;\n }\n const insertFn = before ? before$3 : after$4;\n const newBlockName = getForcedRootBlock(editor);\n getTopParentBlock(editor, node, root, container).each(parentBlock => {\n const newBlock = createNewBlock(editor, container, parentBlock.dom, root, false, newBlockName);\n insertFn(parentBlock, SugarElement.fromDom(newBlock));\n editor.selection.setCursorLocation(newBlock, 0);\n editor.dispatch('NewBlock', { newBlock });\n fireInputEvent(editor, 'insertParagraph');\n });\n };\n const insertBefore = editor => insert(editor, true);\n const insertAfter = editor => insert(editor, false);\n\n const registerCommands$3 = editor => {\n editor.editorCommands.addCommands({\n InsertNewBlockBefore: () => {\n insertBefore(editor);\n },\n InsertNewBlockAfter: () => {\n insertAfter(editor);\n }\n });\n };\n\n const registerCommands$2 = editor => {\n editor.editorCommands.addCommands({\n insertParagraph: () => {\n insertBreak(blockbreak, editor);\n },\n mceInsertNewLine: (_command, _ui, value) => {\n insert$1(editor, value);\n },\n InsertLineBreak: (_command, _ui, _value) => {\n insertBreak(linebreak, editor);\n }\n });\n };\n\n const registerCommands$1 = editor => {\n editor.editorCommands.addCommands({\n mceSelectNodeDepth: (_command, _ui, value) => {\n let counter = 0;\n editor.dom.getParent(editor.selection.getNode(), node => {\n if (isElement$6(node) && counter++ === value) {\n editor.selection.select(node);\n return false;\n } else {\n return true;\n }\n }, editor.getBody());\n },\n mceSelectNode: (_command, _ui, value) => {\n editor.selection.select(value);\n },\n selectAll: () => {\n const editingHost = editor.dom.getParent(editor.selection.getStart(), isContentEditableTrue$3);\n if (editingHost) {\n const rng = editor.dom.createRng();\n rng.selectNodeContents(editingHost);\n editor.selection.setRng(rng);\n }\n }\n });\n };\n\n const registerExecCommands = editor => {\n editor.editorCommands.addCommands({\n mceRemoveNode: (_command, _ui, value) => {\n const node = value !== null && value !== void 0 ? value : editor.selection.getNode();\n if (node !== editor.getBody()) {\n const bm = editor.selection.getBookmark();\n editor.dom.remove(node, true);\n editor.selection.moveToBookmark(bm);\n }\n },\n mcePrint: () => {\n editor.getWin().print();\n },\n mceFocus: (_command, _ui, value) => {\n focus(editor, value === true);\n },\n mceToggleVisualAid: () => {\n editor.hasVisual = !editor.hasVisual;\n editor.addVisual();\n }\n });\n };\n const registerCommands = editor => {\n registerCommands$a(editor);\n registerCommands$9(editor);\n registerCommands$6(editor);\n registerCommands$1(editor);\n registerCommands$8(editor);\n registerCommands$4(editor);\n registerCommands$5(editor);\n registerCommands$3(editor);\n registerCommands$2(editor);\n registerCommands$7(editor);\n registerExecCommands(editor);\n };\n\n const selectionSafeCommands = ['toggleview'];\n const isSelectionSafeCommand = command => contains$2(selectionSafeCommands, command.toLowerCase());\n class EditorCommands {\n constructor(editor) {\n this.commands = {\n state: {},\n exec: {},\n value: {}\n };\n this.editor = editor;\n }\n execCommand(command, ui = false, value, args) {\n const editor = this.editor;\n const lowerCaseCommand = command.toLowerCase();\n const skipFocus = args === null || args === void 0 ? void 0 : args.skip_focus;\n if (editor.removed) {\n return false;\n }\n if (lowerCaseCommand !== 'mcefocus') {\n if (!/^(mceAddUndoLevel|mceEndUndoLevel)$/i.test(lowerCaseCommand) && !skipFocus) {\n editor.focus();\n } else {\n restore(editor);\n }\n }\n const eventArgs = editor.dispatch('BeforeExecCommand', {\n command,\n ui,\n value\n });\n if (eventArgs.isDefaultPrevented()) {\n return false;\n }\n const func = this.commands.exec[lowerCaseCommand];\n if (isFunction(func)) {\n func(lowerCaseCommand, ui, value);\n editor.dispatch('ExecCommand', {\n command,\n ui,\n value\n });\n return true;\n }\n return false;\n }\n queryCommandState(command) {\n if (!isSelectionSafeCommand(command) && this.editor.quirks.isHidden() || this.editor.removed) {\n return false;\n }\n const lowerCaseCommand = command.toLowerCase();\n const func = this.commands.state[lowerCaseCommand];\n if (isFunction(func)) {\n return func(lowerCaseCommand);\n }\n return false;\n }\n queryCommandValue(command) {\n if (!isSelectionSafeCommand(command) && this.editor.quirks.isHidden() || this.editor.removed) {\n return '';\n }\n const lowerCaseCommand = command.toLowerCase();\n const func = this.commands.value[lowerCaseCommand];\n if (isFunction(func)) {\n return func(lowerCaseCommand);\n }\n return '';\n }\n addCommands(commandList, type = 'exec') {\n const commands = this.commands;\n each$d(commandList, (callback, command) => {\n each$e(command.toLowerCase().split(','), command => {\n commands[type][command] = callback;\n });\n });\n }\n addCommand(command, callback, scope) {\n const lowerCaseCommand = command.toLowerCase();\n this.commands.exec[lowerCaseCommand] = (_command, ui, value) => callback.call(scope !== null && scope !== void 0 ? scope : this.editor, ui, value);\n }\n queryCommandSupported(command) {\n const lowerCaseCommand = command.toLowerCase();\n if (this.commands.exec[lowerCaseCommand]) {\n return true;\n } else {\n return false;\n }\n }\n addQueryStateHandler(command, callback, scope) {\n this.commands.state[command.toLowerCase()] = () => callback.call(scope !== null && scope !== void 0 ? scope : this.editor);\n }\n addQueryValueHandler(command, callback, scope) {\n this.commands.value[command.toLowerCase()] = () => callback.call(scope !== null && scope !== void 0 ? scope : this.editor);\n }\n }\n\n const nativeEvents = Tools.makeMap('focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange ' + 'mouseout mouseenter mouseleave wheel keydown keypress keyup input beforeinput contextmenu dragstart dragend dragover ' + 'draggesture dragdrop drop drag submit ' + 'compositionstart compositionend compositionupdate touchstart touchmove touchend touchcancel', ' ');\n class EventDispatcher {\n static isNative(name) {\n return !!nativeEvents[name.toLowerCase()];\n }\n constructor(settings) {\n this.bindings = {};\n this.settings = settings || {};\n this.scope = this.settings.scope || this;\n this.toggleEvent = this.settings.toggleEvent || never;\n }\n fire(name, args) {\n return this.dispatch(name, args);\n }\n dispatch(name, args) {\n const lcName = name.toLowerCase();\n const event = normalize$3(lcName, args !== null && args !== void 0 ? args : {}, this.scope);\n if (this.settings.beforeFire) {\n this.settings.beforeFire(event);\n }\n const handlers = this.bindings[lcName];\n if (handlers) {\n for (let i = 0, l = handlers.length; i < l; i++) {\n const callback = handlers[i];\n if (callback.removed) {\n continue;\n }\n if (callback.once) {\n this.off(lcName, callback.func);\n }\n if (event.isImmediatePropagationStopped()) {\n return event;\n }\n if (callback.func.call(this.scope, event) === false) {\n event.preventDefault();\n return event;\n }\n }\n }\n return event;\n }\n on(name, callback, prepend, extra) {\n if (callback === false) {\n callback = never;\n }\n if (callback) {\n const wrappedCallback = {\n func: callback,\n removed: false\n };\n if (extra) {\n Tools.extend(wrappedCallback, extra);\n }\n const names = name.toLowerCase().split(' ');\n let i = names.length;\n while (i--) {\n const currentName = names[i];\n let handlers = this.bindings[currentName];\n if (!handlers) {\n handlers = [];\n this.toggleEvent(currentName, true);\n }\n if (prepend) {\n handlers = [\n wrappedCallback,\n ...handlers\n ];\n } else {\n handlers = [\n ...handlers,\n wrappedCallback\n ];\n }\n this.bindings[currentName] = handlers;\n }\n }\n return this;\n }\n off(name, callback) {\n if (name) {\n const names = name.toLowerCase().split(' ');\n let i = names.length;\n while (i--) {\n const currentName = names[i];\n let handlers = this.bindings[currentName];\n if (!currentName) {\n each$d(this.bindings, (_value, bindingName) => {\n this.toggleEvent(bindingName, false);\n delete this.bindings[bindingName];\n });\n return this;\n }\n if (handlers) {\n if (!callback) {\n handlers.length = 0;\n } else {\n const filteredHandlers = partition$2(handlers, handler => handler.func === callback);\n handlers = filteredHandlers.fail;\n this.bindings[currentName] = handlers;\n each$e(filteredHandlers.pass, handler => {\n handler.removed = true;\n });\n }\n if (!handlers.length) {\n this.toggleEvent(name, false);\n delete this.bindings[currentName];\n }\n }\n }\n } else {\n each$d(this.bindings, (_value, name) => {\n this.toggleEvent(name, false);\n });\n this.bindings = {};\n }\n return this;\n }\n once(name, callback, prepend) {\n return this.on(name, callback, prepend, { once: true });\n }\n has(name) {\n name = name.toLowerCase();\n const binding = this.bindings[name];\n return !(!binding || binding.length === 0);\n }\n }\n\n const getEventDispatcher = obj => {\n if (!obj._eventDispatcher) {\n obj._eventDispatcher = new EventDispatcher({\n scope: obj,\n toggleEvent: (name, state) => {\n if (EventDispatcher.isNative(name) && obj.toggleNativeEvent) {\n obj.toggleNativeEvent(name, state);\n }\n }\n });\n }\n return obj._eventDispatcher;\n };\n const Observable = {\n fire(name, args, bubble) {\n return this.dispatch(name, args, bubble);\n },\n dispatch(name, args, bubble) {\n const self = this;\n if (self.removed && name !== 'remove' && name !== 'detach') {\n return normalize$3(name.toLowerCase(), args !== null && args !== void 0 ? args : {}, self);\n }\n const dispatcherArgs = getEventDispatcher(self).dispatch(name, args);\n if (bubble !== false && self.parent) {\n let parent = self.parent();\n while (parent && !dispatcherArgs.isPropagationStopped()) {\n parent.dispatch(name, dispatcherArgs, false);\n parent = parent.parent ? parent.parent() : undefined;\n }\n }\n return dispatcherArgs;\n },\n on(name, callback, prepend) {\n return getEventDispatcher(this).on(name, callback, prepend);\n },\n off(name, callback) {\n return getEventDispatcher(this).off(name, callback);\n },\n once(name, callback) {\n return getEventDispatcher(this).once(name, callback);\n },\n hasEventListeners(name) {\n return getEventDispatcher(this).has(name);\n }\n };\n\n const DOM$2 = DOMUtils.DOM;\n let customEventRootDelegates;\n const getEventTarget = (editor, eventName) => {\n if (eventName === 'selectionchange') {\n return editor.getDoc();\n }\n if (!editor.inline && /^(?:mouse|touch|click|contextmenu|drop|dragover|dragend)/.test(eventName)) {\n return editor.getDoc().documentElement;\n }\n const eventRoot = getEventRoot(editor);\n if (eventRoot) {\n if (!editor.eventRoot) {\n editor.eventRoot = DOM$2.select(eventRoot)[0];\n }\n return editor.eventRoot;\n }\n return editor.getBody();\n };\n const isListening = editor => !editor.hidden && !isDisabled(editor);\n const fireEvent = (editor, eventName, e) => {\n if (isListening(editor)) {\n editor.dispatch(eventName, e);\n } else if (isDisabled(editor)) {\n processDisabledEvents(editor, e);\n }\n };\n const bindEventDelegate = (editor, eventName) => {\n if (!editor.delegates) {\n editor.delegates = {};\n }\n if (editor.delegates[eventName] || editor.removed) {\n return;\n }\n const eventRootElm = getEventTarget(editor, eventName);\n if (getEventRoot(editor)) {\n if (!customEventRootDelegates) {\n customEventRootDelegates = {};\n editor.editorManager.on('removeEditor', () => {\n if (!editor.editorManager.activeEditor) {\n if (customEventRootDelegates) {\n each$d(customEventRootDelegates, (_value, name) => {\n editor.dom.unbind(getEventTarget(editor, name));\n });\n customEventRootDelegates = null;\n }\n }\n });\n }\n if (customEventRootDelegates[eventName]) {\n return;\n }\n const delegate = e => {\n const target = e.target;\n const editors = editor.editorManager.get();\n let i = editors.length;\n while (i--) {\n const body = editors[i].getBody();\n if (body === target || DOM$2.isChildOf(target, body)) {\n fireEvent(editors[i], eventName, e);\n }\n }\n };\n customEventRootDelegates[eventName] = delegate;\n DOM$2.bind(eventRootElm, eventName, delegate);\n } else {\n const delegate = e => {\n fireEvent(editor, eventName, e);\n };\n DOM$2.bind(eventRootElm, eventName, delegate);\n editor.delegates[eventName] = delegate;\n }\n };\n const EditorObservable = {\n ...Observable,\n bindPendingEventDelegates() {\n const self = this;\n Tools.each(self._pendingNativeEvents, name => {\n bindEventDelegate(self, name);\n });\n },\n toggleNativeEvent(name, state) {\n const self = this;\n if (name === 'focus' || name === 'blur') {\n return;\n }\n if (self.removed) {\n return;\n }\n if (state) {\n if (self.initialized) {\n bindEventDelegate(self, name);\n } else {\n if (!self._pendingNativeEvents) {\n self._pendingNativeEvents = [name];\n } else {\n self._pendingNativeEvents.push(name);\n }\n }\n } else if (self.initialized && self.delegates) {\n self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);\n delete self.delegates[name];\n }\n },\n unbindAllNativeEvents() {\n const self = this;\n const body = self.getBody();\n const dom = self.dom;\n if (self.delegates) {\n each$d(self.delegates, (value, name) => {\n self.dom.unbind(getEventTarget(self, name), name, value);\n });\n delete self.delegates;\n }\n if (!self.inline && body && dom) {\n body.onload = null;\n dom.unbind(self.getWin());\n dom.unbind(self.getDoc());\n }\n if (dom) {\n dom.unbind(body);\n dom.unbind(self.getContainer());\n }\n }\n };\n\n const stringListProcessor = value => {\n if (isString(value)) {\n return {\n value: value.split(/[ ,]/),\n valid: true\n };\n } else if (isArrayOf(value, isString)) {\n return {\n value,\n valid: true\n };\n } else {\n return {\n valid: false,\n message: `The value must be a string[] or a comma/space separated string.`\n };\n }\n };\n const getBuiltInProcessor = type => {\n const validator = (() => {\n switch (type) {\n case 'array':\n return isArray$1;\n case 'boolean':\n return isBoolean;\n case 'function':\n return isFunction;\n case 'number':\n return isNumber;\n case 'object':\n return isObject;\n case 'string':\n return isString;\n case 'string[]':\n return stringListProcessor;\n case 'object[]':\n return val => isArrayOf(val, isObject);\n case 'regexp':\n return val => is$4(val, RegExp);\n default:\n return always;\n }\n })();\n return value => processValue(value, validator, `The value must be a ${ type }.`);\n };\n const isBuiltInSpec = spec => isString(spec.processor);\n const getErrorMessage = (message, result) => {\n const additionalText = isEmpty$3(result.message) ? '' : `. ${ result.message }`;\n return message + additionalText;\n };\n const isValidResult = result => result.valid;\n const processValue = (value, processor, message = '') => {\n const result = processor(value);\n if (isBoolean(result)) {\n return result ? {\n value: value,\n valid: true\n } : {\n valid: false,\n message\n };\n } else {\n return result;\n }\n };\n const processDefaultValue = (name, defaultValue, processor) => {\n if (!isUndefined(defaultValue)) {\n const result = processValue(defaultValue, processor);\n if (isValidResult(result)) {\n return result.value;\n } else {\n console.error(getErrorMessage(`Invalid default value passed for the \"${ name }\" option`, result));\n }\n }\n return undefined;\n };\n const create$5 = (editor, initialOptions, rawInitialOptions = initialOptions) => {\n const registry = {};\n const values = {};\n const setValue = (name, value, processor) => {\n const result = processValue(value, processor);\n if (isValidResult(result)) {\n values[name] = result.value;\n return true;\n } else {\n console.warn(getErrorMessage(`Invalid value passed for the ${ name } option`, result));\n return false;\n }\n };\n const register = (name, spec) => {\n const processor = isBuiltInSpec(spec) ? getBuiltInProcessor(spec.processor) : spec.processor;\n const defaultValue = processDefaultValue(name, spec.default, processor);\n registry[name] = {\n ...spec,\n default: defaultValue,\n processor\n };\n const initValue = get$a(values, name).orThunk(() => get$a(initialOptions, name));\n initValue.each(value => setValue(name, value, processor));\n };\n const isRegistered = name => has$2(registry, name);\n const get = name => get$a(values, name).orThunk(() => get$a(registry, name).map(spec => spec.default)).getOrUndefined();\n const set = (name, value) => {\n if (!isRegistered(name)) {\n console.warn(`\"${ name }\" is not a registered option. Ensure the option has been registered before setting a value.`);\n return false;\n } else {\n const spec = registry[name];\n if (spec.immutable) {\n console.error(`\"${ name }\" is an immutable option and cannot be updated`);\n return false;\n } else {\n return setValue(name, value, spec.processor);\n }\n }\n };\n const unset = name => {\n const registered = isRegistered(name);\n if (registered) {\n delete values[name];\n }\n return registered;\n };\n const isSet = name => has$2(values, name);\n const debug = () => {\n try {\n console.log(JSON.parse(JSON.stringify(rawInitialOptions, (_key, value) => {\n if (isBoolean(value) || isNumber(value) || isString(value) || isNull(value) || isArray$1(value) || isPlainObject(value)) {\n return value;\n }\n return Object.prototype.toString.call(value);\n })));\n } catch (error) {\n console.error(error);\n }\n };\n return {\n register,\n isRegistered,\n get,\n set,\n unset,\n isSet,\n debug\n };\n };\n\n const setContentEditable = (elm, state) => {\n elm.dom.contentEditable = state ? 'true' : 'false';\n };\n const toggleReadOnly = (editor, state) => {\n const body = SugarElement.fromDom(editor.getBody());\n if (state) {\n editor.readonly = true;\n if (editor.hasEditableRoot()) {\n setContentEditable(body, true);\n }\n disableEditor(editor);\n } else {\n editor.readonly = false;\n enableEditor(editor);\n }\n };\n const isReadOnly = editor => editor.readonly;\n const registerReadOnlyInputBlockers = editor => {\n editor.on('beforeinput paste cut dragend dragover draggesture dragdrop drop drag', e => {\n if (isReadOnly(editor)) {\n e.preventDefault();\n }\n });\n editor.on('BeforeExecCommand', e => {\n if ((e.command === 'Undo' || e.command === 'Redo') && isReadOnly(editor)) {\n e.preventDefault();\n }\n });\n editor.on('input', e => {\n if (!e.isComposing && isReadOnly(editor)) {\n const undoLevel = editor.undoManager.add();\n if (isNonNullable(undoLevel)) {\n editor.undoManager.undo();\n }\n }\n });\n editor.on('compositionend', () => {\n if (isReadOnly(editor)) {\n const undoLevel = editor.undoManager.add();\n if (isNonNullable(undoLevel)) {\n editor.undoManager.undo();\n }\n }\n });\n };\n\n const defaultModes = [\n 'design',\n 'readonly'\n ];\n const switchToMode = (editor, activeMode, availableModes, mode) => {\n const oldMode = availableModes[activeMode.get()];\n const newMode = availableModes[mode];\n try {\n newMode.activate();\n } catch (e) {\n console.error(`problem while activating editor mode ${ mode }:`, e);\n return;\n }\n oldMode.deactivate();\n if (oldMode.editorReadOnly !== newMode.editorReadOnly) {\n toggleReadOnly(editor, newMode.editorReadOnly);\n }\n activeMode.set(mode);\n fireSwitchMode(editor, mode);\n };\n const setMode = (editor, availableModes, activeMode, mode) => {\n if (mode === activeMode.get() || editor.initialized && isDisabled(editor)) {\n return;\n } else if (!has$2(availableModes, mode)) {\n throw new Error(`Editor mode '${ mode }' is invalid`);\n }\n if (editor.initialized) {\n switchToMode(editor, activeMode, availableModes, mode);\n } else {\n editor.on('init', () => switchToMode(editor, activeMode, availableModes, mode));\n }\n };\n const registerMode = (availableModes, mode, api) => {\n if (contains$2(defaultModes, mode)) {\n throw new Error(`Cannot override default mode ${ mode }`);\n }\n return {\n ...availableModes,\n [mode]: {\n ...api,\n deactivate: () => {\n try {\n api.deactivate();\n } catch (e) {\n console.error(`problem while deactivating editor mode ${ mode }:`, e);\n }\n }\n }\n };\n };\n\n const create$4 = editor => {\n const activeMode = Cell('design');\n const availableModes = Cell({\n design: {\n activate: noop,\n deactivate: noop,\n editorReadOnly: false\n },\n readonly: {\n activate: noop,\n deactivate: noop,\n editorReadOnly: true\n }\n });\n registerReadOnlyInputBlockers(editor);\n registerEventsAndFilters$1(editor);\n return {\n isReadOnly: () => isReadOnly(editor),\n set: mode => setMode(editor, availableModes.get(), activeMode, mode),\n get: () => activeMode.get(),\n register: (mode, api) => {\n availableModes.set(registerMode(availableModes.get(), mode, api));\n }\n };\n };\n\n const each$2 = Tools.each, explode = Tools.explode;\n const keyCodeLookup = {\n f1: 112,\n f2: 113,\n f3: 114,\n f4: 115,\n f5: 116,\n f6: 117,\n f7: 118,\n f8: 119,\n f9: 120,\n f10: 121,\n f11: 122,\n f12: 123\n };\n const modifierNames = Tools.makeMap('alt,ctrl,shift,meta,access');\n const isModifier = key => key in modifierNames;\n const parseShortcut = pattern => {\n const shortcut = {};\n const isMac = Env.os.isMacOS() || Env.os.isiOS();\n each$2(explode(pattern.toLowerCase(), '+'), value => {\n if (isModifier(value)) {\n shortcut[value] = true;\n } else {\n if (/^[0-9]{2,}$/.test(value)) {\n shortcut.keyCode = parseInt(value, 10);\n } else {\n shortcut.charCode = value.charCodeAt(0);\n shortcut.keyCode = keyCodeLookup[value] || value.toUpperCase().charCodeAt(0);\n }\n }\n });\n const id = [shortcut.keyCode];\n let key;\n for (key in modifierNames) {\n if (shortcut[key]) {\n id.push(key);\n } else {\n shortcut[key] = false;\n }\n }\n shortcut.id = id.join(',');\n if (shortcut.access) {\n shortcut.alt = true;\n if (isMac) {\n shortcut.ctrl = true;\n } else {\n shortcut.shift = true;\n }\n }\n if (shortcut.meta) {\n if (isMac) {\n shortcut.meta = true;\n } else {\n shortcut.ctrl = true;\n shortcut.meta = false;\n }\n }\n return shortcut;\n };\n class Shortcuts {\n constructor(editor) {\n this.shortcuts = {};\n this.pendingPatterns = [];\n this.editor = editor;\n const self = this;\n editor.on('keyup keypress keydown', e => {\n if ((self.hasModifier(e) || self.isFunctionKey(e)) && !e.isDefaultPrevented()) {\n each$2(self.shortcuts, shortcut => {\n if (self.matchShortcut(e, shortcut)) {\n self.pendingPatterns = shortcut.subpatterns.slice(0);\n if (e.type === 'keydown') {\n self.executeShortcutAction(shortcut);\n }\n }\n });\n if (self.matchShortcut(e, self.pendingPatterns[0])) {\n if (self.pendingPatterns.length === 1) {\n if (e.type === 'keydown') {\n self.executeShortcutAction(self.pendingPatterns[0]);\n }\n }\n self.pendingPatterns.shift();\n }\n }\n });\n }\n add(pattern, desc, cmdFunc, scope) {\n const self = this;\n const func = self.normalizeCommandFunc(cmdFunc);\n each$2(explode(Tools.trim(pattern)), pattern => {\n const shortcut = self.createShortcut(pattern, desc, func, scope);\n self.shortcuts[shortcut.id] = shortcut;\n });\n return true;\n }\n remove(pattern) {\n const shortcut = this.createShortcut(pattern);\n if (this.shortcuts[shortcut.id]) {\n delete this.shortcuts[shortcut.id];\n return true;\n }\n return false;\n }\n normalizeCommandFunc(cmdFunc) {\n const self = this;\n const cmd = cmdFunc;\n if (typeof cmd === 'string') {\n return () => {\n self.editor.execCommand(cmd, false, null);\n };\n } else if (Tools.isArray(cmd)) {\n return () => {\n self.editor.execCommand(cmd[0], cmd[1], cmd[2]);\n };\n } else {\n return cmd;\n }\n }\n createShortcut(pattern, desc, cmdFunc, scope) {\n const shortcuts = Tools.map(explode(pattern, '>'), parseShortcut);\n shortcuts[shortcuts.length - 1] = Tools.extend(shortcuts[shortcuts.length - 1], {\n func: cmdFunc,\n scope: scope || this.editor\n });\n return Tools.extend(shortcuts[0], {\n desc: this.editor.translate(desc),\n subpatterns: shortcuts.slice(1)\n });\n }\n hasModifier(e) {\n return e.altKey || e.ctrlKey || e.metaKey;\n }\n isFunctionKey(e) {\n return e.type === 'keydown' && e.keyCode >= 112 && e.keyCode <= 123;\n }\n matchShortcut(e, shortcut) {\n if (!shortcut) {\n return false;\n }\n if (shortcut.ctrl !== e.ctrlKey || shortcut.meta !== e.metaKey) {\n return false;\n }\n if (shortcut.alt !== e.altKey || shortcut.shift !== e.shiftKey) {\n return false;\n }\n if (e.keyCode === shortcut.keyCode || e.charCode && e.charCode === shortcut.charCode) {\n e.preventDefault();\n return true;\n }\n return false;\n }\n executeShortcutAction(shortcut) {\n return shortcut.func ? shortcut.func.call(shortcut.scope) : null;\n }\n }\n\n const create$3 = () => {\n const buttons = {};\n const menuItems = {};\n const popups = {};\n const icons = {};\n const contextMenus = {};\n const contextToolbars = {};\n const contexts = {};\n const sidebars = {};\n const views = {};\n const add = (collection, type) => (name, spec) => {\n collection[name.toLowerCase()] = {\n ...spec,\n type\n };\n };\n const addDefaulted = (collection, type) => (name, spec) => {\n collection[name.toLowerCase()] = {\n type,\n ...spec\n };\n };\n const addIcon = (name, svgData) => icons[name.toLowerCase()] = svgData;\n const addContext = (name, pred) => contexts[name.toLowerCase()] = pred;\n return {\n addButton: add(buttons, 'button'),\n addGroupToolbarButton: add(buttons, 'grouptoolbarbutton'),\n addToggleButton: add(buttons, 'togglebutton'),\n addMenuButton: add(buttons, 'menubutton'),\n addSplitButton: add(buttons, 'splitbutton'),\n addMenuItem: add(menuItems, 'menuitem'),\n addNestedMenuItem: add(menuItems, 'nestedmenuitem'),\n addToggleMenuItem: add(menuItems, 'togglemenuitem'),\n addAutocompleter: add(popups, 'autocompleter'),\n addContextMenu: add(contextMenus, 'contextmenu'),\n addContextToolbar: add(contextToolbars, 'contexttoolbar'),\n addContextForm: addDefaulted(contextToolbars, 'contextform'),\n addSidebar: add(sidebars, 'sidebar'),\n addView: add(views, 'views'),\n addIcon,\n addContext,\n getAll: () => ({\n buttons,\n menuItems,\n icons,\n popups,\n contextMenus,\n contextToolbars,\n sidebars,\n views,\n contexts\n })\n };\n };\n\n const registry = () => {\n const bridge = create$3();\n return {\n addAutocompleter: bridge.addAutocompleter,\n addButton: bridge.addButton,\n addContextForm: bridge.addContextForm,\n addContextMenu: bridge.addContextMenu,\n addContextToolbar: bridge.addContextToolbar,\n addIcon: bridge.addIcon,\n addMenuButton: bridge.addMenuButton,\n addMenuItem: bridge.addMenuItem,\n addNestedMenuItem: bridge.addNestedMenuItem,\n addSidebar: bridge.addSidebar,\n addSplitButton: bridge.addSplitButton,\n addToggleButton: bridge.addToggleButton,\n addGroupToolbarButton: bridge.addGroupToolbarButton,\n addToggleMenuItem: bridge.addToggleMenuItem,\n addView: bridge.addView,\n addContext: bridge.addContext,\n getAll: bridge.getAll\n };\n };\n\n const DOM$1 = DOMUtils.DOM;\n const extend = Tools.extend, each$1 = Tools.each;\n class Editor {\n constructor(id, options, editorManager) {\n this.plugins = {};\n this.contentCSS = [];\n this.contentStyles = [];\n this.loadedCSS = {};\n this.isNotDirty = false;\n this.composing = false;\n this.destroyed = false;\n this.hasHiddenInput = false;\n this.iframeElement = null;\n this.initialized = false;\n this.readonly = false;\n this.removed = false;\n this.startContent = '';\n this._pendingNativeEvents = [];\n this._skinLoaded = false;\n this._editableRoot = true;\n this.editorManager = editorManager;\n this.documentBaseUrl = editorManager.documentBaseURL;\n extend(this, EditorObservable);\n const self = this;\n this.id = id;\n this.hidden = false;\n const normalizedOptions = normalizeOptions(editorManager.defaultOptions, options);\n this.options = create$5(self, normalizedOptions, options);\n register$7(self);\n const getOption = this.options.get;\n if (getOption('deprecation_warnings')) {\n logWarnings(options, normalizedOptions);\n }\n const suffix = getOption('suffix');\n if (suffix) {\n editorManager.suffix = suffix;\n }\n this.suffix = editorManager.suffix;\n const baseUrl = getOption('base_url');\n if (baseUrl) {\n editorManager._setBaseUrl(baseUrl);\n }\n this.baseUri = editorManager.baseURI;\n const referrerPolicy = getReferrerPolicy(self);\n if (referrerPolicy) {\n ScriptLoader.ScriptLoader._setReferrerPolicy(referrerPolicy);\n DOMUtils.DOM.styleSheetLoader._setReferrerPolicy(referrerPolicy);\n }\n const contentCssCors = hasContentCssCors(self);\n if (isNonNullable(contentCssCors)) {\n DOMUtils.DOM.styleSheetLoader._setContentCssCors(contentCssCors);\n }\n AddOnManager.languageLoad = getOption('language_load');\n AddOnManager.baseURL = editorManager.baseURL;\n this.setDirty(false);\n this.documentBaseURI = new URI(getDocumentBaseUrl(self), { base_uri: this.baseUri });\n this.baseURI = this.baseUri;\n this.inline = isInline$1(self);\n this.hasVisual = isVisualAidsEnabled(self);\n this.shortcuts = new Shortcuts(this);\n this.editorCommands = new EditorCommands(this);\n registerCommands(this);\n const cacheSuffix = getOption('cache_suffix');\n if (cacheSuffix) {\n Env.cacheSuffix = cacheSuffix.replace(/^[\\?\\&]+/, '');\n }\n this.ui = {\n registry: registry(),\n styleSheetLoader: undefined,\n show: noop,\n hide: noop,\n setEnabled: noop,\n isEnabled: always\n };\n this.mode = create$4(self);\n editorManager.dispatch('SetupEditor', { editor: this });\n const setupCallback = getSetupCallback(self);\n if (isFunction(setupCallback)) {\n setupCallback.call(self, self);\n }\n }\n render() {\n render(this);\n }\n focus(skipFocus) {\n this.execCommand('mceFocus', false, skipFocus);\n }\n hasFocus() {\n return hasFocus(this);\n }\n translate(text) {\n return I18n.translate(text);\n }\n getParam(name, defaultVal, type) {\n const options = this.options;\n if (!options.isRegistered(name)) {\n if (isNonNullable(type)) {\n options.register(name, {\n processor: type,\n default: defaultVal\n });\n } else {\n options.register(name, {\n processor: always,\n default: defaultVal\n });\n }\n }\n return !options.isSet(name) && !isUndefined(defaultVal) ? defaultVal : options.get(name);\n }\n hasPlugin(name, loaded) {\n const hasPlugin = contains$2(getPlugins(this), name);\n if (hasPlugin) {\n return loaded ? PluginManager.get(name) !== undefined : true;\n } else {\n return false;\n }\n }\n nodeChanged(args) {\n this._nodeChangeDispatcher.nodeChanged(args);\n }\n addCommand(name, callback, scope) {\n this.editorCommands.addCommand(name, callback, scope);\n }\n addQueryStateHandler(name, callback, scope) {\n this.editorCommands.addQueryStateHandler(name, callback, scope);\n }\n addQueryValueHandler(name, callback, scope) {\n this.editorCommands.addQueryValueHandler(name, callback, scope);\n }\n addShortcut(pattern, desc, cmdFunc, scope) {\n this.shortcuts.add(pattern, desc, cmdFunc, scope);\n }\n execCommand(cmd, ui, value, args) {\n return this.editorCommands.execCommand(cmd, ui, value, args);\n }\n queryCommandState(cmd) {\n return this.editorCommands.queryCommandState(cmd);\n }\n queryCommandValue(cmd) {\n return this.editorCommands.queryCommandValue(cmd);\n }\n queryCommandSupported(cmd) {\n return this.editorCommands.queryCommandSupported(cmd);\n }\n show() {\n const self = this;\n if (self.hidden) {\n self.hidden = false;\n if (self.inline) {\n self.getBody().contentEditable = 'true';\n } else {\n DOM$1.show(self.getContainer());\n DOM$1.hide(self.id);\n }\n self.load();\n self.dispatch('show');\n }\n }\n hide() {\n const self = this;\n if (!self.hidden) {\n self.save();\n if (self.inline) {\n self.getBody().contentEditable = 'false';\n if (self === self.editorManager.focusedEditor) {\n self.editorManager.focusedEditor = null;\n }\n } else {\n DOM$1.hide(self.getContainer());\n DOM$1.setStyle(self.id, 'display', self.orgDisplay);\n }\n self.hidden = true;\n self.dispatch('hide');\n }\n }\n isHidden() {\n return this.hidden;\n }\n setProgressState(state, time) {\n this.dispatch('ProgressState', {\n state,\n time\n });\n }\n load(args = {}) {\n const self = this;\n const elm = self.getElement();\n if (self.removed) {\n return '';\n }\n if (elm) {\n const loadArgs = {\n ...args,\n load: true\n };\n const value = isTextareaOrInput(elm) ? elm.value : elm.innerHTML;\n const html = self.setContent(value, loadArgs);\n if (!loadArgs.no_events) {\n self.dispatch('LoadContent', {\n ...loadArgs,\n element: elm\n });\n }\n return html;\n } else {\n return '';\n }\n }\n save(args = {}) {\n const self = this;\n let elm = self.getElement();\n if (!elm || !self.initialized || self.removed) {\n return '';\n }\n const getArgs = {\n ...args,\n save: true,\n element: elm\n };\n let html = self.getContent(getArgs);\n const saveArgs = {\n ...getArgs,\n content: html\n };\n if (!saveArgs.no_events) {\n self.dispatch('SaveContent', saveArgs);\n }\n if (saveArgs.format === 'raw') {\n self.dispatch('RawSaveContent', saveArgs);\n }\n html = saveArgs.content;\n if (!isTextareaOrInput(elm)) {\n if (args.is_removing || !self.inline) {\n elm.innerHTML = html;\n }\n const form = DOM$1.getParent(self.id, 'form');\n if (form) {\n each$1(form.elements, elm => {\n if (elm.name === self.id) {\n elm.value = html;\n return false;\n } else {\n return true;\n }\n });\n }\n } else {\n elm.value = html;\n }\n saveArgs.element = getArgs.element = elm = null;\n if (saveArgs.set_dirty !== false) {\n self.setDirty(false);\n }\n return html;\n }\n setContent(content, args) {\n return setContent(this, content, args);\n }\n getContent(args) {\n return getContent(this, args);\n }\n insertContent(content, args) {\n if (args) {\n content = extend({ content }, args);\n }\n this.execCommand('mceInsertContent', false, content);\n }\n resetContent(initialContent) {\n if (initialContent === undefined) {\n setContent(this, this.startContent, { format: 'raw' });\n } else {\n setContent(this, initialContent);\n }\n this.undoManager.reset();\n this.setDirty(false);\n this.nodeChanged();\n }\n isDirty() {\n return !this.isNotDirty;\n }\n setDirty(state) {\n const oldState = !this.isNotDirty;\n this.isNotDirty = !state;\n if (state && state !== oldState) {\n this.dispatch('dirty');\n }\n }\n getContainer() {\n const self = this;\n if (!self.container) {\n self.container = self.editorContainer || DOM$1.get(self.id + '_parent');\n }\n return self.container;\n }\n getContentAreaContainer() {\n return this.contentAreaContainer;\n }\n getElement() {\n if (!this.targetElm) {\n this.targetElm = DOM$1.get(this.id);\n }\n return this.targetElm;\n }\n getWin() {\n const self = this;\n if (!self.contentWindow) {\n const elm = self.iframeElement;\n if (elm) {\n self.contentWindow = elm.contentWindow;\n }\n }\n return self.contentWindow;\n }\n getDoc() {\n const self = this;\n if (!self.contentDocument) {\n const win = self.getWin();\n if (win) {\n self.contentDocument = win.document;\n }\n }\n return self.contentDocument;\n }\n getBody() {\n var _a, _b;\n const doc = this.getDoc();\n return (_b = (_a = this.bodyElement) !== null && _a !== void 0 ? _a : doc === null || doc === void 0 ? void 0 : doc.body) !== null && _b !== void 0 ? _b : null;\n }\n convertURL(url, name, elm) {\n const self = this, getOption = self.options.get;\n const urlConverterCallback = getUrlConverterCallback(self);\n if (isFunction(urlConverterCallback)) {\n return urlConverterCallback.call(self, url, elm, true, name);\n }\n if (!getOption('convert_urls') || elm === 'link' || isObject(elm) && elm.nodeName === 'LINK' || url.indexOf('file:') === 0 || url.length === 0) {\n return url;\n }\n const urlObject = new URI(url);\n if (urlObject.protocol !== 'http' && urlObject.protocol !== 'https' && urlObject.protocol !== '') {\n return url;\n }\n if (getOption('relative_urls')) {\n return self.documentBaseURI.toRelative(url);\n }\n url = self.documentBaseURI.toAbsolute(url, getOption('remove_script_host'));\n return url;\n }\n addVisual(elm) {\n addVisual(this, elm);\n }\n setEditableRoot(state) {\n setEditableRoot(this, state);\n }\n hasEditableRoot() {\n return hasEditableRoot(this);\n }\n remove() {\n remove$1(this);\n }\n destroy(automatic) {\n destroy(this, automatic);\n }\n uploadImages() {\n return this.editorUpload.uploadImages();\n }\n _scanForImages() {\n return this.editorUpload.scanForImages();\n }\n }\n\n const DOM = DOMUtils.DOM;\n const each = Tools.each;\n let boundGlobalEvents = false;\n let beforeUnloadDelegate;\n let editors = [];\n const globalEventDelegate = e => {\n const type = e.type;\n each(EditorManager.get(), editor => {\n switch (type) {\n case 'scroll':\n editor.dispatch('ScrollWindow', e);\n break;\n case 'resize':\n editor.dispatch('ResizeWindow', e);\n break;\n }\n });\n };\n const toggleGlobalEvents = state => {\n if (state !== boundGlobalEvents) {\n const DOM = DOMUtils.DOM;\n if (state) {\n DOM.bind(window, 'resize', globalEventDelegate);\n DOM.bind(window, 'scroll', globalEventDelegate);\n } else {\n DOM.unbind(window, 'resize', globalEventDelegate);\n DOM.unbind(window, 'scroll', globalEventDelegate);\n }\n boundGlobalEvents = state;\n }\n };\n const removeEditorFromList = targetEditor => {\n const oldEditors = editors;\n editors = filter$5(editors, editor => {\n return targetEditor !== editor;\n });\n if (EditorManager.activeEditor === targetEditor) {\n EditorManager.activeEditor = editors.length > 0 ? editors[0] : null;\n }\n if (EditorManager.focusedEditor === targetEditor) {\n EditorManager.focusedEditor = null;\n }\n return oldEditors.length !== editors.length;\n };\n const purgeDestroyedEditor = editor => {\n if (editor && editor.initialized && !(editor.getContainer() || editor.getBody()).parentNode) {\n removeEditorFromList(editor);\n editor.unbindAllNativeEvents();\n editor.destroy(true);\n editor.removed = true;\n }\n };\n const isQuirksMode = document.compatMode !== 'CSS1Compat';\n const EditorManager = {\n ...Observable,\n baseURI: null,\n baseURL: null,\n defaultOptions: {},\n documentBaseURL: null,\n suffix: null,\n majorVersion: '7',\n minorVersion: '7.0',\n releaseDate: 'TBD',\n i18n: I18n,\n activeEditor: null,\n focusedEditor: null,\n setup() {\n const self = this;\n let baseURL = '';\n let suffix = '';\n let documentBaseURL = URI.getDocumentBaseUrl(document.location);\n if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(documentBaseURL)) {\n documentBaseURL = documentBaseURL.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n if (!/[\\/\\\\]$/.test(documentBaseURL)) {\n documentBaseURL += '/';\n }\n }\n const preInit = window.tinymce || window.tinyMCEPreInit;\n if (preInit) {\n baseURL = preInit.base || preInit.baseURL;\n suffix = preInit.suffix;\n } else {\n const scripts = document.getElementsByTagName('script');\n for (let i = 0; i < scripts.length; i++) {\n const src = scripts[i].src || '';\n if (src === '') {\n continue;\n }\n const srcScript = src.substring(src.lastIndexOf('/'));\n if (/tinymce(\\.full|\\.jquery|)(\\.min|\\.dev|)\\.js/.test(src)) {\n if (srcScript.indexOf('.min') !== -1) {\n suffix = '.min';\n }\n baseURL = src.substring(0, src.lastIndexOf('/'));\n break;\n }\n }\n if (!baseURL && document.currentScript) {\n const src = document.currentScript.src;\n if (src.indexOf('.min') !== -1) {\n suffix = '.min';\n }\n baseURL = src.substring(0, src.lastIndexOf('/'));\n }\n }\n self.baseURL = new URI(documentBaseURL).toAbsolute(baseURL);\n self.documentBaseURL = documentBaseURL;\n self.baseURI = new URI(self.baseURL);\n self.suffix = suffix;\n setup$w(self);\n },\n overrideDefaults(defaultOptions) {\n const baseUrl = defaultOptions.base_url;\n if (baseUrl) {\n this._setBaseUrl(baseUrl);\n }\n const suffix = defaultOptions.suffix;\n if (suffix) {\n this.suffix = suffix;\n }\n this.defaultOptions = defaultOptions;\n const pluginBaseUrls = defaultOptions.plugin_base_urls;\n if (pluginBaseUrls !== undefined) {\n each$d(pluginBaseUrls, (pluginBaseUrl, pluginName) => {\n AddOnManager.PluginManager.urls[pluginName] = pluginBaseUrl;\n });\n }\n },\n init(options) {\n const self = this;\n let result;\n const invalidInlineTargets = Tools.makeMap('area base basefont br col frame hr img input isindex link meta param embed source wbr track ' + 'colgroup option table tbody tfoot thead tr th td script noscript style textarea video audio iframe object menu', ' ');\n const isInvalidInlineTarget = (options, elm) => options.inline && elm.tagName.toLowerCase() in invalidInlineTargets;\n const createId = elm => {\n let id = elm.id;\n if (!id) {\n id = get$a(elm, 'name').filter(name => !DOM.get(name)).getOrThunk(DOM.uniqueId);\n elm.setAttribute('id', id);\n }\n return id;\n };\n const execCallback = name => {\n const callback = options[name];\n if (!callback) {\n return;\n }\n return callback.apply(self, []);\n };\n const findTargets = options => {\n if (Env.browser.isIE() || Env.browser.isEdge()) {\n initError('TinyMCE does not support the browser you are using. For a list of supported' + ' browsers please see: https://www.tiny.cloud/docs/tinymce/7/support/#supportedwebbrowsers');\n return [];\n } else if (isQuirksMode) {\n initError('Failed to initialize the editor as the document is not in standards mode. ' + 'TinyMCE requires standards mode.');\n return [];\n } else if (isString(options.selector)) {\n return DOM.select(options.selector);\n } else if (isNonNullable(options.target)) {\n return [options.target];\n } else {\n return [];\n }\n };\n let provideResults = editors => {\n result = editors;\n };\n const initEditors = () => {\n let initCount = 0;\n const editors = [];\n let targets;\n const createEditor = (id, options, targetElm) => {\n const editor = new Editor(id, options, self);\n editors.push(editor);\n editor.on('init', () => {\n if (++initCount === targets.length) {\n provideResults(editors);\n }\n });\n editor.targetElm = editor.targetElm || targetElm;\n editor.render();\n };\n DOM.unbind(window, 'ready', initEditors);\n execCallback('onpageload');\n targets = unique$1(findTargets(options));\n Tools.each(targets, elm => {\n purgeDestroyedEditor(self.get(elm.id));\n });\n targets = Tools.grep(targets, elm => {\n return !self.get(elm.id);\n });\n if (targets.length === 0) {\n provideResults([]);\n } else {\n each(targets, elm => {\n if (isInvalidInlineTarget(options, elm)) {\n initError('Could not initialize inline editor on invalid inline target element', elm);\n } else {\n createEditor(createId(elm), options, elm);\n }\n });\n }\n };\n DOM.bind(window, 'ready', initEditors);\n return new Promise(resolve => {\n if (result) {\n resolve(result);\n } else {\n provideResults = editors => {\n resolve(editors);\n };\n }\n });\n },\n get(id) {\n if (arguments.length === 0) {\n return editors.slice(0);\n } else if (isString(id)) {\n return find$2(editors, editor => {\n return editor.id === id;\n }).getOr(null);\n } else if (isNumber(id)) {\n return editors[id] ? editors[id] : null;\n } else {\n return null;\n }\n },\n add(editor) {\n const self = this;\n const existingEditor = self.get(editor.id);\n if (existingEditor === editor) {\n return editor;\n }\n if (existingEditor === null) {\n editors.push(editor);\n }\n toggleGlobalEvents(true);\n self.activeEditor = editor;\n self.dispatch('AddEditor', { editor });\n if (!beforeUnloadDelegate) {\n beforeUnloadDelegate = e => {\n const event = self.dispatch('BeforeUnload');\n if (event.returnValue) {\n e.preventDefault();\n e.returnValue = event.returnValue;\n return event.returnValue;\n }\n };\n window.addEventListener('beforeunload', beforeUnloadDelegate);\n }\n return editor;\n },\n createEditor(id, options) {\n return this.add(new Editor(id, options, this));\n },\n remove(selector) {\n const self = this;\n let editor;\n if (!selector) {\n for (let i = editors.length - 1; i >= 0; i--) {\n self.remove(editors[i]);\n }\n return;\n }\n if (isString(selector)) {\n each(DOM.select(selector), elm => {\n editor = self.get(elm.id);\n if (editor) {\n self.remove(editor);\n }\n });\n return;\n }\n editor = selector;\n if (isNull(self.get(editor.id))) {\n return null;\n }\n if (removeEditorFromList(editor)) {\n self.dispatch('RemoveEditor', { editor });\n }\n if (editors.length === 0) {\n window.removeEventListener('beforeunload', beforeUnloadDelegate);\n }\n editor.remove();\n toggleGlobalEvents(editors.length > 0);\n return editor;\n },\n execCommand(cmd, ui, value) {\n var _a;\n const self = this;\n const editorId = isObject(value) ? (_a = value.id) !== null && _a !== void 0 ? _a : value.index : value;\n switch (cmd) {\n case 'mceAddEditor': {\n if (!self.get(editorId)) {\n const editorOptions = value.options;\n new Editor(editorId, editorOptions, self).render();\n }\n return true;\n }\n case 'mceRemoveEditor': {\n const editor = self.get(editorId);\n if (editor) {\n editor.remove();\n }\n return true;\n }\n case 'mceToggleEditor': {\n const editor = self.get(editorId);\n if (!editor) {\n self.execCommand('mceAddEditor', false, value);\n return true;\n }\n if (editor.isHidden()) {\n editor.show();\n } else {\n editor.hide();\n }\n return true;\n }\n }\n if (self.activeEditor) {\n return self.activeEditor.execCommand(cmd, ui, value);\n }\n return false;\n },\n triggerSave: () => {\n each(editors, editor => {\n editor.save();\n });\n },\n addI18n: (code, items) => {\n I18n.add(code, items);\n },\n translate: text => {\n return I18n.translate(text);\n },\n setActive(editor) {\n const activeEditor = this.activeEditor;\n if (this.activeEditor !== editor) {\n if (activeEditor) {\n activeEditor.dispatch('deactivate', { relatedTarget: editor });\n }\n editor.dispatch('activate', { relatedTarget: activeEditor });\n }\n this.activeEditor = editor;\n },\n _setBaseUrl(baseUrl) {\n this.baseURL = new URI(this.documentBaseURL).toAbsolute(baseUrl.replace(/\\/+$/, ''));\n this.baseURI = new URI(this.baseURL);\n }\n };\n EditorManager.setup();\n\n const setup = () => {\n const dataValue = value$2();\n const FakeClipboardItem = items => ({\n items,\n types: keys(items),\n getType: type => get$a(items, type).getOrUndefined()\n });\n const write = data => {\n dataValue.set(data);\n };\n const read = () => dataValue.get().getOrUndefined();\n const clear = dataValue.clear;\n return {\n FakeClipboardItem,\n write,\n read,\n clear\n };\n };\n const FakeClipboard = setup();\n\n const min = Math.min, max = Math.max, round = Math.round;\n const relativePosition = (rect, targetRect, rel) => {\n let x = targetRect.x;\n let y = targetRect.y;\n const w = rect.w;\n const h = rect.h;\n const targetW = targetRect.w;\n const targetH = targetRect.h;\n const relChars = (rel || '').split('');\n if (relChars[0] === 'b') {\n y += targetH;\n }\n if (relChars[1] === 'r') {\n x += targetW;\n }\n if (relChars[0] === 'c') {\n y += round(targetH / 2);\n }\n if (relChars[1] === 'c') {\n x += round(targetW / 2);\n }\n if (relChars[3] === 'b') {\n y -= h;\n }\n if (relChars[4] === 'r') {\n x -= w;\n }\n if (relChars[3] === 'c') {\n y -= round(h / 2);\n }\n if (relChars[4] === 'c') {\n x -= round(w / 2);\n }\n return create$2(x, y, w, h);\n };\n const findBestRelativePosition = (rect, targetRect, constrainRect, rels) => {\n for (let i = 0; i < rels.length; i++) {\n const pos = relativePosition(rect, targetRect, rels[i]);\n if (pos.x >= constrainRect.x && pos.x + pos.w <= constrainRect.w + constrainRect.x && pos.y >= constrainRect.y && pos.y + pos.h <= constrainRect.h + constrainRect.y) {\n return rels[i];\n }\n }\n return null;\n };\n const inflate = (rect, w, h) => {\n return create$2(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2);\n };\n const intersect = (rect, cropRect) => {\n const x1 = max(rect.x, cropRect.x);\n const y1 = max(rect.y, cropRect.y);\n const x2 = min(rect.x + rect.w, cropRect.x + cropRect.w);\n const y2 = min(rect.y + rect.h, cropRect.y + cropRect.h);\n if (x2 - x1 < 0 || y2 - y1 < 0) {\n return null;\n }\n return create$2(x1, y1, x2 - x1, y2 - y1);\n };\n const clamp = (rect, clampRect, fixedSize) => {\n let x1 = rect.x;\n let y1 = rect.y;\n let x2 = rect.x + rect.w;\n let y2 = rect.y + rect.h;\n const cx2 = clampRect.x + clampRect.w;\n const cy2 = clampRect.y + clampRect.h;\n const underflowX1 = max(0, clampRect.x - x1);\n const underflowY1 = max(0, clampRect.y - y1);\n const overflowX2 = max(0, x2 - cx2);\n const overflowY2 = max(0, y2 - cy2);\n x1 += underflowX1;\n y1 += underflowY1;\n if (fixedSize) {\n x2 += underflowX1;\n y2 += underflowY1;\n x1 -= overflowX2;\n y1 -= overflowY2;\n }\n x2 -= overflowX2;\n y2 -= overflowY2;\n return create$2(x1, y1, x2 - x1, y2 - y1);\n };\n const create$2 = (x, y, w, h) => {\n return {\n x,\n y,\n w,\n h\n };\n };\n const fromClientRect = clientRect => {\n return create$2(clientRect.left, clientRect.top, clientRect.width, clientRect.height);\n };\n const Rect = {\n inflate,\n relativePosition,\n findBestRelativePosition,\n intersect,\n clamp,\n create: create$2,\n fromClientRect\n };\n\n const awaiter = (resolveCb, rejectCb, timeout = 1000) => {\n let done = false;\n let timer = null;\n const complete = completer => (...args) => {\n if (!done) {\n done = true;\n if (timer !== null) {\n clearTimeout(timer);\n timer = null;\n }\n completer.apply(null, args);\n }\n };\n const resolve = complete(resolveCb);\n const reject = complete(rejectCb);\n const start = (...args) => {\n if (!done && timer === null) {\n timer = setTimeout(() => reject.apply(null, args), timeout);\n }\n };\n return {\n start,\n resolve,\n reject\n };\n };\n const create$1 = () => {\n const tasks = {};\n const resultFns = {};\n const resources = {};\n const load = (id, url) => {\n const loadErrMsg = `Script at URL \"${ url }\" failed to load`;\n const runErrMsg = `Script at URL \"${ url }\" did not call \\`tinymce.Resource.add('${ id }', data)\\` within 1 second`;\n if (tasks[id] !== undefined) {\n return tasks[id];\n } else {\n const task = new Promise((resolve, reject) => {\n const waiter = awaiter(resolve, reject);\n resultFns[id] = waiter.resolve;\n ScriptLoader.ScriptLoader.loadScript(url).then(() => waiter.start(runErrMsg), () => waiter.reject(loadErrMsg));\n });\n tasks[id] = task;\n return task;\n }\n };\n const add = (id, data) => {\n if (resultFns[id] !== undefined) {\n resultFns[id](data);\n delete resultFns[id];\n }\n tasks[id] = Promise.resolve(data);\n resources[id] = data;\n };\n const has = id => {\n return id in resources;\n };\n const unload = id => {\n delete tasks[id];\n delete resources[id];\n };\n const get = id => resources[id];\n return {\n load,\n add,\n has,\n get,\n unload\n };\n };\n const Resource = create$1();\n\n const create = () => (() => {\n let data = {};\n let keys = [];\n const storage = {\n getItem: key => {\n const item = data[key];\n return item ? item : null;\n },\n setItem: (key, value) => {\n keys.push(key);\n data[key] = String(value);\n },\n key: index => {\n return keys[index];\n },\n removeItem: key => {\n keys = keys.filter(k => k === key);\n delete data[key];\n },\n clear: () => {\n keys = [];\n data = {};\n },\n length: 0\n };\n Object.defineProperty(storage, 'length', {\n get: () => keys.length,\n configurable: false,\n enumerable: false\n });\n return storage;\n })();\n\n let localStorage;\n try {\n const test = '__storage_test__';\n localStorage = window.localStorage;\n localStorage.setItem(test, test);\n localStorage.removeItem(test);\n } catch (_a) {\n localStorage = create();\n }\n var LocalStorage = localStorage;\n\n const publicApi = {\n geom: { Rect },\n util: {\n Delay,\n Tools,\n VK,\n URI,\n EventDispatcher,\n Observable,\n I18n,\n LocalStorage,\n ImageUploader\n },\n dom: {\n EventUtils,\n TreeWalker: DomTreeWalker,\n TextSeeker,\n DOMUtils,\n ScriptLoader,\n RangeUtils,\n Serializer: DomSerializer,\n StyleSheetLoader,\n ControlSelection,\n BookmarkManager,\n Selection: EditorSelection,\n Event: EventUtils.Event\n },\n html: {\n Styles,\n Entities,\n Node: AstNode,\n Schema,\n DomParser,\n Writer,\n Serializer: HtmlSerializer\n },\n Env,\n AddOnManager,\n Annotator,\n Formatter,\n UndoManager,\n EditorCommands,\n WindowManager,\n NotificationManager,\n EditorObservable,\n Shortcuts,\n Editor,\n FocusManager,\n EditorManager,\n DOM: DOMUtils.DOM,\n ScriptLoader: ScriptLoader.ScriptLoader,\n PluginManager,\n ThemeManager,\n ModelManager,\n IconManager,\n Resource,\n FakeClipboard,\n trim: Tools.trim,\n isArray: Tools.isArray,\n is: Tools.is,\n toArray: Tools.toArray,\n makeMap: Tools.makeMap,\n each: Tools.each,\n map: Tools.map,\n grep: Tools.grep,\n inArray: Tools.inArray,\n extend: Tools.extend,\n walk: Tools.walk,\n resolve: Tools.resolve,\n explode: Tools.explode,\n _addCacheSuffix: Tools._addCacheSuffix\n };\n const tinymce$1 = Tools.extend(EditorManager, publicApi);\n\n const exportToModuleLoaders = tinymce => {\n if (typeof module === 'object') {\n try {\n module.exports = tinymce;\n } catch (_a) {\n }\n }\n };\n const exportToWindowGlobal = tinymce => {\n window.tinymce = tinymce;\n window.tinyMCE = tinymce;\n };\n exportToWindowGlobal(tinymce$1);\n exportToModuleLoaders(tinymce$1);\n\n})();\n","tinymce.IconManager.add('default', {\n icons: {\n 'accessibility-check': '',\n 'accordion-toggle': '',\n 'accordion': '',\n 'action-next': '',\n 'action-prev': '',\n 'addtag': '',\n 'ai-prompt': '',\n 'ai': '',\n 'align-center': '',\n 'align-justify': '',\n 'align-left': '',\n 'align-none': '',\n 'align-right': '',\n 'arrow-left': '',\n 'arrow-right': '',\n 'bold': '',\n 'bookmark': '',\n 'border-style': '',\n 'border-width': '',\n 'brightness': '',\n 'browse': '',\n 'cancel': '',\n 'cell-background-color': '',\n 'cell-border-color': '',\n 'change-case': '',\n 'character-count': '',\n 'checklist-rtl': '',\n 'checklist': '',\n 'checkmark': '',\n 'chevron-down': '',\n 'chevron-left': '',\n 'chevron-right': '',\n 'chevron-up': '',\n 'close': '',\n 'code-sample': '',\n 'color-levels': '',\n 'color-picker': '',\n 'color-swatch-remove-color': '',\n 'color-swatch': '',\n 'comment-add': '',\n 'comment': '',\n 'contrast': '',\n 'copy': '',\n 'crop': '',\n 'cut-column': '',\n 'cut-row': '',\n 'cut': '',\n 'document-properties': '',\n 'drag': '',\n 'duplicate-column': '',\n 'duplicate-row': '',\n 'duplicate': '',\n 'edit-block': '',\n 'edit-image': '',\n 'embed-page': '',\n 'embed': '',\n 'emoji': '',\n 'export': '',\n 'fill': '',\n 'flip-horizontally': '',\n 'flip-vertically': '',\n 'footnote': '',\n 'format-code': '',\n 'format-painter': '',\n 'format': '',\n 'fullscreen': '',\n 'gallery': '',\n 'gamma': '',\n 'help': '',\n 'highlight-bg-color': '',\n 'home': '',\n 'horizontal-rule': '',\n 'image-options': '',\n 'image': '',\n 'indent': '',\n 'info': '',\n 'insert-character': '',\n 'insert-time': '',\n 'invert': '',\n 'italic': '',\n 'language': '',\n 'line-height': '',\n 'line': '',\n 'link': '',\n 'list-bull-circle': '',\n 'list-bull-default': '',\n 'list-bull-square': '',\n 'list-num-default-rtl': '',\n 'list-num-default': '',\n 'list-num-lower-alpha-rtl': '',\n 'list-num-lower-alpha': '',\n 'list-num-lower-greek-rtl': '',\n 'list-num-lower-greek': '',\n 'list-num-lower-roman-rtl': '',\n 'list-num-lower-roman': '',\n 'list-num-upper-alpha-rtl': '',\n 'list-num-upper-alpha': '',\n 'list-num-upper-roman-rtl': '',\n 'list-num-upper-roman': '',\n 'lock': '',\n 'ltr': '',\n 'math-equation': '',\n 'mentions': '',\n 'minus': '',\n 'more-drawer': '',\n 'new-document': '',\n 'new-tab': '',\n 'non-breaking': '',\n 'notice': '',\n 'ordered-list-rtl': '',\n 'ordered-list': '',\n 'orientation': '',\n 'outdent': '',\n 'export-pdf': '',\n 'export-word': '',\n 'import-word': '',\n 'page-break': '',\n 'paragraph': '',\n 'paste-column-after': '',\n 'paste-column-before': '',\n 'paste-row-after': '',\n 'paste-row-before': '',\n 'paste-text': '',\n 'paste': '',\n 'permanent-pen': '',\n 'plus': '',\n 'preferences': '',\n 'preview': '',\n 'print': '',\n 'quote': '',\n 'redo': '',\n 'reload': '',\n 'remove-formatting': '',\n 'remove': '',\n 'resize-handle': '',\n 'resize': '',\n 'restore-draft': '',\n 'revision-history': '',\n 'rotate-left': '',\n 'rotate-right': '',\n 'rtl': '',\n 'save': '',\n 'search': '',\n 'select-all': '',\n 'selected': '',\n 'send': '',\n 'settings': '',\n 'sharpen': '',\n 'sourcecode': '',\n 'spell-check': '',\n 'strike-through': '',\n 'subscript': '',\n 'superscript': '',\n 'table-caption': '',\n 'table-cell-classes': '',\n 'table-cell-properties': '',\n 'table-cell-select-all': '',\n 'table-cell-select-inner': '',\n 'table-classes': '',\n 'table-delete-column': '',\n 'table-delete-row': '',\n 'table-delete-table': '',\n 'table-insert-column-after': '',\n 'table-insert-column-before': '',\n 'table-insert-row-above': '',\n 'table-insert-row-after': '',\n 'table-left-header': '',\n 'table-merge-cells': '',\n 'table-row-numbering-rtl': '',\n 'table-row-numbering': '',\n 'table-row-properties': '',\n 'table-split-cells': '',\n 'table-top-header': '',\n 'table': '',\n 'template-add': '',\n 'template': '',\n 'temporary-placeholder': '',\n 'text-color': '',\n 'text-size-decrease': '',\n 'text-size-increase': '',\n 'toc': '',\n 'translate': '',\n 'typography': '',\n 'underline': '',\n 'undo': '',\n 'unlink': '',\n 'unlock': '',\n 'unordered-list': '',\n 'unselected': '',\n 'upload': '',\n 'add-file': '',\n 'adjustments': '',\n 'alt-text': '',\n 'blur': '',\n 'box': '',\n 'camera': '',\n 'caption': '',\n 'dropbox': '',\n 'evernote': '',\n 'exposure': '',\n 'fb': '',\n 'flickr': '',\n 'folder': '',\n 'google-drive': '',\n 'google-photos': '',\n 'grayscale': '',\n 'huddle': '',\n 'image-decorative': '',\n 'image-enhancements': '',\n 'instagram': '',\n 'onedrive': '',\n 'revert-changes': '',\n 'saturation': '',\n 'transform-image': '',\n 'vibrance': '',\n 'vk': '',\n 'warmth': '',\n 'user': '',\n 'vertical-align': '',\n 'visualblocks': '',\n 'visualchars': '',\n 'warning': '',\n 'zoom-in': '',\n 'zoom-out': '',\n }\n});","// Exports the \"default\" icons for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/icons/default')\n// ES2015:\n// import 'tinymce/icons/default'\nrequire('./icons.js');","/**\n * TinyMCE version 7.7.0 (TBD)\n */\n\n(function () {\n 'use strict';\n\n const getPrototypeOf$2 = Object.getPrototypeOf;\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType$1 = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq$1 = t => a => t === a;\n const is$2 = (value, constructor) => isObject(value) && hasProto(value, constructor, (o, proto) => getPrototypeOf$2(o) === proto);\n const isString = isType$1('string');\n const isObject = isType$1('object');\n const isPlainObject = value => is$2(value, Object);\n const isArray = isType$1('array');\n const isNull = eq$1(null);\n const isBoolean = isSimpleType('boolean');\n const isUndefined = eq$1(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isNumber = isSimpleType('number');\n const isArrayOf = (value, pred) => {\n if (isArray(value)) {\n for (let i = 0, len = value.length; i < len; ++i) {\n if (!pred(value[i])) {\n return false;\n }\n }\n return true;\n }\n return false;\n };\n\n const noop = () => {\n };\n const noarg = f => () => f();\n const compose = (fa, fb) => {\n return (...args) => {\n return fa(fb.apply(null, args));\n };\n };\n const compose1 = (fbc, fab) => a => fbc(fab(a));\n const constant$1 = value => {\n return () => {\n return value;\n };\n };\n const identity = x => {\n return x;\n };\n const tripleEquals = (a, b) => {\n return a === b;\n };\n function curry(fn, ...initialArgs) {\n return (...restArgs) => {\n const all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n const not = f => t => !f(t);\n const die = msg => {\n return () => {\n throw new Error(msg);\n };\n };\n const apply$1 = f => {\n return f();\n };\n const never = constant$1(false);\n const always = constant$1(true);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativeSlice = Array.prototype.slice;\n const nativeIndexOf = Array.prototype.indexOf;\n const nativePush = Array.prototype.push;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const indexOf = (xs, x) => {\n const r = rawIndexOf(xs, x);\n return r === -1 ? Optional.none() : Optional.some(r);\n };\n const contains$2 = (xs, x) => rawIndexOf(xs, x) > -1;\n const exists = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n const range$2 = (num, f) => {\n const r = [];\n for (let i = 0; i < num; i++) {\n r.push(f(i));\n }\n return r;\n };\n const chunk$1 = (array, size) => {\n const r = [];\n for (let i = 0; i < array.length; i += size) {\n const s = nativeSlice.call(array, i, i + size);\n r.push(s);\n }\n return r;\n };\n const map$2 = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each$1 = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const eachr = (xs, f) => {\n for (let i = xs.length - 1; i >= 0; i--) {\n const x = xs[i];\n f(x, i);\n }\n };\n const partition$3 = (xs, pred) => {\n const pass = [];\n const fail = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n const arr = pred(x, i) ? pass : fail;\n arr.push(x);\n }\n return {\n pass,\n fail\n };\n };\n const filter$2 = (xs, pred) => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n const foldr = (xs, f, acc) => {\n eachr(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const foldl = (xs, f, acc) => {\n each$1(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const findUntil = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n const find$5 = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\n const findIndex$1 = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(i);\n }\n }\n return Optional.none();\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind$3 = (xs, f) => flatten(map$2(xs, f));\n const forall = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; ++i) {\n const x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n const reverse = xs => {\n const r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n const difference = (a1, a2) => filter$2(a1, x => !contains$2(a2, x));\n const mapToObject = (xs, f) => {\n const r = {};\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n const pure$2 = x => [x];\n const sort = (xs, comparator) => {\n const copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n const get$i = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n const head = xs => get$i(xs, 0);\n const last$1 = xs => get$i(xs, xs.length - 1);\n const from = isFunction(Array.from) ? Array.from : x => nativeSlice.call(x);\n const findMap = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n const r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n const keys = Object.keys;\n const hasOwnProperty = Object.hasOwnProperty;\n const each = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const map$1 = (obj, f) => {\n return tupleMap(obj, (x, i) => ({\n k: i,\n v: f(x, i)\n }));\n };\n const tupleMap = (obj, f) => {\n const r = {};\n each(obj, (x, i) => {\n const tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n const objAcc = r => (x, i) => {\n r[i] = x;\n };\n const internalFilter = (obj, pred, onTrue, onFalse) => {\n each(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const bifilter = (obj, pred) => {\n const t = {};\n const f = {};\n internalFilter(obj, pred, objAcc(t), objAcc(f));\n return {\n t,\n f\n };\n };\n const filter$1 = (obj, pred) => {\n const t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n const mapToArray = (obj, f) => {\n const r = [];\n each(obj, (value, name) => {\n r.push(f(value, name));\n });\n return r;\n };\n const find$4 = (obj, pred) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n if (pred(x, i, obj)) {\n return Optional.some(x);\n }\n }\n return Optional.none();\n };\n const values = obj => {\n return mapToArray(obj, identity);\n };\n const get$h = (obj, key) => {\n return has$2(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n const has$2 = (obj, key) => hasOwnProperty.call(obj, key);\n const hasNonNullableKey = (obj, key) => has$2(obj, key) && obj[key] !== undefined && obj[key] !== null;\n\n const is$1 = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n const equals = (lhs, rhs, comparator = tripleEquals) => lift2(lhs, rhs, comparator).getOr(lhs.isNone() && rhs.isNone());\n const cat = arr => {\n const r = [];\n const push = x => {\n r.push(x);\n };\n for (let i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n const sequence = arr => {\n const r = [];\n for (let i = 0; i < arr.length; i++) {\n const x = arr[i];\n if (x.isSome()) {\n r.push(x.getOrDie());\n } else {\n return Optional.none();\n }\n }\n return Optional.some(r);\n };\n const lift2 = (oa, ob, f) => oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n const lift3 = (oa, ob, oc, f) => oa.isSome() && ob.isSome() && oc.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Optional.none();\n const mapFrom = (a, f) => a !== undefined && a !== null ? Optional.some(f(a)) : Optional.none();\n const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n const addToEnd = (str, suffix) => {\n return str + suffix;\n };\n const removeFromStart = (str, numChars) => {\n return str.substring(numChars);\n };\n\n const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n const removeLeading = (str, prefix) => {\n return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n };\n const ensureTrailing = (str, suffix) => {\n return endsWith(str, suffix) ? str : addToEnd(str, suffix);\n };\n const contains$1 = (str, substr, start = 0, end) => {\n const idx = str.indexOf(substr, start);\n if (idx !== -1) {\n return isUndefined(end) ? true : idx + substr.length <= end;\n } else {\n return false;\n }\n };\n const startsWith = (str, prefix) => {\n return checkRange(str, prefix, 0);\n };\n const endsWith = (str, suffix) => {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n const blank = r => s => s.replace(r, '');\n const trim$1 = blank(/^\\s+|\\s+$/g);\n const isNotEmpty = s => s.length > 0;\n const isEmpty = s => !isNotEmpty(s);\n const toFloat = value => {\n const num = parseFloat(value);\n return isNaN(num) ? Optional.none() : Optional.some(num);\n };\n\n const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n const fromHtml$2 = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n const message = 'HTML does not have a single root node';\n console.error(message, html);\n throw new Error(message);\n }\n return fromDom(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom(node);\n };\n const fromDom = node => {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n const fromPoint = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n const SugarElement = {\n fromHtml: fromHtml$2,\n fromTag,\n fromText,\n fromDom,\n fromPoint\n };\n\n const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n const path$1 = (parts, scope) => {\n let o = scope !== undefined && scope !== null ? scope : Global;\n for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n const resolve = (p, scope) => {\n const parts = p.split('.');\n return path$1(parts, scope);\n };\n\n const unsafe = (name, scope) => {\n return resolve(name, scope);\n };\n const getOrDie$1 = (name, scope) => {\n const actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n\n const getPrototypeOf$1 = Object.getPrototypeOf;\n const sandHTMLElement = scope => {\n return getOrDie$1('HTMLElement', scope);\n };\n const isPrototypeOf = x => {\n const scope = resolve('ownerDocument.defaultView', x);\n return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf$1(x).constructor.name));\n };\n\n const DOCUMENT = 9;\n const DOCUMENT_FRAGMENT = 11;\n const ELEMENT = 1;\n const TEXT = 3;\n\n const name$3 = element => {\n const r = element.dom.nodeName;\n return r.toLowerCase();\n };\n const type$1 = element => element.dom.nodeType;\n const isType = t => element => type$1(element) === t;\n const isHTMLElement = element => isElement$1(element) && isPrototypeOf(element.dom);\n const isElement$1 = isType(ELEMENT);\n const isText = isType(TEXT);\n const isDocument = isType(DOCUMENT);\n const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n const isTag = tag => e => isElement$1(e) && name$3(e) === tag;\n\n const is = (element, selector) => {\n const dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n const elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n const all$3 = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map$2(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n const one = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n };\n\n const eq = (e1, e2) => e1.dom === e2.dom;\n const contains = (e1, e2) => {\n const d1 = e1.dom;\n const d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n\n const owner$4 = element => SugarElement.fromDom(element.dom.ownerDocument);\n const documentOrOwner = dos => isDocument(dos) ? dos : owner$4(dos);\n const documentElement = element => SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n const defaultView = element => SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n const parentNode = element => parent(element);\n const parentElement = element => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n const parents = (element, isRoot) => {\n const stop = isFunction(isRoot) ? isRoot : never;\n let dom = element.dom;\n const ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n const rawParent = dom.parentNode;\n const p = SugarElement.fromDom(rawParent);\n ret.push(p);\n if (stop(p) === true) {\n break;\n } else {\n dom = rawParent;\n }\n }\n return ret;\n };\n const offsetParent = element => Optional.from(element.dom.offsetParent).map(SugarElement.fromDom);\n const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n const children = element => map$2(element.dom.childNodes, SugarElement.fromDom);\n const child$2 = (element, index) => {\n const cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n const firstChild = element => child$2(element, 0);\n const spot = (element, offset) => ({\n element,\n offset\n });\n const leaf = (element, offset) => {\n const cs = children(element);\n return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);\n };\n\n const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n const getRootNode = e => SugarElement.fromDom(e.dom.getRootNode());\n const getContentContainer = dos => isShadowRoot(dos) ? dos : SugarElement.fromDom(documentOrOwner(dos).dom.body);\n const isInShadowRoot = e => getShadowRoot(e).isSome();\n const getShadowRoot = e => {\n const r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n const getOriginalEventTarget = event => {\n if (isNonNullable(event.target)) {\n const el = SugarElement.fromDom(event.target);\n if (isElement$1(el) && isOpenShadowHost(el)) {\n if (event.composed && event.composedPath) {\n const composedPath = event.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Optional.from(event.target);\n };\n const isOpenShadowHost = element => isNonNullable(element.dom.shadowRoot);\n\n const inBody = element => {\n const dom = isText(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n const doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n };\n const body = () => getBody(SugarElement.fromDom(document));\n const getBody = doc => {\n const b = doc.dom.body;\n if (b === null || b === undefined) {\n throw new Error('Body is not available yet');\n }\n return SugarElement.fromDom(b);\n };\n\n const rawSet = (dom, key, value) => {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n const set$9 = (element, key, value) => {\n rawSet(element.dom, key, value);\n };\n const setAll$1 = (element, attrs) => {\n const dom = element.dom;\n each(attrs, (v, k) => {\n rawSet(dom, k, v);\n });\n };\n const get$g = (element, key) => {\n const v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n const getOpt = (element, key) => Optional.from(get$g(element, key));\n const has$1 = (element, key) => {\n const dom = element.dom;\n return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n };\n const remove$8 = (element, key) => {\n element.dom.removeAttribute(key);\n };\n const clone$2 = element => foldl(element.dom.attributes, (acc, attr) => {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n\n const internalSet = (dom, property, value) => {\n if (!isString(value)) {\n console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n const internalRemove = (dom, property) => {\n if (isSupported(dom)) {\n dom.style.removeProperty(property);\n }\n };\n const set$8 = (element, property, value) => {\n const dom = element.dom;\n internalSet(dom, property, value);\n };\n const setAll = (element, css) => {\n const dom = element.dom;\n each(css, (v, k) => {\n internalSet(dom, k, v);\n });\n };\n const setOptions = (element, css) => {\n const dom = element.dom;\n each(css, (v, k) => {\n v.fold(() => {\n internalRemove(dom, k);\n }, value => {\n internalSet(dom, k, value);\n });\n });\n };\n const get$f = (element, property) => {\n const dom = element.dom;\n const styles = window.getComputedStyle(dom);\n const r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n const getUnsafeProperty = (dom, property) => isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n const getRaw = (element, property) => {\n const dom = element.dom;\n const raw = getUnsafeProperty(dom, property);\n return Optional.from(raw).filter(r => r.length > 0);\n };\n const getAllRaw = element => {\n const css = {};\n const dom = element.dom;\n if (isSupported(dom)) {\n for (let i = 0; i < dom.style.length; i++) {\n const ruleName = dom.style.item(i);\n css[ruleName] = dom.style[ruleName];\n }\n }\n return css;\n };\n const isValidValue$1 = (tag, property, value) => {\n const element = SugarElement.fromTag(tag);\n set$8(element, property, value);\n const style = getRaw(element, property);\n return style.isSome();\n };\n const remove$7 = (element, property) => {\n const dom = element.dom;\n internalRemove(dom, property);\n if (is$1(getOpt(element, 'style').map(trim$1), '')) {\n remove$8(element, 'style');\n }\n };\n const reflow = e => e.dom.offsetWidth;\n\n const Dimension = (name, getOffset) => {\n const set = (element, h) => {\n if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n }\n const dom = element.dom;\n if (isSupported(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n const get = element => {\n const r = getOffset(element);\n if (r <= 0 || r === null) {\n const css = get$f(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n const getOuter = get;\n const aggregate = (element, properties) => foldl(properties, (acc, property) => {\n const val = get$f(element, property);\n const value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n const max = (element, value, properties) => {\n const cumulativeInclusions = aggregate(element, properties);\n const absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set,\n get,\n getOuter,\n aggregate,\n max\n };\n };\n\n const api$2 = Dimension('height', element => {\n const dom = element.dom;\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n const get$e = element => api$2.get(element);\n const getOuter$2 = element => api$2.getOuter(element);\n const setMax$1 = (element, value) => {\n const inclusions = [\n 'margin-top',\n 'border-top-width',\n 'padding-top',\n 'padding-bottom',\n 'border-bottom-width',\n 'margin-bottom'\n ];\n const absMax = api$2.max(element, value, inclusions);\n set$8(element, 'max-height', absMax + 'px');\n };\n\n const r$1 = (left, top) => {\n const translate = (x, y) => r$1(left + x, top + y);\n return {\n left,\n top,\n translate\n };\n };\n const SugarPosition = r$1;\n\n const boxPosition = dom => {\n const box = dom.getBoundingClientRect();\n return SugarPosition(box.left, box.top);\n };\n const firstDefinedOrZero = (a, b) => {\n if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n const absolute$3 = element => {\n const doc = element.dom.ownerDocument;\n const body = doc.body;\n const win = doc.defaultView;\n const html = doc.documentElement;\n if (body === element.dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n const scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n const scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n const clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n const clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport$1(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n const viewport$1 = element => {\n const dom = element.dom;\n const doc = dom.ownerDocument;\n const body = doc.body;\n if (body === dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return SugarPosition(0, 0);\n }\n return boxPosition(dom);\n };\n\n const api$1 = Dimension('width', element => element.dom.offsetWidth);\n const set$7 = (element, h) => api$1.set(element, h);\n const get$d = element => api$1.get(element);\n const getOuter$1 = element => api$1.getOuter(element);\n const setMax = (element, value) => {\n const inclusions = [\n 'margin-left',\n 'border-left-width',\n 'padding-left',\n 'padding-right',\n 'border-right-width',\n 'margin-right'\n ];\n const absMax = api$1.max(element, value, inclusions);\n set$8(element, 'max-width', absMax + 'px');\n };\n\n const cached = f => {\n let called = false;\n let r;\n return (...args) => {\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n const DeviceType = (os, browser, userAgent, mediaMatch) => {\n const isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n const isiPhone = os.isiOS() && !isiPad;\n const isMobile = os.isiOS() || os.isAndroid();\n const isTouch = isMobile || mediaMatch('(pointer:coarse)');\n const isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n const isPhone = isiPhone || isMobile && !isTablet;\n const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n const isDesktop = !isPhone && !isTablet && !iOSwebview;\n return {\n isiPad: constant$1(isiPad),\n isiPhone: constant$1(isiPhone),\n isTablet: constant$1(isTablet),\n isPhone: constant$1(isPhone),\n isTouch: constant$1(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant$1(iOSwebview),\n isDesktop: constant$1(isDesktop)\n };\n };\n\n const firstMatch = (regexes, s) => {\n for (let i = 0; i < regexes.length; i++) {\n const x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n const find$3 = (regexes, agent) => {\n const r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n const group = i => {\n return Number(agent.replace(r, '$' + i));\n };\n return nu$d(group(1), group(2));\n };\n const detect$4 = (versionRegexes, agent) => {\n const cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$3();\n }\n return find$3(versionRegexes, cleanedAgent);\n };\n const unknown$3 = () => {\n return nu$d(0, 0);\n };\n const nu$d = (major, minor) => {\n return {\n major,\n minor\n };\n };\n const Version = {\n nu: nu$d,\n detect: detect$4,\n unknown: unknown$3\n };\n\n const detectBrowser$1 = (browsers, userAgentData) => {\n return findMap(userAgentData.brands, uaBrand => {\n const lcBrand = uaBrand.brand.toLowerCase();\n return find$5(browsers, browser => {\n var _a;\n return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n }).map(info => ({\n current: info.name,\n version: Version.nu(parseInt(uaBrand.version, 10), 0)\n }));\n });\n };\n\n const detect$3 = (candidates, userAgent) => {\n const agent = String(userAgent).toLowerCase();\n return find$5(candidates, candidate => {\n return candidate.search(agent);\n });\n };\n const detectBrowser = (browsers, userAgent) => {\n return detect$3(browsers, userAgent).map(browser => {\n const version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version\n };\n });\n };\n const detectOs = (oses, userAgent) => {\n return detect$3(oses, userAgent).map(os => {\n const version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version\n };\n });\n };\n\n const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n const checkContains = target => {\n return uastring => {\n return contains$1(uastring, target);\n };\n };\n const browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: uastring => {\n return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chromium',\n brand: 'Chromium',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: uastring => {\n return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: uastring => {\n return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: uastring => {\n return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\n }\n }\n ];\n const oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: uastring => {\n return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'macOS',\n search: checkContains('mac os x'),\n versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n },\n {\n name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n const PlatformInfo = {\n browsers: constant$1(browsers),\n oses: constant$1(oses)\n };\n\n const edge = 'Edge';\n const chromium = 'Chromium';\n const ie = 'IE';\n const opera = 'Opera';\n const firefox = 'Firefox';\n const safari = 'Safari';\n const unknown$2 = () => {\n return nu$c({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$c = info => {\n const current = info.current;\n const version = info.version;\n const isBrowser = name => () => current === name;\n return {\n current,\n version,\n isEdge: isBrowser(edge),\n isChromium: isBrowser(chromium),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n const Browser = {\n unknown: unknown$2,\n nu: nu$c,\n edge: constant$1(edge),\n chromium: constant$1(chromium),\n ie: constant$1(ie),\n opera: constant$1(opera),\n firefox: constant$1(firefox),\n safari: constant$1(safari)\n };\n\n const windows = 'Windows';\n const ios = 'iOS';\n const android = 'Android';\n const linux = 'Linux';\n const macos = 'macOS';\n const solaris = 'Solaris';\n const freebsd = 'FreeBSD';\n const chromeos = 'ChromeOS';\n const unknown$1 = () => {\n return nu$b({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$b = info => {\n const current = info.current;\n const version = info.version;\n const isOS = name => () => current === name;\n return {\n current,\n version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isMacOS: isOS(macos),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n const OperatingSystem = {\n unknown: unknown$1,\n nu: nu$b,\n windows: constant$1(windows),\n ios: constant$1(ios),\n android: constant$1(android),\n linux: constant$1(linux),\n macos: constant$1(macos),\n solaris: constant$1(solaris),\n freebsd: constant$1(freebsd),\n chromeos: constant$1(chromeos)\n };\n\n const detect$2 = (userAgent, userAgentDataOpt, mediaMatch) => {\n const browsers = PlatformInfo.browsers();\n const oses = PlatformInfo.oses();\n const browser = userAgentDataOpt.bind(userAgentData => detectBrowser$1(browsers, userAgentData)).orThunk(() => detectBrowser(browsers, userAgent)).fold(Browser.unknown, Browser.nu);\n const os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n const deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n return {\n browser,\n os,\n deviceType\n };\n };\n const PlatformDetection = { detect: detect$2 };\n\n const mediaMatch = query => window.matchMedia(query).matches;\n let platform = cached(() => PlatformDetection.detect(window.navigator.userAgent, Optional.from(window.navigator.userAgentData), mediaMatch));\n const detect$1 = () => platform();\n\n const mkEvent = (target, x, y, stop, prevent, kill, raw) => ({\n target,\n x,\n y,\n stop,\n prevent,\n kill,\n raw\n });\n const fromRawEvent$1 = rawEvent => {\n const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n const stop = () => rawEvent.stopPropagation();\n const prevent = () => rawEvent.preventDefault();\n const kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n const handle = (filter, handler) => rawEvent => {\n if (filter(rawEvent)) {\n handler(fromRawEvent$1(rawEvent));\n }\n };\n const binder = (element, event, filter, handler, useCapture) => {\n const wrapped = handle(filter, handler);\n element.dom.addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n const bind$2 = (element, event, filter, handler) => binder(element, event, filter, handler, false);\n const capture$1 = (element, event, filter, handler) => binder(element, event, filter, handler, true);\n const unbind = (element, event, handler, useCapture) => {\n element.dom.removeEventListener(event, handler, useCapture);\n };\n\n const before$1 = (marker, element) => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n const after$2 = (marker, element) => {\n const sibling = nextSibling(marker);\n sibling.fold(() => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n append$2(v, element);\n });\n }, v => {\n before$1(v, element);\n });\n };\n const prepend$1 = (parent, element) => {\n const firstChild$1 = firstChild(parent);\n firstChild$1.fold(() => {\n append$2(parent, element);\n }, v => {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n const append$2 = (parent, element) => {\n parent.dom.appendChild(element.dom);\n };\n const appendAt = (parent, element, index) => {\n child$2(parent, index).fold(() => {\n append$2(parent, element);\n }, v => {\n before$1(v, element);\n });\n };\n\n const append$1 = (parent, elements) => {\n each$1(elements, x => {\n append$2(parent, x);\n });\n };\n\n const empty = element => {\n element.dom.textContent = '';\n each$1(children(element), rogue => {\n remove$6(rogue);\n });\n };\n const remove$6 = element => {\n const dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n\n const get$c = _DOC => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n const y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return SugarPosition(x, y);\n };\n const to = (x, y, _DOC) => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const win = doc.defaultView;\n if (win) {\n win.scrollTo(x, y);\n }\n };\n\n const get$b = _win => {\n const win = _win === undefined ? window : _win;\n if (detect$1().browser.isFirefox()) {\n return Optional.none();\n } else {\n return Optional.from(win.visualViewport);\n }\n };\n const bounds$1 = (x, y, width, height) => ({\n x,\n y,\n width,\n height,\n right: x + width,\n bottom: y + height\n });\n const getBounds$3 = _win => {\n const win = _win === undefined ? window : _win;\n const doc = win.document;\n const scroll = get$c(SugarElement.fromDom(doc));\n return get$b(win).fold(() => {\n const html = win.document.documentElement;\n const width = html.clientWidth;\n const height = html.clientHeight;\n return bounds$1(scroll.left, scroll.top, width, height);\n }, visualViewport => bounds$1(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height));\n };\n\n const getDocument = () => SugarElement.fromDom(document);\n\n const walkUp = (navigation, doc) => {\n const frame = navigation.view(doc);\n return frame.fold(constant$1([]), f => {\n const parent = navigation.owner(f);\n const rest = walkUp(navigation, parent);\n return [f].concat(rest);\n });\n };\n const pathTo = (element, navigation) => {\n const d = navigation.owner(element);\n const paths = walkUp(navigation, d);\n return Optional.some(paths);\n };\n\n const view = doc => {\n var _a;\n const element = doc.dom === document ? Optional.none() : Optional.from((_a = doc.dom.defaultView) === null || _a === void 0 ? void 0 : _a.frameElement);\n return element.map(SugarElement.fromDom);\n };\n const owner$3 = element => owner$4(element);\n\n var Navigation = /*#__PURE__*/Object.freeze({\n __proto__: null,\n view: view,\n owner: owner$3\n });\n\n const find$2 = element => {\n const doc = getDocument();\n const scroll = get$c(doc);\n const path = pathTo(element, Navigation);\n return path.fold(curry(absolute$3, element), frames => {\n const offset = viewport$1(element);\n const r = foldr(frames, (b, a) => {\n const loc = viewport$1(a);\n return {\n left: b.left + loc.left,\n top: b.top + loc.top\n };\n }, {\n left: 0,\n top: 0\n });\n return SugarPosition(r.left + offset.left + scroll.left, r.top + offset.top + scroll.top);\n });\n };\n\n const pointed = (point, width, height) => ({\n point,\n width,\n height\n });\n const rect = (x, y, width, height) => ({\n x,\n y,\n width,\n height\n });\n const bounds = (x, y, width, height) => ({\n x,\n y,\n width,\n height,\n right: x + width,\n bottom: y + height\n });\n const box$1 = element => {\n const xy = absolute$3(element);\n const w = getOuter$1(element);\n const h = getOuter$2(element);\n return bounds(xy.left, xy.top, w, h);\n };\n const absolute$2 = element => {\n const position = find$2(element);\n const width = getOuter$1(element);\n const height = getOuter$2(element);\n return bounds(position.left, position.top, width, height);\n };\n const constrain = (original, constraint) => {\n const left = Math.max(original.x, constraint.x);\n const top = Math.max(original.y, constraint.y);\n const right = Math.min(original.right, constraint.right);\n const bottom = Math.min(original.bottom, constraint.bottom);\n const width = right - left;\n const height = bottom - top;\n return bounds(left, top, width, height);\n };\n const constrainByMany = (original, constraints) => {\n return foldl(constraints, (acc, c) => constrain(acc, c), original);\n };\n const win = () => getBounds$3(window);\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n const singleton$1 = doRevoke => {\n const subject = Cell(Optional.none());\n const revoke = () => subject.get().each(doRevoke);\n const clear = () => {\n revoke();\n subject.set(Optional.none());\n };\n const isSet = () => subject.get().isSome();\n const get = () => subject.get();\n const set = s => {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear,\n isSet,\n get,\n set\n };\n };\n const destroyable = () => singleton$1(s => s.destroy());\n const unbindable = () => singleton$1(s => s.unbind());\n const value$4 = () => {\n const subject = singleton$1(noop);\n const on = f => subject.get().each(f);\n return {\n ...subject,\n on\n };\n };\n\n var global$a = tinymce.util.Tools.resolve('tinymce.ThemeManager');\n\n const value$3 = value => {\n const applyHelper = fn => fn(value);\n const constHelper = constant$1(value);\n const outputHelper = () => output;\n const output = {\n tag: true,\n inner: value,\n fold: (_onError, onValue) => onValue(value),\n isValue: always,\n isError: never,\n map: mapper => Result.value(mapper(value)),\n mapError: outputHelper,\n bind: applyHelper,\n exists: applyHelper,\n forall: applyHelper,\n getOr: constHelper,\n or: outputHelper,\n getOrThunk: constHelper,\n orThunk: outputHelper,\n getOrDie: constHelper,\n each: fn => {\n fn(value);\n },\n toOptional: () => Optional.some(value)\n };\n return output;\n };\n const error$1 = error => {\n const outputHelper = () => output;\n const output = {\n tag: false,\n inner: error,\n fold: (onError, _onValue) => onError(error),\n isValue: never,\n isError: always,\n map: outputHelper,\n mapError: mapper => Result.error(mapper(error)),\n bind: outputHelper,\n exists: never,\n forall: always,\n getOr: identity,\n or: identity,\n getOrThunk: apply$1,\n orThunk: apply$1,\n getOrDie: die(String(error)),\n each: noop,\n toOptional: Optional.none\n };\n return output;\n };\n const fromOption = (optional, err) => optional.fold(() => error$1(err), value$3);\n const Result = {\n value: value$3,\n error: error$1,\n fromOption\n };\n\n var SimpleResultType;\n (function (SimpleResultType) {\n SimpleResultType[SimpleResultType['Error'] = 0] = 'Error';\n SimpleResultType[SimpleResultType['Value'] = 1] = 'Value';\n }(SimpleResultType || (SimpleResultType = {})));\n const fold$1 = (res, onError, onValue) => res.stype === SimpleResultType.Error ? onError(res.serror) : onValue(res.svalue);\n const partition$2 = results => {\n const values = [];\n const errors = [];\n each$1(results, obj => {\n fold$1(obj, err => errors.push(err), val => values.push(val));\n });\n return {\n values,\n errors\n };\n };\n const mapError = (res, f) => {\n if (res.stype === SimpleResultType.Error) {\n return {\n stype: SimpleResultType.Error,\n serror: f(res.serror)\n };\n } else {\n return res;\n }\n };\n const map = (res, f) => {\n if (res.stype === SimpleResultType.Value) {\n return {\n stype: SimpleResultType.Value,\n svalue: f(res.svalue)\n };\n } else {\n return res;\n }\n };\n const bind$1 = (res, f) => {\n if (res.stype === SimpleResultType.Value) {\n return f(res.svalue);\n } else {\n return res;\n }\n };\n const bindError = (res, f) => {\n if (res.stype === SimpleResultType.Error) {\n return f(res.serror);\n } else {\n return res;\n }\n };\n const svalue = v => ({\n stype: SimpleResultType.Value,\n svalue: v\n });\n const serror = e => ({\n stype: SimpleResultType.Error,\n serror: e\n });\n const toResult$1 = res => fold$1(res, Result.error, Result.value);\n const fromResult$1 = res => res.fold(serror, svalue);\n const SimpleResult = {\n fromResult: fromResult$1,\n toResult: toResult$1,\n svalue,\n partition: partition$2,\n serror,\n bind: bind$1,\n bindError,\n map,\n mapError,\n fold: fold$1\n };\n\n const field$2 = (key, newKey, presence, prop) => ({\n tag: 'field',\n key,\n newKey,\n presence,\n prop\n });\n const customField$1 = (newKey, instantiator) => ({\n tag: 'custom',\n newKey,\n instantiator\n });\n const fold = (value, ifField, ifCustom) => {\n switch (value.tag) {\n case 'field':\n return ifField(value.key, value.newKey, value.presence, value.prop);\n case 'custom':\n return ifCustom(value.newKey, value.instantiator);\n }\n };\n\n const shallow$1 = (old, nu) => {\n return nu;\n };\n const deep$1 = (old, nu) => {\n const bothObjects = isPlainObject(old) && isPlainObject(nu);\n return bothObjects ? deepMerge(old, nu) : nu;\n };\n const baseMerge = merger => {\n return (...objects) => {\n if (objects.length === 0) {\n throw new Error(`Can't merge zero objects`);\n }\n const ret = {};\n for (let j = 0; j < objects.length; j++) {\n const curObject = objects[j];\n for (const key in curObject) {\n if (has$2(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n const deepMerge = baseMerge(deep$1);\n const merge$1 = baseMerge(shallow$1);\n\n const required$2 = () => ({\n tag: 'required',\n process: {}\n });\n const defaultedThunk = fallbackThunk => ({\n tag: 'defaultedThunk',\n process: fallbackThunk\n });\n const defaulted$1 = fallback => defaultedThunk(constant$1(fallback));\n const asOption = () => ({\n tag: 'option',\n process: {}\n });\n const mergeWithThunk = baseThunk => ({\n tag: 'mergeWithThunk',\n process: baseThunk\n });\n const mergeWith = base => mergeWithThunk(constant$1(base));\n\n const mergeValues$1 = (values, base) => values.length > 0 ? SimpleResult.svalue(deepMerge(base, merge$1.apply(undefined, values))) : SimpleResult.svalue(base);\n const mergeErrors$1 = errors => compose(SimpleResult.serror, flatten)(errors);\n const consolidateObj = (objects, base) => {\n const partition = SimpleResult.partition(objects);\n return partition.errors.length > 0 ? mergeErrors$1(partition.errors) : mergeValues$1(partition.values, base);\n };\n const consolidateArr = objects => {\n const partitions = SimpleResult.partition(objects);\n return partitions.errors.length > 0 ? mergeErrors$1(partitions.errors) : SimpleResult.svalue(partitions.values);\n };\n const ResultCombine = {\n consolidateObj,\n consolidateArr\n };\n\n const formatObj = input => {\n return isObject(input) && keys(input).length > 100 ? ' removed due to size' : JSON.stringify(input, null, 2);\n };\n const formatErrors = errors => {\n const es = errors.length > 10 ? errors.slice(0, 10).concat([{\n path: [],\n getErrorInfo: constant$1('... (only showing first ten failures)')\n }]) : errors;\n return map$2(es, e => {\n return 'Failed path: (' + e.path.join(' > ') + ')\\n' + e.getErrorInfo();\n });\n };\n\n const nu$a = (path, getErrorInfo) => {\n return SimpleResult.serror([{\n path,\n getErrorInfo\n }]);\n };\n const missingRequired = (path, key, obj) => nu$a(path, () => 'Could not find valid *required* value for \"' + key + '\" in ' + formatObj(obj));\n const missingKey = (path, key) => nu$a(path, () => 'Choice schema did not contain choice key: \"' + key + '\"');\n const missingBranch = (path, branches, branch) => nu$a(path, () => 'The chosen schema: \"' + branch + '\" did not exist in branches: ' + formatObj(branches));\n const unsupportedFields = (path, unsupported) => nu$a(path, () => 'There are unsupported fields: [' + unsupported.join(', ') + '] specified');\n const custom = (path, err) => nu$a(path, constant$1(err));\n\n const value$2 = validator => {\n const extract = (path, val) => {\n return SimpleResult.bindError(validator(val), err => custom(path, err));\n };\n const toString = constant$1('val');\n return {\n extract,\n toString\n };\n };\n const anyValue$1 = value$2(SimpleResult.svalue);\n\n const requiredAccess = (path, obj, key, bundle) => get$h(obj, key).fold(() => missingRequired(path, key, obj), bundle);\n const fallbackAccess = (obj, key, fallback, bundle) => {\n const v = get$h(obj, key).getOrThunk(() => fallback(obj));\n return bundle(v);\n };\n const optionAccess = (obj, key, bundle) => bundle(get$h(obj, key));\n const optionDefaultedAccess = (obj, key, fallback, bundle) => {\n const opt = get$h(obj, key).map(val => val === true ? fallback(obj) : val);\n return bundle(opt);\n };\n const extractField = (field, path, obj, key, prop) => {\n const bundle = av => prop.extract(path.concat([key]), av);\n const bundleAsOption = optValue => optValue.fold(() => SimpleResult.svalue(Optional.none()), ov => {\n const result = prop.extract(path.concat([key]), ov);\n return SimpleResult.map(result, Optional.some);\n });\n switch (field.tag) {\n case 'required':\n return requiredAccess(path, obj, key, bundle);\n case 'defaultedThunk':\n return fallbackAccess(obj, key, field.process, bundle);\n case 'option':\n return optionAccess(obj, key, bundleAsOption);\n case 'defaultedOptionThunk':\n return optionDefaultedAccess(obj, key, field.process, bundleAsOption);\n case 'mergeWithThunk': {\n return fallbackAccess(obj, key, constant$1({}), v => {\n const result = deepMerge(field.process(obj), v);\n return bundle(result);\n });\n }\n }\n };\n const extractFields = (path, obj, fields) => {\n const success = {};\n const errors = [];\n for (const field of fields) {\n fold(field, (key, newKey, presence, prop) => {\n const result = extractField(presence, path, obj, key, prop);\n SimpleResult.fold(result, err => {\n errors.push(...err);\n }, res => {\n success[newKey] = res;\n });\n }, (newKey, instantiator) => {\n success[newKey] = instantiator(obj);\n });\n }\n return errors.length > 0 ? SimpleResult.serror(errors) : SimpleResult.svalue(success);\n };\n const valueThunk = getDelegate => {\n const extract = (path, val) => getDelegate().extract(path, val);\n const toString = () => getDelegate().toString();\n return {\n extract,\n toString\n };\n };\n const getSetKeys = obj => keys(filter$1(obj, isNonNullable));\n const objOfOnly = fields => {\n const delegate = objOf(fields);\n const fieldNames = foldr(fields, (acc, value) => {\n return fold(value, key => deepMerge(acc, { [key]: true }), constant$1(acc));\n }, {});\n const extract = (path, o) => {\n const keys = isBoolean(o) ? [] : getSetKeys(o);\n const extra = filter$2(keys, k => !hasNonNullableKey(fieldNames, k));\n return extra.length === 0 ? delegate.extract(path, o) : unsupportedFields(path, extra);\n };\n return {\n extract,\n toString: delegate.toString\n };\n };\n const objOf = values => {\n const extract = (path, o) => extractFields(path, o, values);\n const toString = () => {\n const fieldStrings = map$2(values, value => fold(value, (key, _okey, _presence, prop) => key + ' -> ' + prop.toString(), (newKey, _instantiator) => 'state(' + newKey + ')'));\n return 'obj{\\n' + fieldStrings.join('\\n') + '}';\n };\n return {\n extract,\n toString\n };\n };\n const arrOf = prop => {\n const extract = (path, array) => {\n const results = map$2(array, (a, i) => prop.extract(path.concat(['[' + i + ']']), a));\n return ResultCombine.consolidateArr(results);\n };\n const toString = () => 'array(' + prop.toString() + ')';\n return {\n extract,\n toString\n };\n };\n const oneOf = (props, rawF) => {\n const f = rawF !== undefined ? rawF : identity;\n const extract = (path, val) => {\n const errors = [];\n for (const prop of props) {\n const res = prop.extract(path, val);\n if (res.stype === SimpleResultType.Value) {\n return {\n stype: SimpleResultType.Value,\n svalue: f(res.svalue)\n };\n }\n errors.push(res);\n }\n return ResultCombine.consolidateArr(errors);\n };\n const toString = () => 'oneOf(' + map$2(props, prop => prop.toString()).join(', ') + ')';\n return {\n extract,\n toString\n };\n };\n const setOf$1 = (validator, prop) => {\n const validateKeys = (path, keys) => arrOf(value$2(validator)).extract(path, keys);\n const extract = (path, o) => {\n const keys$1 = keys(o);\n const validatedKeys = validateKeys(path, keys$1);\n return SimpleResult.bind(validatedKeys, validKeys => {\n const schema = map$2(validKeys, vk => {\n return field$2(vk, vk, required$2(), prop);\n });\n return objOf(schema).extract(path, o);\n });\n };\n const toString = () => 'setOf(' + prop.toString() + ')';\n return {\n extract,\n toString\n };\n };\n const thunk = (_desc, processor) => {\n const getP = cached(processor);\n const extract = (path, val) => getP().extract(path, val);\n const toString = () => getP().toString();\n return {\n extract,\n toString\n };\n };\n const arrOfObj = compose(arrOf, objOf);\n\n const anyValue = constant$1(anyValue$1);\n const typedValue = (validator, expectedType) => value$2(a => {\n const actualType = typeof a;\n return validator(a) ? SimpleResult.svalue(a) : SimpleResult.serror(`Expected type: ${ expectedType } but got: ${ actualType }`);\n });\n const number = typedValue(isNumber, 'number');\n const string = typedValue(isString, 'string');\n const boolean = typedValue(isBoolean, 'boolean');\n const functionProcessor = typedValue(isFunction, 'function');\n const isPostMessageable = val => {\n if (Object(val) !== val) {\n return true;\n }\n switch ({}.toString.call(val).slice(8, -1)) {\n case 'Boolean':\n case 'Number':\n case 'String':\n case 'Date':\n case 'RegExp':\n case 'Blob':\n case 'FileList':\n case 'ImageData':\n case 'ImageBitmap':\n case 'ArrayBuffer':\n return true;\n case 'Array':\n case 'Object':\n return Object.keys(val).every(prop => isPostMessageable(val[prop]));\n default:\n return false;\n }\n };\n const postMessageable = value$2(a => {\n if (isPostMessageable(a)) {\n return SimpleResult.svalue(a);\n } else {\n return SimpleResult.serror('Expected value to be acceptable for sending via postMessage');\n }\n });\n\n const chooseFrom = (path, input, branches, ch) => {\n const fields = get$h(branches, ch);\n return fields.fold(() => missingBranch(path, branches, ch), vp => vp.extract(path.concat(['branch: ' + ch]), input));\n };\n const choose$2 = (key, branches) => {\n const extract = (path, input) => {\n const choice = get$h(input, key);\n return choice.fold(() => missingKey(path, key), chosen => chooseFrom(path, input, branches, chosen));\n };\n const toString = () => 'chooseOn(' + key + '). Possible values: ' + keys(branches);\n return {\n extract,\n toString\n };\n };\n\n const arrOfVal = () => arrOf(anyValue$1);\n const valueOf = validator => value$2(v => validator(v).fold(SimpleResult.serror, SimpleResult.svalue));\n const setOf = (validator, prop) => setOf$1(v => SimpleResult.fromResult(validator(v)), prop);\n const extractValue = (label, prop, obj) => {\n const res = prop.extract([label], obj);\n return SimpleResult.mapError(res, errs => ({\n input: obj,\n errors: errs\n }));\n };\n const asRaw = (label, prop, obj) => SimpleResult.toResult(extractValue(label, prop, obj));\n const getOrDie = extraction => {\n return extraction.fold(errInfo => {\n throw new Error(formatError(errInfo));\n }, identity);\n };\n const asRawOrDie$1 = (label, prop, obj) => getOrDie(asRaw(label, prop, obj));\n const formatError = errInfo => {\n return 'Errors: \\n' + formatErrors(errInfo.errors).join('\\n') + '\\n\\nInput object: ' + formatObj(errInfo.input);\n };\n const choose$1 = (key, branches) => choose$2(key, map$1(branches, objOf));\n const thunkOf = (desc, schema) => thunk(desc, schema);\n\n const field$1 = field$2;\n const customField = customField$1;\n const validateEnum = values => valueOf(value => contains$2(values, value) ? Result.value(value) : Result.error(`Unsupported value: \"${ value }\", choose one of \"${ values.join(', ') }\".`));\n const required$1 = key => field$1(key, key, required$2(), anyValue());\n const requiredOf = (key, schema) => field$1(key, key, required$2(), schema);\n const requiredNumber = key => requiredOf(key, number);\n const requiredString = key => requiredOf(key, string);\n const requiredStringEnum = (key, values) => field$1(key, key, required$2(), validateEnum(values));\n const requiredFunction = key => requiredOf(key, functionProcessor);\n const forbid = (key, message) => field$1(key, key, asOption(), value$2(_v => SimpleResult.serror('The field: ' + key + ' is forbidden. ' + message)));\n const requiredObjOf = (key, objSchema) => field$1(key, key, required$2(), objOf(objSchema));\n const requiredArrayOfObj = (key, objFields) => field$1(key, key, required$2(), arrOfObj(objFields));\n const requiredArrayOf = (key, schema) => field$1(key, key, required$2(), arrOf(schema));\n const option$3 = key => field$1(key, key, asOption(), anyValue());\n const optionOf = (key, schema) => field$1(key, key, asOption(), schema);\n const optionNumber = key => optionOf(key, number);\n const optionString = key => optionOf(key, string);\n const optionStringEnum = (key, values) => optionOf(key, validateEnum(values));\n const optionFunction = key => optionOf(key, functionProcessor);\n const optionArrayOf = (key, schema) => optionOf(key, arrOf(schema));\n const optionObjOf = (key, objSchema) => optionOf(key, objOf(objSchema));\n const optionObjOfOnly = (key, objSchema) => optionOf(key, objOfOnly(objSchema));\n const defaulted = (key, fallback) => field$1(key, key, defaulted$1(fallback), anyValue());\n const defaultedOf = (key, fallback, schema) => field$1(key, key, defaulted$1(fallback), schema);\n const defaultedNumber = (key, fallback) => defaultedOf(key, fallback, number);\n const defaultedString = (key, fallback) => defaultedOf(key, fallback, string);\n const defaultedStringEnum = (key, fallback, values) => defaultedOf(key, fallback, validateEnum(values));\n const defaultedBoolean = (key, fallback) => defaultedOf(key, fallback, boolean);\n const defaultedFunction = (key, fallback) => defaultedOf(key, fallback, functionProcessor);\n const defaultedPostMsg = (key, fallback) => defaultedOf(key, fallback, postMessageable);\n const defaultedArrayOf = (key, fallback, schema) => defaultedOf(key, fallback, arrOf(schema));\n const defaultedObjOf = (key, fallback, objSchema) => defaultedOf(key, fallback, objOf(objSchema));\n\n const generate$7 = cases => {\n if (!isArray(cases)) {\n throw new Error('cases must be an array');\n }\n if (cases.length === 0) {\n throw new Error('there must be at least one case');\n }\n const constructors = [];\n const adt = {};\n each$1(cases, (acase, count) => {\n const keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n const key = keys$1[0];\n const value = acase[key];\n if (adt[key] !== undefined) {\n throw new Error('duplicate key detected:' + key);\n } else if (key === 'cata') {\n throw new Error('cannot have a case named cata (sorry)');\n } else if (!isArray(value)) {\n throw new Error('case arguments must be an array');\n }\n constructors.push(key);\n adt[key] = (...args) => {\n const argLength = args.length;\n if (argLength !== value.length) {\n throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n }\n const match = branches => {\n const branchKeys = keys(branches);\n if (constructors.length !== branchKeys.length) {\n throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n }\n const allReqd = forall(constructors, reqKey => {\n return contains$2(branchKeys, reqKey);\n });\n if (!allReqd) {\n throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n }\n return branches[key].apply(null, args);\n };\n return {\n fold: (...foldArgs) => {\n if (foldArgs.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n }\n const target = foldArgs[count];\n return target.apply(null, args);\n },\n match,\n log: label => {\n console.log(label, {\n constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n const Adt = { generate: generate$7 };\n\n Adt.generate([\n {\n bothErrors: [\n 'error1',\n 'error2'\n ]\n },\n {\n firstError: [\n 'error1',\n 'value2'\n ]\n },\n {\n secondError: [\n 'value1',\n 'error2'\n ]\n },\n {\n bothValues: [\n 'value1',\n 'value2'\n ]\n }\n ]);\n const partition$1 = results => {\n const errors = [];\n const values = [];\n each$1(results, result => {\n result.fold(err => {\n errors.push(err);\n }, value => {\n values.push(value);\n });\n });\n return {\n errors,\n values\n };\n };\n\n const exclude$1 = (obj, fields) => {\n const r = {};\n each(obj, (v, k) => {\n if (!contains$2(fields, k)) {\n r[k] = v;\n }\n });\n return r;\n };\n\n const wrap$2 = (key, value) => ({ [key]: value });\n const wrapAll$1 = keyvalues => {\n const r = {};\n each$1(keyvalues, kv => {\n r[kv.key] = kv.value;\n });\n return r;\n };\n\n const exclude = (obj, fields) => exclude$1(obj, fields);\n const wrap$1 = (key, value) => wrap$2(key, value);\n const wrapAll = keyvalues => wrapAll$1(keyvalues);\n const mergeValues = (values, base) => {\n return values.length === 0 ? Result.value(base) : Result.value(deepMerge(base, merge$1.apply(undefined, values)));\n };\n const mergeErrors = errors => Result.error(flatten(errors));\n const consolidate = (objs, base) => {\n const partitions = partition$1(objs);\n return partitions.errors.length > 0 ? mergeErrors(partitions.errors) : mergeValues(partitions.values, base);\n };\n\n const ensureIsRoot = isRoot => isFunction(isRoot) ? isRoot : never;\n const ancestor$2 = (scope, transform, isRoot) => {\n let element = scope.dom;\n const stop = ensureIsRoot(isRoot);\n while (element.parentNode) {\n element = element.parentNode;\n const el = SugarElement.fromDom(element);\n const transformed = transform(el);\n if (transformed.isSome()) {\n return transformed;\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n const closest$4 = (scope, transform, isRoot) => {\n const current = transform(scope);\n const stop = ensureIsRoot(isRoot);\n return current.orThunk(() => stop(scope) ? Optional.none() : ancestor$2(scope, transform, stop));\n };\n\n const isSource = (component, simulatedEvent) => eq(component.element, simulatedEvent.event.target);\n\n const defaultEventHandler = {\n can: always,\n abort: never,\n run: noop\n };\n const nu$9 = parts => {\n if (!hasNonNullableKey(parts, 'can') && !hasNonNullableKey(parts, 'abort') && !hasNonNullableKey(parts, 'run')) {\n throw new Error('EventHandler defined by: ' + JSON.stringify(parts, null, 2) + ' does not have can, abort, or run!');\n }\n return {\n ...defaultEventHandler,\n ...parts\n };\n };\n const all$2 = (handlers, f) => (...args) => foldl(handlers, (acc, handler) => acc && f(handler).apply(undefined, args), true);\n const any = (handlers, f) => (...args) => foldl(handlers, (acc, handler) => acc || f(handler).apply(undefined, args), false);\n const read$2 = handler => isFunction(handler) ? {\n can: always,\n abort: never,\n run: handler\n } : handler;\n const fuse$1 = handlers => {\n const can = all$2(handlers, handler => handler.can);\n const abort = any(handlers, handler => handler.abort);\n const run = (...args) => {\n each$1(handlers, handler => {\n handler.run.apply(undefined, args);\n });\n };\n return {\n can,\n abort,\n run\n };\n };\n\n const constant = constant$1;\n const touchstart = constant('touchstart');\n const touchmove = constant('touchmove');\n const touchend = constant('touchend');\n const touchcancel = constant('touchcancel');\n const mousedown = constant('mousedown');\n const mousemove = constant('mousemove');\n const mouseout = constant('mouseout');\n const mouseup = constant('mouseup');\n const mouseover = constant('mouseover');\n const focusin = constant('focusin');\n const focusout = constant('focusout');\n const keydown = constant('keydown');\n const keyup = constant('keyup');\n const input = constant('input');\n const change = constant('change');\n const click = constant('click');\n const transitioncancel = constant('transitioncancel');\n const transitionend = constant('transitionend');\n const transitionstart = constant('transitionstart');\n const selectstart = constant('selectstart');\n\n const prefixName = name => constant$1('alloy.' + name);\n const alloy = { tap: prefixName('tap') };\n const focus$4 = prefixName('focus');\n const postBlur = prefixName('blur.post');\n const postPaste = prefixName('paste.post');\n const receive = prefixName('receive');\n const execute$5 = prefixName('execute');\n const focusItem = prefixName('focus.item');\n const tap = alloy.tap;\n const longpress = prefixName('longpress');\n const sandboxClose = prefixName('sandbox.close');\n const typeaheadCancel = prefixName('typeahead.cancel');\n const systemInit = prefixName('system.init');\n const documentTouchmove = prefixName('system.touchmove');\n const documentTouchend = prefixName('system.touchend');\n const windowScroll = prefixName('system.scroll');\n const windowResize = prefixName('system.resize');\n const attachedToDom = prefixName('system.attached');\n const detachedFromDom = prefixName('system.detached');\n const dismissRequested = prefixName('system.dismissRequested');\n const repositionRequested = prefixName('system.repositionRequested');\n const focusShifted = prefixName('focusmanager.shifted');\n const slotVisibility = prefixName('slotcontainer.visibility');\n const externalElementScroll = prefixName('system.external.element.scroll');\n const changeTab = prefixName('change.tab');\n const dismissTab = prefixName('dismiss.tab');\n const highlight$1 = prefixName('highlight');\n const dehighlight$1 = prefixName('dehighlight');\n\n const emit = (component, event) => {\n dispatchWith(component, component.element, event, {});\n };\n const emitWith = (component, event, properties) => {\n dispatchWith(component, component.element, event, properties);\n };\n const emitExecute = component => {\n emit(component, execute$5());\n };\n const dispatch = (component, target, event) => {\n dispatchWith(component, target, event, {});\n };\n const dispatchWith = (component, target, event, properties) => {\n const data = {\n target,\n ...properties\n };\n component.getSystem().triggerEvent(event, target, data);\n };\n const retargetAndDispatchWith = (component, target, eventName, properties) => {\n const data = {\n ...properties,\n target\n };\n component.getSystem().triggerEvent(eventName, target, data);\n };\n const dispatchEvent = (component, target, event, simulatedEvent) => {\n component.getSystem().triggerEvent(event, target, simulatedEvent.event);\n };\n\n const derive$2 = configs => wrapAll(configs);\n const abort = (name, predicate) => {\n return {\n key: name,\n value: nu$9({ abort: predicate })\n };\n };\n const can = (name, predicate) => {\n return {\n key: name,\n value: nu$9({ can: predicate })\n };\n };\n const preventDefault = name => {\n return {\n key: name,\n value: nu$9({\n run: (component, simulatedEvent) => {\n simulatedEvent.event.prevent();\n }\n })\n };\n };\n const run$1 = (name, handler) => {\n return {\n key: name,\n value: nu$9({ run: handler })\n };\n };\n const runActionExtra = (name, action, extra) => {\n return {\n key: name,\n value: nu$9({\n run: (component, simulatedEvent) => {\n action.apply(undefined, [\n component,\n simulatedEvent\n ].concat(extra));\n }\n })\n };\n };\n const runOnName = name => {\n return handler => run$1(name, handler);\n };\n const runOnSourceName = name => {\n return handler => ({\n key: name,\n value: nu$9({\n run: (component, simulatedEvent) => {\n if (isSource(component, simulatedEvent)) {\n handler(component, simulatedEvent);\n }\n }\n })\n });\n };\n const redirectToUid = (name, uid) => {\n return run$1(name, (component, simulatedEvent) => {\n component.getSystem().getByUid(uid).each(redirectee => {\n dispatchEvent(redirectee, redirectee.element, name, simulatedEvent);\n });\n });\n };\n const redirectToPart = (name, detail, partName) => {\n const uid = detail.partUids[partName];\n return redirectToUid(name, uid);\n };\n const runWithTarget = (name, f) => {\n return run$1(name, (component, simulatedEvent) => {\n const ev = simulatedEvent.event;\n const target = component.getSystem().getByDom(ev.target).getOrThunk(() => {\n const closest = closest$4(ev.target, el => component.getSystem().getByDom(el).toOptional(), never);\n return closest.getOr(component);\n });\n f(component, target, simulatedEvent);\n });\n };\n const cutter = name => {\n return run$1(name, (component, simulatedEvent) => {\n simulatedEvent.cut();\n });\n };\n const stopper = name => {\n return run$1(name, (component, simulatedEvent) => {\n simulatedEvent.stop();\n });\n };\n const runOnSource = (name, f) => {\n return runOnSourceName(name)(f);\n };\n const runOnAttached = runOnSourceName(attachedToDom());\n const runOnDetached = runOnSourceName(detachedFromDom());\n const runOnInit = runOnSourceName(systemInit());\n const runOnExecute$1 = runOnName(execute$5());\n\n const markAsBehaviourApi = (f, apiName, apiFunction) => {\n const delegate = apiFunction.toString();\n const endIndex = delegate.indexOf(')') + 1;\n const openBracketIndex = delegate.indexOf('(');\n const parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n f.toFunctionAnnotation = () => ({\n name: apiName,\n parameters: cleanParameters(parameters.slice(0, 1).concat(parameters.slice(3)))\n });\n return f;\n };\n const cleanParameters = parameters => map$2(parameters, p => endsWith(p, '/*') ? p.substring(0, p.length - '/*'.length) : p);\n const markAsExtraApi = (f, extraName) => {\n const delegate = f.toString();\n const endIndex = delegate.indexOf(')') + 1;\n const openBracketIndex = delegate.indexOf('(');\n const parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n f.toFunctionAnnotation = () => ({\n name: extraName,\n parameters: cleanParameters(parameters)\n });\n return f;\n };\n const markAsSketchApi = (f, apiFunction) => {\n const delegate = apiFunction.toString();\n const endIndex = delegate.indexOf(')') + 1;\n const openBracketIndex = delegate.indexOf('(');\n const parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n f.toFunctionAnnotation = () => ({\n name: 'OVERRIDE',\n parameters: cleanParameters(parameters.slice(1))\n });\n return f;\n };\n\n const nu$8 = s => ({\n classes: isUndefined(s.classes) ? [] : s.classes,\n attributes: isUndefined(s.attributes) ? {} : s.attributes,\n styles: isUndefined(s.styles) ? {} : s.styles\n });\n const merge = (defnA, mod) => ({\n ...defnA,\n attributes: {\n ...defnA.attributes,\n ...mod.attributes\n },\n styles: {\n ...defnA.styles,\n ...mod.styles\n },\n classes: defnA.classes.concat(mod.classes)\n });\n\n const executeEvent = (bConfig, bState, executor) => runOnExecute$1(component => {\n executor(component, bConfig, bState);\n });\n const loadEvent = (bConfig, bState, f) => runOnInit((component, _simulatedEvent) => {\n f(component, bConfig, bState);\n });\n const create$5 = (schema, name, active, apis, extra, state) => {\n const configSchema = objOfOnly(schema);\n const schemaSchema = optionObjOf(name, [optionObjOfOnly('config', schema)]);\n return doCreate(configSchema, schemaSchema, name, active, apis, extra, state);\n };\n const createModes$1 = (modes, name, active, apis, extra, state) => {\n const configSchema = modes;\n const schemaSchema = optionObjOf(name, [optionOf('config', modes)]);\n return doCreate(configSchema, schemaSchema, name, active, apis, extra, state);\n };\n const wrapApi = (bName, apiFunction, apiName) => {\n const f = (component, ...rest) => {\n const args = [component].concat(rest);\n return component.config({ name: constant$1(bName) }).fold(() => {\n throw new Error('We could not find any behaviour configuration for: ' + bName + '. Using API: ' + apiName);\n }, info => {\n const rest = Array.prototype.slice.call(args, 1);\n return apiFunction.apply(undefined, [\n component,\n info.config,\n info.state\n ].concat(rest));\n });\n };\n return markAsBehaviourApi(f, apiName, apiFunction);\n };\n const revokeBehaviour = name => ({\n key: name,\n value: undefined\n });\n const doCreate = (configSchema, schemaSchema, name, active, apis, extra, state) => {\n const getConfig = info => hasNonNullableKey(info, name) ? info[name]() : Optional.none();\n const wrappedApis = map$1(apis, (apiF, apiName) => wrapApi(name, apiF, apiName));\n const wrappedExtra = map$1(extra, (extraF, extraName) => markAsExtraApi(extraF, extraName));\n const me = {\n ...wrappedExtra,\n ...wrappedApis,\n revoke: curry(revokeBehaviour, name),\n config: spec => {\n const prepared = asRawOrDie$1(name + '-config', configSchema, spec);\n return {\n key: name,\n value: {\n config: prepared,\n me,\n configAsRaw: cached(() => asRawOrDie$1(name + '-config', configSchema, spec)),\n initialConfig: spec,\n state\n }\n };\n },\n schema: constant$1(schemaSchema),\n exhibit: (info, base) => {\n return lift2(getConfig(info), get$h(active, 'exhibit'), (behaviourInfo, exhibitor) => {\n return exhibitor(base, behaviourInfo.config, behaviourInfo.state);\n }).getOrThunk(() => nu$8({}));\n },\n name: constant$1(name),\n handlers: info => {\n return getConfig(info).map(behaviourInfo => {\n const getEvents = get$h(active, 'events').getOr(() => ({}));\n return getEvents(behaviourInfo.config, behaviourInfo.state);\n }).getOr({});\n }\n };\n return me;\n };\n\n const NoState = { init: () => nu$7({ readState: constant$1('No State required') }) };\n const nu$7 = spec => spec;\n\n const derive$1 = capabilities => wrapAll(capabilities);\n const simpleSchema = objOfOnly([\n required$1('fields'),\n required$1('name'),\n defaulted('active', {}),\n defaulted('apis', {}),\n defaulted('state', NoState),\n defaulted('extra', {})\n ]);\n const create$4 = data => {\n const value = asRawOrDie$1('Creating behaviour: ' + data.name, simpleSchema, data);\n return create$5(value.fields, value.name, value.active, value.apis, value.extra, value.state);\n };\n const modeSchema = objOfOnly([\n required$1('branchKey'),\n required$1('branches'),\n required$1('name'),\n defaulted('active', {}),\n defaulted('apis', {}),\n defaulted('state', NoState),\n defaulted('extra', {})\n ]);\n const createModes = data => {\n const value = asRawOrDie$1('Creating behaviour: ' + data.name, modeSchema, data);\n return createModes$1(choose$1(value.branchKey, value.branches), value.name, value.active, value.apis, value.extra, value.state);\n };\n const revoke = constant$1(undefined);\n\n const read$1 = (element, attr) => {\n const value = get$g(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n const add$4 = (element, attr, id) => {\n const old = read$1(element, attr);\n const nu = old.concat([id]);\n set$9(element, attr, nu.join(' '));\n return true;\n };\n const remove$5 = (element, attr, id) => {\n const nu = filter$2(read$1(element, attr), v => v !== id);\n if (nu.length > 0) {\n set$9(element, attr, nu.join(' '));\n } else {\n remove$8(element, attr);\n }\n return false;\n };\n\n const supports = element => element.dom.classList !== undefined;\n const get$a = element => read$1(element, 'class');\n const add$3 = (element, clazz) => add$4(element, 'class', clazz);\n const remove$4 = (element, clazz) => remove$5(element, 'class', clazz);\n const toggle$5 = (element, clazz) => {\n if (contains$2(get$a(element), clazz)) {\n return remove$4(element, clazz);\n } else {\n return add$3(element, clazz);\n }\n };\n\n const add$2 = (element, clazz) => {\n if (supports(element)) {\n element.dom.classList.add(clazz);\n } else {\n add$3(element, clazz);\n }\n };\n const cleanClass = element => {\n const classList = supports(element) ? element.dom.classList : get$a(element);\n if (classList.length === 0) {\n remove$8(element, 'class');\n }\n };\n const remove$3 = (element, clazz) => {\n if (supports(element)) {\n const classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$4(element, clazz);\n }\n cleanClass(element);\n };\n const toggle$4 = (element, clazz) => {\n const result = supports(element) ? element.dom.classList.toggle(clazz) : toggle$5(element, clazz);\n cleanClass(element);\n return result;\n };\n const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n\n const add$1 = (element, classes) => {\n each$1(classes, x => {\n add$2(element, x);\n });\n };\n const remove$2 = (element, classes) => {\n each$1(classes, x => {\n remove$3(element, x);\n });\n };\n const toggle$3 = (element, classes) => {\n each$1(classes, x => {\n toggle$4(element, x);\n });\n };\n const hasAll = (element, classes) => forall(classes, clazz => has(element, clazz));\n const getNative = element => {\n const classList = element.dom.classList;\n const r = new Array(classList.length);\n for (let i = 0; i < classList.length; i++) {\n const item = classList.item(i);\n if (item !== null) {\n r[i] = item;\n }\n }\n return r;\n };\n const get$9 = element => supports(element) ? getNative(element) : get$a(element);\n\n const NuPositionCss = (position, left, top, right, bottom) => {\n const toPx = num => num + 'px';\n return {\n position,\n left: left.map(toPx),\n top: top.map(toPx),\n right: right.map(toPx),\n bottom: bottom.map(toPx)\n };\n };\n const toOptions = position => ({\n ...position,\n position: Optional.some(position.position)\n });\n const applyPositionCss = (element, position) => {\n setOptions(element, toOptions(position));\n };\n\n const getOffsetParent = element => {\n const isFixed = is$1(getRaw(element, 'position'), 'fixed');\n const offsetParent$1 = isFixed ? Optional.none() : offsetParent(element);\n return offsetParent$1.orThunk(() => {\n const marker = SugarElement.fromTag('span');\n return parent(element).bind(parent => {\n append$2(parent, marker);\n const offsetParent$1 = offsetParent(marker);\n remove$6(marker);\n return offsetParent$1;\n });\n });\n };\n const getOrigin = element => getOffsetParent(element).map(absolute$3).getOrThunk(() => SugarPosition(0, 0));\n\n const appear = (component, contextualInfo) => {\n const elem = component.element;\n add$2(elem, contextualInfo.transitionClass);\n remove$3(elem, contextualInfo.fadeOutClass);\n add$2(elem, contextualInfo.fadeInClass);\n contextualInfo.onShow(component);\n };\n const disappear = (component, contextualInfo) => {\n const elem = component.element;\n add$2(elem, contextualInfo.transitionClass);\n remove$3(elem, contextualInfo.fadeInClass);\n add$2(elem, contextualInfo.fadeOutClass);\n contextualInfo.onHide(component);\n };\n const isPartiallyVisible = (box, bounds) => box.y < bounds.bottom && box.bottom > bounds.y;\n const isTopCompletelyVisible = (box, bounds) => box.y >= bounds.y;\n const isBottomCompletelyVisible = (box, bounds) => box.bottom <= bounds.bottom;\n const forceTopPosition = (winBox, leftX, viewport) => ({\n location: 'top',\n leftX,\n topY: viewport.bounds.y - winBox.y\n });\n const forceBottomPosition = (winBox, leftX, viewport) => ({\n location: 'bottom',\n leftX,\n bottomY: winBox.bottom - viewport.bounds.bottom\n });\n const getDockedLeftPosition = bounds => {\n return bounds.box.x - bounds.win.x;\n };\n const tryDockingPosition = (modes, bounds, viewport) => {\n const winBox = bounds.win;\n const box = bounds.box;\n const leftX = getDockedLeftPosition(bounds);\n return findMap(modes, mode => {\n switch (mode) {\n case 'bottom':\n return !isBottomCompletelyVisible(box, viewport.bounds) ? Optional.some(forceBottomPosition(winBox, leftX, viewport)) : Optional.none();\n case 'top':\n return !isTopCompletelyVisible(box, viewport.bounds) ? Optional.some(forceTopPosition(winBox, leftX, viewport)) : Optional.none();\n default:\n return Optional.none();\n }\n }).getOr({ location: 'no-dock' });\n };\n const isVisibleForModes = (modes, box, viewport) => forall(modes, mode => {\n switch (mode) {\n case 'bottom':\n return isBottomCompletelyVisible(box, viewport.bounds);\n case 'top':\n return isTopCompletelyVisible(box, viewport.bounds);\n }\n });\n const getXYForRestoring = (pos, viewport) => {\n const priorY = viewport.optScrollEnv.fold(constant$1(pos.bounds.y), scrollEnv => scrollEnv.scrollElmTop + (pos.bounds.y - scrollEnv.currentScrollTop));\n return SugarPosition(pos.bounds.x, priorY);\n };\n const getXYForSaving = (box, viewport) => {\n const priorY = viewport.optScrollEnv.fold(constant$1(box.y), scrollEnv => box.y + scrollEnv.currentScrollTop - scrollEnv.scrollElmTop);\n return SugarPosition(box.x, priorY);\n };\n const getPrior = (elem, viewport, state) => state.getInitialPos().map(pos => {\n const xy = getXYForRestoring(pos, viewport);\n return {\n box: bounds(xy.left, xy.top, get$d(elem), get$e(elem)),\n location: pos.location\n };\n });\n const storePrior = (elem, box, viewport, state, decision) => {\n const xy = getXYForSaving(box, viewport);\n const bounds$1 = bounds(xy.left, xy.top, box.width, box.height);\n state.setInitialPos({\n style: getAllRaw(elem),\n position: get$f(elem, 'position') || 'static',\n bounds: bounds$1,\n location: decision.location\n });\n };\n const storePriorIfNone = (elem, box, viewport, state, decision) => {\n state.getInitialPos().fold(() => storePrior(elem, box, viewport, state, decision), () => noop);\n };\n const revertToOriginal = (elem, box, state) => state.getInitialPos().bind(position => {\n var _a;\n state.clearInitialPos();\n switch (position.position) {\n case 'static':\n return Optional.some({ morph: 'static' });\n case 'absolute':\n const offsetParent = getOffsetParent(elem).getOr(body());\n const offsetBox = box$1(offsetParent);\n const scrollDelta = (_a = offsetParent.dom.scrollTop) !== null && _a !== void 0 ? _a : 0;\n return Optional.some({\n morph: 'absolute',\n positionCss: NuPositionCss('absolute', get$h(position.style, 'left').map(_left => box.x - offsetBox.x), get$h(position.style, 'top').map(_top => box.y - offsetBox.y + scrollDelta), get$h(position.style, 'right').map(_right => offsetBox.right - box.right), get$h(position.style, 'bottom').map(_bottom => offsetBox.bottom - box.bottom))\n });\n default:\n return Optional.none();\n }\n });\n const tryMorphToOriginal = (elem, viewport, state) => getPrior(elem, viewport, state).filter(({box}) => isVisibleForModes(state.getModes(), box, viewport)).bind(({box}) => revertToOriginal(elem, box, state));\n const tryDecisionToFixedMorph = decision => {\n switch (decision.location) {\n case 'top': {\n return Optional.some({\n morph: 'fixed',\n positionCss: NuPositionCss('fixed', Optional.some(decision.leftX), Optional.some(decision.topY), Optional.none(), Optional.none())\n });\n }\n case 'bottom': {\n return Optional.some({\n morph: 'fixed',\n positionCss: NuPositionCss('fixed', Optional.some(decision.leftX), Optional.none(), Optional.none(), Optional.some(decision.bottomY))\n });\n }\n default:\n return Optional.none();\n }\n };\n const tryMorphToFixed = (elem, viewport, state) => {\n const box = box$1(elem);\n const winBox = win();\n const decision = tryDockingPosition(state.getModes(), {\n win: winBox,\n box\n }, viewport);\n if (decision.location === 'top' || decision.location === 'bottom') {\n storePrior(elem, box, viewport, state, decision);\n return tryDecisionToFixedMorph(decision);\n } else {\n return Optional.none();\n }\n };\n const tryMorphToOriginalOrUpdateFixed = (elem, viewport, state) => {\n return tryMorphToOriginal(elem, viewport, state).orThunk(() => {\n return viewport.optScrollEnv.bind(_ => getPrior(elem, viewport, state)).bind(({box, location}) => {\n const winBox = win();\n const leftX = getDockedLeftPosition({\n win: winBox,\n box\n });\n const decision = location === 'top' ? forceTopPosition(winBox, leftX, viewport) : forceBottomPosition(winBox, leftX, viewport);\n return tryDecisionToFixedMorph(decision);\n });\n });\n };\n const tryMorph = (component, viewport, state) => {\n const elem = component.element;\n const isDocked = is$1(getRaw(elem, 'position'), 'fixed');\n return isDocked ? tryMorphToOriginalOrUpdateFixed(elem, viewport, state) : tryMorphToFixed(elem, viewport, state);\n };\n const calculateMorphToOriginal = (component, viewport, state) => {\n const elem = component.element;\n return getPrior(elem, viewport, state).bind(({box}) => revertToOriginal(elem, box, state));\n };\n const forceDockWith = (elem, viewport, state, getDecision) => {\n const box = box$1(elem);\n const winBox = win();\n const leftX = getDockedLeftPosition({\n win: winBox,\n box\n });\n const decision = getDecision(winBox, leftX, viewport);\n if (decision.location === 'bottom' || decision.location === 'top') {\n storePriorIfNone(elem, box, viewport, state, decision);\n return tryDecisionToFixedMorph(decision);\n } else {\n return Optional.none();\n }\n };\n\n const morphToStatic = (component, config, state) => {\n state.setDocked(false);\n each$1([\n 'left',\n 'right',\n 'top',\n 'bottom',\n 'position'\n ], prop => remove$7(component.element, prop));\n config.onUndocked(component);\n };\n const morphToCoord = (component, config, state, position) => {\n const isDocked = position.position === 'fixed';\n state.setDocked(isDocked);\n applyPositionCss(component.element, position);\n const method = isDocked ? config.onDocked : config.onUndocked;\n method(component);\n };\n const updateVisibility = (component, config, state, viewport, morphToDocked = false) => {\n config.contextual.each(contextInfo => {\n contextInfo.lazyContext(component).each(box => {\n const isVisible = isPartiallyVisible(box, viewport.bounds);\n if (isVisible !== state.isVisible()) {\n state.setVisible(isVisible);\n if (morphToDocked && !isVisible) {\n add$1(component.element, [contextInfo.fadeOutClass]);\n contextInfo.onHide(component);\n } else {\n const method = isVisible ? appear : disappear;\n method(component, contextInfo);\n }\n }\n });\n });\n };\n const applyFixedMorph = (component, config, state, viewport, morph) => {\n updateVisibility(component, config, state, viewport, true);\n morphToCoord(component, config, state, morph.positionCss);\n };\n const applyMorph = (component, config, state, viewport, morph) => {\n switch (morph.morph) {\n case 'static': {\n return morphToStatic(component, config, state);\n }\n case 'absolute': {\n return morphToCoord(component, config, state, morph.positionCss);\n }\n case 'fixed': {\n return applyFixedMorph(component, config, state, viewport, morph);\n }\n }\n };\n const refreshInternal = (component, config, state) => {\n const viewport = config.lazyViewport(component);\n updateVisibility(component, config, state, viewport);\n tryMorph(component, viewport, state).each(morph => {\n applyMorph(component, config, state, viewport, morph);\n });\n };\n const resetInternal = (component, config, state) => {\n const elem = component.element;\n state.setDocked(false);\n const viewport = config.lazyViewport(component);\n calculateMorphToOriginal(component, viewport, state).each(staticOrAbsoluteMorph => {\n switch (staticOrAbsoluteMorph.morph) {\n case 'static': {\n morphToStatic(component, config, state);\n break;\n }\n case 'absolute': {\n morphToCoord(component, config, state, staticOrAbsoluteMorph.positionCss);\n break;\n }\n }\n });\n state.setVisible(true);\n config.contextual.each(contextInfo => {\n remove$2(elem, [\n contextInfo.fadeInClass,\n contextInfo.fadeOutClass,\n contextInfo.transitionClass\n ]);\n contextInfo.onShow(component);\n });\n refresh$4(component, config, state);\n };\n const refresh$4 = (component, config, state) => {\n if (component.getSystem().isConnected()) {\n refreshInternal(component, config, state);\n }\n };\n const reset$2 = (component, config, state) => {\n if (state.isDocked()) {\n resetInternal(component, config, state);\n }\n };\n const forceDockWithDecision = getDecision => (component, config, state) => {\n const viewport = config.lazyViewport(component);\n const optMorph = forceDockWith(component.element, viewport, state, getDecision);\n optMorph.each(morph => {\n applyFixedMorph(component, config, state, viewport, morph);\n });\n };\n const forceDockToTop = forceDockWithDecision(forceTopPosition);\n const forceDockToBottom = forceDockWithDecision(forceBottomPosition);\n const isDocked$2 = (component, config, state) => state.isDocked();\n const setModes = (component, config, state, modes) => state.setModes(modes);\n const getModes = (component, config, state) => state.getModes();\n\n var DockingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n refresh: refresh$4,\n reset: reset$2,\n isDocked: isDocked$2,\n getModes: getModes,\n setModes: setModes,\n forceDockToTop: forceDockToTop,\n forceDockToBottom: forceDockToBottom\n });\n\n const events$i = (dockInfo, dockState) => derive$2([\n runOnSource(transitionend(), (component, simulatedEvent) => {\n dockInfo.contextual.each(contextInfo => {\n if (has(component.element, contextInfo.transitionClass)) {\n remove$2(component.element, [\n contextInfo.transitionClass,\n contextInfo.fadeInClass\n ]);\n const notify = dockState.isVisible() ? contextInfo.onShown : contextInfo.onHidden;\n notify(component);\n }\n simulatedEvent.stop();\n });\n }),\n run$1(windowScroll(), (component, _) => {\n refresh$4(component, dockInfo, dockState);\n }),\n run$1(externalElementScroll(), (component, _) => {\n refresh$4(component, dockInfo, dockState);\n }),\n run$1(windowResize(), (component, _) => {\n reset$2(component, dockInfo, dockState);\n })\n ]);\n\n var ActiveDocking = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$i\n });\n\n const fromHtml$1 = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n return children(SugarElement.fromDom(div));\n };\n\n const get$8 = element => element.dom.innerHTML;\n const set$6 = (element, content) => {\n const owner = owner$4(element);\n const docDom = owner.dom;\n const fragment = SugarElement.fromDom(docDom.createDocumentFragment());\n const contentElements = fromHtml$1(content, docDom);\n append$1(fragment, contentElements);\n empty(element);\n append$2(element, fragment);\n };\n const getOuter = element => {\n const container = SugarElement.fromTag('div');\n const clone = SugarElement.fromDom(element.dom.cloneNode(true));\n append$2(container, clone);\n return get$8(container);\n };\n\n const clone$1 = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n const shallow = original => clone$1(original, false);\n const deep = original => clone$1(original, true);\n\n const getHtml = element => {\n if (isShadowRoot(element)) {\n return '#shadow-root';\n } else {\n const clone = shallow(element);\n return getOuter(clone);\n }\n };\n\n const element = elem => getHtml(elem);\n\n const unknown = 'unknown';\n var EventConfiguration;\n (function (EventConfiguration) {\n EventConfiguration[EventConfiguration['STOP'] = 0] = 'STOP';\n EventConfiguration[EventConfiguration['NORMAL'] = 1] = 'NORMAL';\n EventConfiguration[EventConfiguration['LOGGING'] = 2] = 'LOGGING';\n }(EventConfiguration || (EventConfiguration = {})));\n const eventConfig = Cell({});\n const makeEventLogger = (eventName, initialTarget) => {\n const sequence = [];\n const startTime = new Date().getTime();\n return {\n logEventCut: (_name, target, purpose) => {\n sequence.push({\n outcome: 'cut',\n target,\n purpose\n });\n },\n logEventStopped: (_name, target, purpose) => {\n sequence.push({\n outcome: 'stopped',\n target,\n purpose\n });\n },\n logNoParent: (_name, target, purpose) => {\n sequence.push({\n outcome: 'no-parent',\n target,\n purpose\n });\n },\n logEventNoHandlers: (_name, target) => {\n sequence.push({\n outcome: 'no-handlers-left',\n target\n });\n },\n logEventResponse: (_name, target, purpose) => {\n sequence.push({\n outcome: 'response',\n purpose,\n target\n });\n },\n write: () => {\n const finishTime = new Date().getTime();\n if (contains$2([\n 'mousemove',\n 'mouseover',\n 'mouseout',\n systemInit()\n ], eventName)) {\n return;\n }\n console.log(eventName, {\n event: eventName,\n time: finishTime - startTime,\n target: initialTarget.dom,\n sequence: map$2(sequence, s => {\n if (!contains$2([\n 'cut',\n 'stopped',\n 'response'\n ], s.outcome)) {\n return s.outcome;\n } else {\n return '{' + s.purpose + '} ' + s.outcome + ' at (' + element(s.target) + ')';\n }\n })\n });\n }\n };\n };\n const processEvent = (eventName, initialTarget, f) => {\n const status = get$h(eventConfig.get(), eventName).orThunk(() => {\n const patterns = keys(eventConfig.get());\n return findMap(patterns, p => eventName.indexOf(p) > -1 ? Optional.some(eventConfig.get()[p]) : Optional.none());\n }).getOr(EventConfiguration.NORMAL);\n switch (status) {\n case EventConfiguration.NORMAL:\n return f(noLogger());\n case EventConfiguration.LOGGING: {\n const logger = makeEventLogger(eventName, initialTarget);\n const output = f(logger);\n logger.write();\n return output;\n }\n case EventConfiguration.STOP:\n return true;\n }\n };\n const path = [\n 'alloy/data/Fields',\n 'alloy/debugging/Debugging'\n ];\n const getTrace = () => {\n const err = new Error();\n if (err.stack !== undefined) {\n const lines = err.stack.split('\\n');\n return find$5(lines, line => line.indexOf('alloy') > 0 && !exists(path, p => line.indexOf(p) > -1)).getOr(unknown);\n } else {\n return unknown;\n }\n };\n const ignoreEvent = {\n logEventCut: noop,\n logEventStopped: noop,\n logNoParent: noop,\n logEventNoHandlers: noop,\n logEventResponse: noop,\n write: noop\n };\n const monitorEvent = (eventName, initialTarget, f) => processEvent(eventName, initialTarget, f);\n const noLogger = constant$1(ignoreEvent);\n\n const menuFields = constant$1([\n required$1('menu'),\n required$1('selectedMenu')\n ]);\n const itemFields = constant$1([\n required$1('item'),\n required$1('selectedItem')\n ]);\n constant$1(objOf(itemFields().concat(menuFields())));\n const itemSchema$3 = constant$1(objOf(itemFields()));\n\n const _initSize = requiredObjOf('initSize', [\n required$1('numColumns'),\n required$1('numRows')\n ]);\n const itemMarkers = () => requiredOf('markers', itemSchema$3());\n const tieredMenuMarkers = () => requiredObjOf('markers', [required$1('backgroundMenu')].concat(menuFields()).concat(itemFields()));\n const markers$1 = required => requiredObjOf('markers', map$2(required, required$1));\n const onPresenceHandler = (label, fieldName, presence) => {\n getTrace();\n return field$1(fieldName, fieldName, presence, valueOf(f => Result.value((...args) => {\n return f.apply(undefined, args);\n })));\n };\n const onHandler = fieldName => onPresenceHandler('onHandler', fieldName, defaulted$1(noop));\n const onKeyboardHandler = fieldName => onPresenceHandler('onKeyboardHandler', fieldName, defaulted$1(Optional.none));\n const onStrictHandler = fieldName => onPresenceHandler('onHandler', fieldName, required$2());\n const onStrictKeyboardHandler = fieldName => onPresenceHandler('onKeyboardHandler', fieldName, required$2());\n const output$1 = (name, value) => customField(name, constant$1(value));\n const snapshot = name => customField(name, identity);\n const initSize = constant$1(_initSize);\n\n var DockingSchema = [\n optionObjOf('contextual', [\n requiredString('fadeInClass'),\n requiredString('fadeOutClass'),\n requiredString('transitionClass'),\n requiredFunction('lazyContext'),\n onHandler('onShow'),\n onHandler('onShown'),\n onHandler('onHide'),\n onHandler('onHidden')\n ]),\n defaultedFunction('lazyViewport', () => ({\n bounds: win(),\n optScrollEnv: Optional.none()\n })),\n defaultedArrayOf('modes', [\n 'top',\n 'bottom'\n ], string),\n onHandler('onDocked'),\n onHandler('onUndocked')\n ];\n\n const init$g = spec => {\n const docked = Cell(false);\n const visible = Cell(true);\n const initialBounds = value$4();\n const modes = Cell(spec.modes);\n const readState = () => `docked: ${ docked.get() }, visible: ${ visible.get() }, modes: ${ modes.get().join(',') }`;\n return nu$7({\n isDocked: docked.get,\n setDocked: docked.set,\n getInitialPos: initialBounds.get,\n setInitialPos: initialBounds.set,\n clearInitialPos: initialBounds.clear,\n isVisible: visible.get,\n setVisible: visible.set,\n getModes: modes.get,\n setModes: modes.set,\n readState\n });\n };\n\n var DockingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$g\n });\n\n const Docking = create$4({\n fields: DockingSchema,\n name: 'docking',\n active: ActiveDocking,\n apis: DockingApis,\n state: DockingState\n });\n\n const isRecursive = (component, originator, target) => eq(originator, component.element) && !eq(originator, target);\n const events$h = derive$2([can(focus$4(), (component, simulatedEvent) => {\n const event = simulatedEvent.event;\n const originator = event.originator;\n const target = event.target;\n if (isRecursive(component, originator, target)) {\n console.warn(focus$4() + ' did not get interpreted by the desired target. ' + '\\nOriginator: ' + element(originator) + '\\nTarget: ' + element(target) + '\\nCheck the ' + focus$4() + ' event handlers');\n return false;\n } else {\n return true;\n }\n })]);\n\n var DefaultEvents = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$h\n });\n\n const cycleBy = (value, delta, min, max) => {\n const r = value + delta;\n if (r > max) {\n return min;\n } else if (r < min) {\n return max;\n } else {\n return r;\n }\n };\n const clamp = (value, min, max) => Math.min(Math.max(value, min), max);\n const random = () => window.crypto.getRandomValues(new Uint32Array(1))[0] / 4294967295;\n\n let unique = 0;\n const generate$6 = prefix => {\n const date = new Date();\n const time = date.getTime();\n const random$1 = Math.floor(random() * 1000000000);\n unique++;\n return prefix + '_' + random$1 + unique + String(time);\n };\n\n const prefix$1 = constant$1('alloy-id-');\n const idAttr$1 = constant$1('data-alloy-id');\n\n const prefix = prefix$1();\n const idAttr = idAttr$1();\n const write = (label, elem) => {\n const id = generate$6(prefix + label);\n writeOnly(elem, id);\n return id;\n };\n const writeOnly = (elem, uid) => {\n Object.defineProperty(elem.dom, idAttr, {\n value: uid,\n writable: true\n });\n };\n const read = elem => {\n const id = isElement$1(elem) ? elem.dom[idAttr] : null;\n return Optional.from(id);\n };\n const generate$5 = prefix => generate$6(prefix);\n\n const make$8 = identity;\n\n const NoContextApi = getComp => {\n const getMessage = event => `The component must be in a context to execute: ${ event }` + (getComp ? '\\n' + element(getComp().element) + ' is not in context.' : '');\n const fail = event => () => {\n throw new Error(getMessage(event));\n };\n const warn = event => () => {\n console.warn(getMessage(event));\n };\n return {\n debugInfo: constant$1('fake'),\n triggerEvent: warn('triggerEvent'),\n triggerFocus: warn('triggerFocus'),\n triggerEscape: warn('triggerEscape'),\n broadcast: warn('broadcast'),\n broadcastOn: warn('broadcastOn'),\n broadcastEvent: warn('broadcastEvent'),\n build: fail('build'),\n buildOrPatch: fail('buildOrPatch'),\n addToWorld: fail('addToWorld'),\n removeFromWorld: fail('removeFromWorld'),\n addToGui: fail('addToGui'),\n removeFromGui: fail('removeFromGui'),\n getByUid: fail('getByUid'),\n getByDom: fail('getByDom'),\n isConnected: never\n };\n };\n const singleton = NoContextApi();\n\n const premadeTag = generate$6('alloy-premade');\n const premade$1 = comp => {\n Object.defineProperty(comp.element.dom, premadeTag, {\n value: comp.uid,\n writable: true\n });\n return wrap$1(premadeTag, comp);\n };\n const isPremade = element => has$2(element.dom, premadeTag);\n const getPremade = spec => get$h(spec, premadeTag);\n const makeApi = f => markAsSketchApi((component, ...rest) => f(component.getApis(), component, ...rest), f);\n\n const generateFrom$1 = (spec, all) => {\n const schema = map$2(all, a => optionObjOf(a.name(), [\n required$1('config'),\n defaulted('state', NoState)\n ]));\n const validated = asRaw('component.behaviours', objOf(schema), spec.behaviours).fold(errInfo => {\n throw new Error(formatError(errInfo) + '\\nComplete spec:\\n' + JSON.stringify(spec, null, 2));\n }, identity);\n return {\n list: all,\n data: map$1(validated, optBlobThunk => {\n const output = optBlobThunk.map(blob => ({\n config: blob.config,\n state: blob.state.init(blob.config)\n }));\n return constant$1(output);\n })\n };\n };\n const getBehaviours$3 = bData => bData.list;\n const getData$2 = bData => bData.data;\n\n const byInnerKey = (data, tuple) => {\n const r = {};\n each(data, (detail, key) => {\n each(detail, (value, indexKey) => {\n const chain = get$h(r, indexKey).getOr([]);\n r[indexKey] = chain.concat([tuple(key, value)]);\n });\n });\n return r;\n };\n\n const combine$2 = (info, baseMod, behaviours, base) => {\n const modsByBehaviour = { ...baseMod };\n each$1(behaviours, behaviour => {\n modsByBehaviour[behaviour.name()] = behaviour.exhibit(info, base);\n });\n const byAspect = byInnerKey(modsByBehaviour, (name, modification) => ({\n name,\n modification\n }));\n const combineObjects = objects => foldr(objects, (b, a) => ({\n ...a.modification,\n ...b\n }), {});\n const combinedClasses = foldr(byAspect.classes, (b, a) => a.modification.concat(b), []);\n const combinedAttributes = combineObjects(byAspect.attributes);\n const combinedStyles = combineObjects(byAspect.styles);\n return nu$8({\n classes: combinedClasses,\n attributes: combinedAttributes,\n styles: combinedStyles\n });\n };\n\n const sortKeys = (label, keyName, array, order) => {\n try {\n const sorted = sort(array, (a, b) => {\n const aKey = a[keyName];\n const bKey = b[keyName];\n const aIndex = order.indexOf(aKey);\n const bIndex = order.indexOf(bKey);\n if (aIndex === -1) {\n throw new Error('The ordering for ' + label + ' does not have an entry for ' + aKey + '.\\nOrder specified: ' + JSON.stringify(order, null, 2));\n }\n if (bIndex === -1) {\n throw new Error('The ordering for ' + label + ' does not have an entry for ' + bKey + '.\\nOrder specified: ' + JSON.stringify(order, null, 2));\n }\n if (aIndex < bIndex) {\n return -1;\n } else if (bIndex < aIndex) {\n return 1;\n } else {\n return 0;\n }\n });\n return Result.value(sorted);\n } catch (err) {\n return Result.error([err]);\n }\n };\n\n const uncurried = (handler, purpose) => ({\n handler,\n purpose\n });\n const curried = (handler, purpose) => ({\n cHandler: handler,\n purpose\n });\n const curryArgs = (descHandler, extraArgs) => curried(curry.apply(undefined, [descHandler.handler].concat(extraArgs)), descHandler.purpose);\n const getCurried = descHandler => descHandler.cHandler;\n\n const behaviourTuple = (name, handler) => ({\n name,\n handler\n });\n const nameToHandlers = (behaviours, info) => {\n const r = {};\n each$1(behaviours, behaviour => {\n r[behaviour.name()] = behaviour.handlers(info);\n });\n return r;\n };\n const groupByEvents = (info, behaviours, base) => {\n const behaviourEvents = {\n ...base,\n ...nameToHandlers(behaviours, info)\n };\n return byInnerKey(behaviourEvents, behaviourTuple);\n };\n const combine$1 = (info, eventOrder, behaviours, base) => {\n const byEventName = groupByEvents(info, behaviours, base);\n return combineGroups(byEventName, eventOrder);\n };\n const assemble = rawHandler => {\n const handler = read$2(rawHandler);\n return (component, simulatedEvent, ...rest) => {\n const args = [\n component,\n simulatedEvent\n ].concat(rest);\n if (handler.abort.apply(undefined, args)) {\n simulatedEvent.stop();\n } else if (handler.can.apply(undefined, args)) {\n handler.run.apply(undefined, args);\n }\n };\n };\n const missingOrderError = (eventName, tuples) => Result.error(['The event (' + eventName + ') has more than one behaviour that listens to it.\\nWhen this occurs, you must ' + 'specify an event ordering for the behaviours in your spec (e.g. [ \"listing\", \"toggling\" ]).\\nThe behaviours that ' + 'can trigger it are: ' + JSON.stringify(map$2(tuples, c => c.name), null, 2)]);\n const fuse = (tuples, eventOrder, eventName) => {\n const order = eventOrder[eventName];\n if (!order) {\n return missingOrderError(eventName, tuples);\n } else {\n return sortKeys('Event: ' + eventName, 'name', tuples, order).map(sortedTuples => {\n const handlers = map$2(sortedTuples, tuple => tuple.handler);\n return fuse$1(handlers);\n });\n }\n };\n const combineGroups = (byEventName, eventOrder) => {\n const r = mapToArray(byEventName, (tuples, eventName) => {\n const combined = tuples.length === 1 ? Result.value(tuples[0].handler) : fuse(tuples, eventOrder, eventName);\n return combined.map(handler => {\n const assembled = assemble(handler);\n const purpose = tuples.length > 1 ? filter$2(eventOrder[eventName], o => exists(tuples, t => t.name === o)).join(' > ') : tuples[0].name;\n return wrap$1(eventName, uncurried(assembled, purpose));\n });\n });\n return consolidate(r, {});\n };\n\n const baseBehaviour = 'alloy.base.behaviour';\n const schema$z = objOf([\n field$1('dom', 'dom', required$2(), objOf([\n required$1('tag'),\n defaulted('styles', {}),\n defaulted('classes', []),\n defaulted('attributes', {}),\n option$3('value'),\n option$3('innerHtml')\n ])),\n required$1('components'),\n required$1('uid'),\n defaulted('events', {}),\n defaulted('apis', {}),\n field$1('eventOrder', 'eventOrder', mergeWith({\n [execute$5()]: [\n 'disabling',\n baseBehaviour,\n 'toggling',\n 'typeaheadevents'\n ],\n [focus$4()]: [\n baseBehaviour,\n 'focusing',\n 'keying'\n ],\n [systemInit()]: [\n baseBehaviour,\n 'disabling',\n 'toggling',\n 'representing',\n 'tooltipping'\n ],\n [input()]: [\n baseBehaviour,\n 'representing',\n 'streaming',\n 'invalidating'\n ],\n [detachedFromDom()]: [\n baseBehaviour,\n 'representing',\n 'item-events',\n 'toolbar-button-events',\n 'tooltipping'\n ],\n [mousedown()]: [\n 'focusing',\n baseBehaviour,\n 'item-type-events'\n ],\n [touchstart()]: [\n 'focusing',\n baseBehaviour,\n 'item-type-events'\n ],\n [mouseover()]: [\n 'item-type-events',\n 'tooltipping'\n ],\n [receive()]: [\n 'receiving',\n 'reflecting',\n 'tooltipping'\n ]\n }), anyValue()),\n option$3('domModification')\n ]);\n const toInfo = spec => asRaw('custom.definition', schema$z, spec);\n const toDefinition = detail => ({\n ...detail.dom,\n uid: detail.uid,\n domChildren: map$2(detail.components, comp => comp.element)\n });\n const toModification = detail => detail.domModification.fold(() => nu$8({}), nu$8);\n const toEvents = info => info.events;\n\n const get$7 = element => element.dom.value;\n const set$5 = (element, value) => {\n if (value === undefined) {\n throw new Error('Value.set was undefined');\n }\n element.dom.value = value;\n };\n\n const determineObsoleted = (parent, index, oldObsoleted) => {\n const newObsoleted = child$2(parent, index);\n return newObsoleted.map(newObs => {\n const elemChanged = oldObsoleted.exists(o => !eq(o, newObs));\n if (elemChanged) {\n const oldTag = oldObsoleted.map(name$3).getOr('span');\n const marker = SugarElement.fromTag(oldTag);\n before$1(newObs, marker);\n return marker;\n } else {\n return newObs;\n }\n });\n };\n const ensureInDom = (parent, child, obsoleted) => {\n obsoleted.fold(() => append$2(parent, child), obs => {\n if (!eq(obs, child)) {\n before$1(obs, child);\n remove$6(obs);\n }\n });\n };\n const patchChildrenWith = (parent, nu, f) => {\n const builtChildren = map$2(nu, f);\n const currentChildren = children(parent);\n each$1(currentChildren.slice(builtChildren.length), remove$6);\n return builtChildren;\n };\n const patchSpecChild = (parent, index, spec, build) => {\n const oldObsoleted = child$2(parent, index);\n const childComp = build(spec, oldObsoleted);\n const obsoleted = determineObsoleted(parent, index, oldObsoleted);\n ensureInDom(parent, childComp.element, obsoleted);\n return childComp;\n };\n const patchSpecChildren = (parent, specs, build) => patchChildrenWith(parent, specs, (spec, index) => patchSpecChild(parent, index, spec, build));\n const patchDomChildren = (parent, nodes) => patchChildrenWith(parent, nodes, (node, index) => {\n const optObsoleted = child$2(parent, index);\n ensureInDom(parent, node, optObsoleted);\n return node;\n });\n\n const diffKeyValueSet = (newObj, oldObj) => {\n const newKeys = keys(newObj);\n const oldKeys = keys(oldObj);\n const toRemove = difference(oldKeys, newKeys);\n const toSet = bifilter(newObj, (v, k) => {\n return !has$2(oldObj, k) || v !== oldObj[k];\n }).t;\n return {\n toRemove,\n toSet\n };\n };\n const reconcileToDom = (definition, obsoleted) => {\n const {\n class: clazz,\n style,\n ...existingAttributes\n } = clone$2(obsoleted);\n const {\n toSet: attrsToSet,\n toRemove: attrsToRemove\n } = diffKeyValueSet(definition.attributes, existingAttributes);\n const updateAttrs = () => {\n each$1(attrsToRemove, a => remove$8(obsoleted, a));\n setAll$1(obsoleted, attrsToSet);\n };\n const existingStyles = getAllRaw(obsoleted);\n const {\n toSet: stylesToSet,\n toRemove: stylesToRemove\n } = diffKeyValueSet(definition.styles, existingStyles);\n const updateStyles = () => {\n each$1(stylesToRemove, s => remove$7(obsoleted, s));\n setAll(obsoleted, stylesToSet);\n };\n const existingClasses = get$9(obsoleted);\n const classesToRemove = difference(existingClasses, definition.classes);\n const classesToAdd = difference(definition.classes, existingClasses);\n const updateClasses = () => {\n add$1(obsoleted, classesToAdd);\n remove$2(obsoleted, classesToRemove);\n };\n const updateHtml = html => {\n set$6(obsoleted, html);\n };\n const updateChildren = () => {\n const children = definition.domChildren;\n patchDomChildren(obsoleted, children);\n };\n const updateValue = () => {\n const valueElement = obsoleted;\n const value = definition.value.getOrUndefined();\n if (value !== get$7(valueElement)) {\n set$5(valueElement, value !== null && value !== void 0 ? value : '');\n }\n };\n updateAttrs();\n updateClasses();\n updateStyles();\n definition.innerHtml.fold(updateChildren, updateHtml);\n updateValue();\n return obsoleted;\n };\n\n const introduceToDom = definition => {\n const subject = SugarElement.fromTag(definition.tag);\n setAll$1(subject, definition.attributes);\n add$1(subject, definition.classes);\n setAll(subject, definition.styles);\n definition.innerHtml.each(html => set$6(subject, html));\n const children = definition.domChildren;\n append$1(subject, children);\n definition.value.each(value => {\n set$5(subject, value);\n });\n return subject;\n };\n const attemptPatch = (definition, obsoleted) => {\n try {\n const e = reconcileToDom(definition, obsoleted);\n return Optional.some(e);\n } catch (_a) {\n return Optional.none();\n }\n };\n const hasMixedChildren = definition => definition.innerHtml.isSome() && definition.domChildren.length > 0;\n const renderToDom = (definition, optObsoleted) => {\n const canBePatched = candidate => name$3(candidate) === definition.tag && !hasMixedChildren(definition) && !isPremade(candidate);\n const elem = optObsoleted.filter(canBePatched).bind(obsoleted => attemptPatch(definition, obsoleted)).getOrThunk(() => introduceToDom(definition));\n writeOnly(elem, definition.uid);\n return elem;\n };\n\n const getBehaviours$2 = spec => {\n const behaviours = get$h(spec, 'behaviours').getOr({});\n return bind$3(keys(behaviours), name => {\n const behaviour = behaviours[name];\n return isNonNullable(behaviour) ? [behaviour.me] : [];\n });\n };\n const generateFrom = (spec, all) => generateFrom$1(spec, all);\n const generate$4 = spec => {\n const all = getBehaviours$2(spec);\n return generateFrom(spec, all);\n };\n\n const getDomDefinition = (info, bList, bData) => {\n const definition = toDefinition(info);\n const infoModification = toModification(info);\n const baseModification = { 'alloy.base.modification': infoModification };\n const modification = bList.length > 0 ? combine$2(bData, baseModification, bList, definition) : infoModification;\n return merge(definition, modification);\n };\n const getEvents = (info, bList, bData) => {\n const baseEvents = { 'alloy.base.behaviour': toEvents(info) };\n return combine$1(bData, info.eventOrder, bList, baseEvents).getOrDie();\n };\n const build$2 = (spec, obsoleted) => {\n const getMe = () => me;\n const systemApi = Cell(singleton);\n const info = getOrDie(toInfo(spec));\n const bBlob = generate$4(spec);\n const bList = getBehaviours$3(bBlob);\n const bData = getData$2(bBlob);\n const modDefinition = getDomDefinition(info, bList, bData);\n const item = renderToDom(modDefinition, obsoleted);\n const events = getEvents(info, bList, bData);\n const subcomponents = Cell(info.components);\n const connect = newApi => {\n systemApi.set(newApi);\n };\n const disconnect = () => {\n systemApi.set(NoContextApi(getMe));\n };\n const syncComponents = () => {\n const children$1 = children(item);\n const subs = bind$3(children$1, child => systemApi.get().getByDom(child).fold(() => [], pure$2));\n subcomponents.set(subs);\n };\n const config = behaviour => {\n const b = bData;\n const f = isFunction(b[behaviour.name()]) ? b[behaviour.name()] : () => {\n throw new Error('Could not find ' + behaviour.name() + ' in ' + JSON.stringify(spec, null, 2));\n };\n return f();\n };\n const hasConfigured = behaviour => isFunction(bData[behaviour.name()]);\n const getApis = () => info.apis;\n const readState = behaviourName => bData[behaviourName]().map(b => b.state.readState()).getOr('not enabled');\n const me = {\n uid: spec.uid,\n getSystem: systemApi.get,\n config,\n hasConfigured,\n spec,\n readState,\n getApis,\n connect,\n disconnect,\n element: item,\n syncComponents,\n components: subcomponents.get,\n events\n };\n return me;\n };\n\n const buildSubcomponents = (spec, obsoleted) => {\n const components = get$h(spec, 'components').getOr([]);\n return obsoleted.fold(() => map$2(components, build$1), obs => map$2(components, (c, i) => {\n return buildOrPatch(c, child$2(obs, i));\n }));\n };\n const buildFromSpec = (userSpec, obsoleted) => {\n const {\n events: specEvents,\n ...spec\n } = make$8(userSpec);\n const components = buildSubcomponents(spec, obsoleted);\n const completeSpec = {\n ...spec,\n events: {\n ...DefaultEvents,\n ...specEvents\n },\n components\n };\n return Result.value(build$2(completeSpec, obsoleted));\n };\n const text$2 = textContent => {\n const element = SugarElement.fromText(textContent);\n return external$1({ element });\n };\n const external$1 = spec => {\n const extSpec = asRawOrDie$1('external.component', objOfOnly([\n required$1('element'),\n option$3('uid')\n ]), spec);\n const systemApi = Cell(NoContextApi());\n const connect = newApi => {\n systemApi.set(newApi);\n };\n const disconnect = () => {\n systemApi.set(NoContextApi(() => me));\n };\n const uid = extSpec.uid.getOrThunk(() => generate$5('external'));\n writeOnly(extSpec.element, uid);\n const me = {\n uid,\n getSystem: systemApi.get,\n config: Optional.none,\n hasConfigured: never,\n connect,\n disconnect,\n getApis: () => ({}),\n element: extSpec.element,\n spec,\n readState: constant$1('No state'),\n syncComponents: noop,\n components: constant$1([]),\n events: {}\n };\n return premade$1(me);\n };\n const uids = generate$5;\n const isSketchSpec$1 = spec => has$2(spec, 'uid');\n const buildOrPatch = (spec, obsoleted) => getPremade(spec).getOrThunk(() => {\n const userSpecWithUid = isSketchSpec$1(spec) ? spec : {\n uid: uids(''),\n ...spec\n };\n return buildFromSpec(userSpecWithUid, obsoleted).getOrDie();\n });\n const build$1 = spec => buildOrPatch(spec, Optional.none());\n const premade = premade$1;\n\n var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n if (is(scope, a)) {\n return Optional.some(scope);\n } else if (isFunction(isRoot) && isRoot(scope)) {\n return Optional.none();\n } else {\n return ancestor(scope, a, isRoot);\n }\n };\n\n const ancestor$1 = (scope, predicate, isRoot) => {\n let element = scope.dom;\n const stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n const el = SugarElement.fromDom(element);\n if (predicate(el)) {\n return Optional.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n const closest$3 = (scope, predicate, isRoot) => {\n const is = (s, test) => test(s);\n return ClosestOrAncestor(is, ancestor$1, scope, predicate, isRoot);\n };\n const sibling$1 = (scope, predicate) => {\n const element = scope.dom;\n if (!element.parentNode) {\n return Optional.none();\n }\n return child$1(SugarElement.fromDom(element.parentNode), x => !eq(scope, x) && predicate(x));\n };\n const child$1 = (scope, predicate) => {\n const pred = node => predicate(SugarElement.fromDom(node));\n const result = find$5(scope.dom.childNodes, pred);\n return result.map(SugarElement.fromDom);\n };\n const descendant$1 = (scope, predicate) => {\n const descend = node => {\n for (let i = 0; i < node.childNodes.length; i++) {\n const child = SugarElement.fromDom(node.childNodes[i]);\n if (predicate(child)) {\n return Optional.some(child);\n }\n const res = descend(node.childNodes[i]);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope.dom);\n };\n\n const closest$2 = (scope, predicate, isRoot) => closest$3(scope, predicate, isRoot).isSome();\n\n const first$1 = selector => one(selector);\n const ancestor = (scope, selector, isRoot) => ancestor$1(scope, e => is(e, selector), isRoot);\n const sibling = (scope, selector) => sibling$1(scope, e => is(e, selector));\n const child = (scope, selector) => child$1(scope, e => is(e, selector));\n const descendant = (scope, selector) => one(selector, scope);\n const closest$1 = (scope, selector, isRoot) => {\n const is$1 = (element, selector) => is(element, selector);\n return ClosestOrAncestor(is$1, ancestor, scope, selector, isRoot);\n };\n\n const attribute = 'aria-controls';\n const find$1 = queryElem => {\n const dependent = closest$3(queryElem, elem => {\n if (!isElement$1(elem)) {\n return false;\n }\n const id = get$g(elem, 'id');\n return id !== undefined && id.indexOf(attribute) > -1;\n });\n return dependent.bind(dep => {\n const id = get$g(dep, 'id');\n const dos = getRootNode(dep);\n return descendant(dos, `[${ attribute }=\"${ id }\"]`);\n });\n };\n const manager = () => {\n const ariaId = generate$6(attribute);\n const link = elem => {\n set$9(elem, attribute, ariaId);\n };\n const unlink = elem => {\n remove$8(elem, attribute);\n };\n return {\n id: ariaId,\n link,\n unlink\n };\n };\n\n const isAriaPartOf = (component, queryElem) => find$1(queryElem).exists(owner => isPartOf$1(component, owner));\n const isPartOf$1 = (component, queryElem) => closest$2(queryElem, el => eq(el, component.element), never) || isAriaPartOf(component, queryElem);\n\n const nu$6 = (x, y, bubble, direction, placement, boundsRestriction, labelPrefix, alwaysFit = false) => ({\n x,\n y,\n bubble,\n direction,\n placement,\n restriction: boundsRestriction,\n label: `${ labelPrefix }-${ placement }`,\n alwaysFit\n });\n\n const adt$a = Adt.generate([\n { southeast: [] },\n { southwest: [] },\n { northeast: [] },\n { northwest: [] },\n { south: [] },\n { north: [] },\n { east: [] },\n { west: [] }\n ]);\n const cata$2 = (subject, southeast, southwest, northeast, northwest, south, north, east, west) => subject.fold(southeast, southwest, northeast, northwest, south, north, east, west);\n const cataVertical = (subject, south, middle, north) => subject.fold(south, south, north, north, south, north, middle, middle);\n const cataHorizontal = (subject, east, middle, west) => subject.fold(east, west, east, west, middle, middle, east, west);\n const southeast$3 = adt$a.southeast;\n const southwest$3 = adt$a.southwest;\n const northeast$3 = adt$a.northeast;\n const northwest$3 = adt$a.northwest;\n const south$3 = adt$a.south;\n const north$3 = adt$a.north;\n const east$3 = adt$a.east;\n const west$3 = adt$a.west;\n\n const getRestriction = (anchor, restriction) => {\n switch (restriction) {\n case 1:\n return anchor.x;\n case 0:\n return anchor.x + anchor.width;\n case 2:\n return anchor.y;\n case 3:\n return anchor.y + anchor.height;\n }\n };\n const boundsRestriction = (anchor, restrictions) => mapToObject([\n 'left',\n 'right',\n 'top',\n 'bottom'\n ], dir => get$h(restrictions, dir).map(restriction => getRestriction(anchor, restriction)));\n const adjustBounds = (bounds$1, restriction, bubbleOffset) => {\n const applyRestriction = (dir, current) => restriction[dir].map(pos => {\n const isVerticalAxis = dir === 'top' || dir === 'bottom';\n const offset = isVerticalAxis ? bubbleOffset.top : bubbleOffset.left;\n const comparator = dir === 'left' || dir === 'top' ? Math.max : Math.min;\n const newPos = comparator(pos, current) + offset;\n return isVerticalAxis ? clamp(newPos, bounds$1.y, bounds$1.bottom) : clamp(newPos, bounds$1.x, bounds$1.right);\n }).getOr(current);\n const adjustedLeft = applyRestriction('left', bounds$1.x);\n const adjustedTop = applyRestriction('top', bounds$1.y);\n const adjustedRight = applyRestriction('right', bounds$1.right);\n const adjustedBottom = applyRestriction('bottom', bounds$1.bottom);\n return bounds(adjustedLeft, adjustedTop, adjustedRight - adjustedLeft, adjustedBottom - adjustedTop);\n };\n\n const labelPrefix$2 = 'layout';\n const eastX$1 = anchor => anchor.x;\n const middleX$1 = (anchor, element) => anchor.x + anchor.width / 2 - element.width / 2;\n const westX$1 = (anchor, element) => anchor.x + anchor.width - element.width;\n const northY$2 = (anchor, element) => anchor.y - element.height;\n const southY$2 = anchor => anchor.y + anchor.height;\n const centreY$1 = (anchor, element) => anchor.y + anchor.height / 2 - element.height / 2;\n const eastEdgeX$1 = anchor => anchor.x + anchor.width;\n const westEdgeX$1 = (anchor, element) => anchor.x - element.width;\n const southeast$2 = (anchor, element, bubbles) => nu$6(eastX$1(anchor), southY$2(anchor), bubbles.southeast(), southeast$3(), 'southeast', boundsRestriction(anchor, {\n left: 1,\n top: 3\n }), labelPrefix$2);\n const southwest$2 = (anchor, element, bubbles) => nu$6(westX$1(anchor, element), southY$2(anchor), bubbles.southwest(), southwest$3(), 'southwest', boundsRestriction(anchor, {\n right: 0,\n top: 3\n }), labelPrefix$2);\n const northeast$2 = (anchor, element, bubbles) => nu$6(eastX$1(anchor), northY$2(anchor, element), bubbles.northeast(), northeast$3(), 'northeast', boundsRestriction(anchor, {\n left: 1,\n bottom: 2\n }), labelPrefix$2);\n const northwest$2 = (anchor, element, bubbles) => nu$6(westX$1(anchor, element), northY$2(anchor, element), bubbles.northwest(), northwest$3(), 'northwest', boundsRestriction(anchor, {\n right: 0,\n bottom: 2\n }), labelPrefix$2);\n const north$2 = (anchor, element, bubbles) => nu$6(middleX$1(anchor, element), northY$2(anchor, element), bubbles.north(), north$3(), 'north', boundsRestriction(anchor, { bottom: 2 }), labelPrefix$2);\n const south$2 = (anchor, element, bubbles) => nu$6(middleX$1(anchor, element), southY$2(anchor), bubbles.south(), south$3(), 'south', boundsRestriction(anchor, { top: 3 }), labelPrefix$2);\n const east$2 = (anchor, element, bubbles) => nu$6(eastEdgeX$1(anchor), centreY$1(anchor, element), bubbles.east(), east$3(), 'east', boundsRestriction(anchor, { left: 0 }), labelPrefix$2);\n const west$2 = (anchor, element, bubbles) => nu$6(westEdgeX$1(anchor, element), centreY$1(anchor, element), bubbles.west(), west$3(), 'west', boundsRestriction(anchor, { right: 1 }), labelPrefix$2);\n const all$1 = () => [\n southeast$2,\n southwest$2,\n northeast$2,\n northwest$2,\n south$2,\n north$2,\n east$2,\n west$2\n ];\n const allRtl$1 = () => [\n southwest$2,\n southeast$2,\n northwest$2,\n northeast$2,\n south$2,\n north$2,\n east$2,\n west$2\n ];\n const aboveOrBelow = () => [\n northeast$2,\n northwest$2,\n southeast$2,\n southwest$2,\n north$2,\n south$2\n ];\n const aboveOrBelowRtl = () => [\n northwest$2,\n northeast$2,\n southwest$2,\n southeast$2,\n north$2,\n south$2\n ];\n const belowOrAbove = () => [\n southeast$2,\n southwest$2,\n northeast$2,\n northwest$2,\n south$2,\n north$2\n ];\n const belowOrAboveRtl = () => [\n southwest$2,\n southeast$2,\n northwest$2,\n northeast$2,\n south$2,\n north$2\n ];\n\n const chooseChannels = (channels, message) => message.universal ? channels : filter$2(channels, ch => contains$2(message.channels, ch));\n const events$g = receiveConfig => derive$2([run$1(receive(), (component, message) => {\n const channelMap = receiveConfig.channels;\n const channels = keys(channelMap);\n const receivingData = message;\n const targetChannels = chooseChannels(channels, receivingData);\n each$1(targetChannels, ch => {\n const channelInfo = channelMap[ch];\n const channelSchema = channelInfo.schema;\n const data = asRawOrDie$1('channel[' + ch + '] data\\nReceiver: ' + element(component.element), channelSchema, receivingData.data);\n channelInfo.onReceive(component, data);\n });\n })]);\n\n var ActiveReceiving = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$g\n });\n\n var ReceivingSchema = [requiredOf('channels', setOf(Result.value, objOfOnly([\n onStrictHandler('onReceive'),\n defaulted('schema', anyValue())\n ])))];\n\n const Receiving = create$4({\n fields: ReceivingSchema,\n name: 'receiving',\n active: ActiveReceiving\n });\n\n const exhibit$6 = (base, posConfig) => nu$8({\n classes: [],\n styles: posConfig.useFixed() ? {} : { position: 'relative' }\n });\n\n var ActivePosition = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$6\n });\n\n const focus$3 = (element, preventScroll = false) => element.dom.focus({ preventScroll });\n const blur$1 = element => element.dom.blur();\n const hasFocus = element => {\n const root = getRootNode(element).dom;\n return element.dom === root.activeElement;\n };\n const active$1 = (root = getDocument()) => Optional.from(root.dom.activeElement).map(SugarElement.fromDom);\n const search = element => active$1(getRootNode(element)).filter(e => element.dom.contains(e.dom));\n\n const preserve$1 = (f, container) => {\n const dos = getRootNode(container);\n const refocus = active$1(dos).bind(focused => {\n const hasFocus = elem => eq(focused, elem);\n return hasFocus(container) ? Optional.some(container) : descendant$1(container, hasFocus);\n });\n const result = f(container);\n refocus.each(oldFocus => {\n active$1(dos).filter(newFocus => eq(newFocus, oldFocus)).fold(() => {\n focus$3(oldFocus);\n }, noop);\n });\n return result;\n };\n\n const adt$9 = Adt.generate([\n { none: [] },\n {\n relative: [\n 'x',\n 'y',\n 'width',\n 'height'\n ]\n },\n {\n fixed: [\n 'x',\n 'y',\n 'width',\n 'height'\n ]\n }\n ]);\n const positionWithDirection = (posName, decision, x, y, width, height) => {\n const decisionRect = decision.rect;\n const decisionX = decisionRect.x - x;\n const decisionY = decisionRect.y - y;\n const decisionWidth = decisionRect.width;\n const decisionHeight = decisionRect.height;\n const decisionRight = width - (decisionX + decisionWidth);\n const decisionBottom = height - (decisionY + decisionHeight);\n const left = Optional.some(decisionX);\n const top = Optional.some(decisionY);\n const right = Optional.some(decisionRight);\n const bottom = Optional.some(decisionBottom);\n const none = Optional.none();\n return cata$2(decision.direction, () => NuPositionCss(posName, left, top, none, none), () => NuPositionCss(posName, none, top, right, none), () => NuPositionCss(posName, left, none, none, bottom), () => NuPositionCss(posName, none, none, right, bottom), () => NuPositionCss(posName, left, top, none, none), () => NuPositionCss(posName, left, none, none, bottom), () => NuPositionCss(posName, left, top, none, none), () => NuPositionCss(posName, none, top, right, none));\n };\n const reposition = (origin, decision) => origin.fold(() => {\n const decisionRect = decision.rect;\n return NuPositionCss('absolute', Optional.some(decisionRect.x), Optional.some(decisionRect.y), Optional.none(), Optional.none());\n }, (x, y, width, height) => {\n return positionWithDirection('absolute', decision, x, y, width, height);\n }, (x, y, width, height) => {\n return positionWithDirection('fixed', decision, x, y, width, height);\n });\n const toBox = (origin, element) => {\n const rel = curry(find$2, element);\n const position = origin.fold(rel, rel, () => {\n const scroll = get$c();\n return find$2(element).translate(-scroll.left, -scroll.top);\n });\n const width = getOuter$1(element);\n const height = getOuter$2(element);\n return bounds(position.left, position.top, width, height);\n };\n const viewport = (origin, optBounds) => optBounds.fold(() => origin.fold(win, win, bounds), bounds$1 => origin.fold(constant$1(bounds$1), constant$1(bounds$1), () => {\n const pos = translate$2(origin, bounds$1.x, bounds$1.y);\n return bounds(pos.left, pos.top, bounds$1.width, bounds$1.height);\n }));\n const translate$2 = (origin, x, y) => {\n const pos = SugarPosition(x, y);\n const removeScroll = () => {\n const outerScroll = get$c();\n return pos.translate(-outerScroll.left, -outerScroll.top);\n };\n return origin.fold(constant$1(pos), constant$1(pos), removeScroll);\n };\n const cata$1 = (subject, onNone, onRelative, onFixed) => subject.fold(onNone, onRelative, onFixed);\n adt$9.none;\n const relative$1 = adt$9.relative;\n const fixed$1 = adt$9.fixed;\n\n const anchor = (anchorBox, origin) => ({\n anchorBox,\n origin\n });\n const box = (anchorBox, origin) => anchor(anchorBox, origin);\n\n const placementAttribute = 'data-alloy-placement';\n const setPlacement$1 = (element, placement) => {\n set$9(element, placementAttribute, placement);\n };\n const getPlacement = element => getOpt(element, placementAttribute);\n const reset$1 = element => remove$8(element, placementAttribute);\n\n const adt$8 = Adt.generate([\n { fit: ['reposition'] },\n {\n nofit: [\n 'reposition',\n 'visibleW',\n 'visibleH',\n 'isVisible'\n ]\n }\n ]);\n const determinePosition = (box, bounds) => {\n const {\n x: boundsX,\n y: boundsY,\n right: boundsRight,\n bottom: boundsBottom\n } = bounds;\n const {x, y, right, bottom, width, height} = box;\n const xInBounds = x >= boundsX && x <= boundsRight;\n const yInBounds = y >= boundsY && y <= boundsBottom;\n const originInBounds = xInBounds && yInBounds;\n const rightInBounds = right <= boundsRight && right >= boundsX;\n const bottomInBounds = bottom <= boundsBottom && bottom >= boundsY;\n const sizeInBounds = rightInBounds && bottomInBounds;\n const visibleW = Math.min(width, x >= boundsX ? boundsRight - x : right - boundsX);\n const visibleH = Math.min(height, y >= boundsY ? boundsBottom - y : bottom - boundsY);\n return {\n originInBounds,\n sizeInBounds,\n visibleW,\n visibleH\n };\n };\n const calcReposition = (box, bounds$1) => {\n const {\n x: boundsX,\n y: boundsY,\n right: boundsRight,\n bottom: boundsBottom\n } = bounds$1;\n const {x, y, width, height} = box;\n const maxX = Math.max(boundsX, boundsRight - width);\n const maxY = Math.max(boundsY, boundsBottom - height);\n const restrictedX = clamp(x, boundsX, maxX);\n const restrictedY = clamp(y, boundsY, maxY);\n const restrictedWidth = Math.min(restrictedX + width, boundsRight) - restrictedX;\n const restrictedHeight = Math.min(restrictedY + height, boundsBottom) - restrictedY;\n return bounds(restrictedX, restrictedY, restrictedWidth, restrictedHeight);\n };\n const calcMaxSizes = (direction, box, bounds) => {\n const upAvailable = constant$1(box.bottom - bounds.y);\n const downAvailable = constant$1(bounds.bottom - box.y);\n const maxHeight = cataVertical(direction, downAvailable, downAvailable, upAvailable);\n const westAvailable = constant$1(box.right - bounds.x);\n const eastAvailable = constant$1(bounds.right - box.x);\n const maxWidth = cataHorizontal(direction, eastAvailable, eastAvailable, westAvailable);\n return {\n maxWidth,\n maxHeight\n };\n };\n const attempt = (candidate, width, height, bounds$1) => {\n const bubble = candidate.bubble;\n const bubbleOffset = bubble.offset;\n const adjustedBounds = adjustBounds(bounds$1, candidate.restriction, bubbleOffset);\n const newX = candidate.x + bubbleOffset.left;\n const newY = candidate.y + bubbleOffset.top;\n const box = bounds(newX, newY, width, height);\n const {originInBounds, sizeInBounds, visibleW, visibleH} = determinePosition(box, adjustedBounds);\n const fits = originInBounds && sizeInBounds;\n const fittedBox = fits ? box : calcReposition(box, adjustedBounds);\n const isPartlyVisible = fittedBox.width > 0 && fittedBox.height > 0;\n const {maxWidth, maxHeight} = calcMaxSizes(candidate.direction, fittedBox, bounds$1);\n const reposition = {\n rect: fittedBox,\n maxHeight,\n maxWidth,\n direction: candidate.direction,\n placement: candidate.placement,\n classes: {\n on: bubble.classesOn,\n off: bubble.classesOff\n },\n layout: candidate.label,\n testY: newY\n };\n return fits || candidate.alwaysFit ? adt$8.fit(reposition) : adt$8.nofit(reposition, visibleW, visibleH, isPartlyVisible);\n };\n const attempts = (element, candidates, anchorBox, elementBox, bubbles, bounds) => {\n const panelWidth = elementBox.width;\n const panelHeight = elementBox.height;\n const attemptBestFit = (layout, reposition, visibleW, visibleH, isVisible) => {\n const next = layout(anchorBox, elementBox, bubbles, element, bounds);\n const attemptLayout = attempt(next, panelWidth, panelHeight, bounds);\n return attemptLayout.fold(constant$1(attemptLayout), (newReposition, newVisibleW, newVisibleH, newIsVisible) => {\n const improved = isVisible === newIsVisible ? newVisibleH > visibleH || newVisibleW > visibleW : !isVisible && newIsVisible;\n return improved ? attemptLayout : adt$8.nofit(reposition, visibleW, visibleH, isVisible);\n });\n };\n const abc = foldl(candidates, (b, a) => {\n const bestNext = curry(attemptBestFit, a);\n return b.fold(constant$1(b), bestNext);\n }, adt$8.nofit({\n rect: anchorBox,\n maxHeight: elementBox.height,\n maxWidth: elementBox.width,\n direction: southeast$3(),\n placement: 'southeast',\n classes: {\n on: [],\n off: []\n },\n layout: 'none',\n testY: anchorBox.y\n }, -1, -1, false));\n return abc.fold(identity, identity);\n };\n\n const filter = always;\n const bind = (element, event, handler) => bind$2(element, event, filter, handler);\n const capture = (element, event, handler) => capture$1(element, event, filter, handler);\n const fromRawEvent = fromRawEvent$1;\n\n const properties = [\n 'top',\n 'bottom',\n 'right',\n 'left'\n ];\n const timerAttr = 'data-alloy-transition-timer';\n const isTransitioning$1 = (element, transition) => hasAll(element, transition.classes);\n const shouldApplyTransitionCss = (transition, decision, lastPlacement) => {\n return lastPlacement.exists(placer => {\n const mode = transition.mode;\n return mode === 'all' ? true : placer[mode] !== decision[mode];\n });\n };\n const hasChanges = (position, intermediate) => {\n const round = value => parseFloat(value).toFixed(3);\n return find$4(intermediate, (value, key) => {\n const newValue = position[key].map(round);\n const val = value.map(round);\n return !equals(newValue, val);\n }).isSome();\n };\n const getTransitionDuration = element => {\n const get = name => {\n const style = get$f(element, name);\n const times = style.split(/\\s*,\\s*/);\n return filter$2(times, isNotEmpty);\n };\n const parse = value => {\n if (isString(value) && /^[\\d.]+/.test(value)) {\n const num = parseFloat(value);\n return endsWith(value, 'ms') ? num : num * 1000;\n } else {\n return 0;\n }\n };\n const delay = get('transition-delay');\n const duration = get('transition-duration');\n return foldl(duration, (acc, dur, i) => {\n const time = parse(delay[i]) + parse(dur);\n return Math.max(acc, time);\n }, 0);\n };\n const setupTransitionListeners = (element, transition) => {\n const transitionEnd = unbindable();\n const transitionCancel = unbindable();\n let timer;\n const isSourceTransition = e => {\n var _a;\n const pseudoElement = (_a = e.raw.pseudoElement) !== null && _a !== void 0 ? _a : '';\n return eq(e.target, element) && isEmpty(pseudoElement) && contains$2(properties, e.raw.propertyName);\n };\n const transitionDone = e => {\n if (isNullable(e) || isSourceTransition(e)) {\n transitionEnd.clear();\n transitionCancel.clear();\n const type = e === null || e === void 0 ? void 0 : e.raw.type;\n if (isNullable(type) || type === transitionend()) {\n clearTimeout(timer);\n remove$8(element, timerAttr);\n remove$2(element, transition.classes);\n }\n }\n };\n const transitionStart = bind(element, transitionstart(), e => {\n if (isSourceTransition(e)) {\n transitionStart.unbind();\n transitionEnd.set(bind(element, transitionend(), transitionDone));\n transitionCancel.set(bind(element, transitioncancel(), transitionDone));\n }\n });\n const duration = getTransitionDuration(element);\n requestAnimationFrame(() => {\n timer = setTimeout(transitionDone, duration + 17);\n set$9(element, timerAttr, timer);\n });\n };\n const startTransitioning = (element, transition) => {\n add$1(element, transition.classes);\n getOpt(element, timerAttr).each(timerId => {\n clearTimeout(parseInt(timerId, 10));\n remove$8(element, timerAttr);\n });\n setupTransitionListeners(element, transition);\n };\n const applyTransitionCss = (element, origin, position, transition, decision, lastPlacement) => {\n const shouldTransition = shouldApplyTransitionCss(transition, decision, lastPlacement);\n if (shouldTransition || isTransitioning$1(element, transition)) {\n set$8(element, 'position', position.position);\n const rect = toBox(origin, element);\n const intermediatePosition = reposition(origin, {\n ...decision,\n rect\n });\n const intermediateCssOptions = mapToObject(properties, prop => intermediatePosition[prop]);\n if (hasChanges(position, intermediateCssOptions)) {\n setOptions(element, intermediateCssOptions);\n if (shouldTransition) {\n startTransitioning(element, transition);\n }\n reflow(element);\n }\n } else {\n remove$2(element, transition.classes);\n }\n };\n\n const elementSize = p => ({\n width: getOuter$1(p),\n height: getOuter$2(p)\n });\n const layout = (anchorBox, element, bubbles, options) => {\n remove$7(element, 'max-height');\n remove$7(element, 'max-width');\n const elementBox = elementSize(element);\n return attempts(element, options.preference, anchorBox, elementBox, bubbles, options.bounds);\n };\n const setClasses = (element, decision) => {\n const classInfo = decision.classes;\n remove$2(element, classInfo.off);\n add$1(element, classInfo.on);\n };\n const setHeight = (element, decision, options) => {\n const maxHeightFunction = options.maxHeightFunction;\n maxHeightFunction(element, decision.maxHeight);\n };\n const setWidth = (element, decision, options) => {\n const maxWidthFunction = options.maxWidthFunction;\n maxWidthFunction(element, decision.maxWidth);\n };\n const position$2 = (element, decision, options) => {\n const positionCss = reposition(options.origin, decision);\n options.transition.each(transition => {\n applyTransitionCss(element, options.origin, positionCss, transition, decision, options.lastPlacement);\n });\n applyPositionCss(element, positionCss);\n };\n const setPlacement = (element, decision) => {\n setPlacement$1(element, decision.placement);\n };\n\n const setMaxHeight = (element, maxHeight) => {\n setMax$1(element, Math.floor(maxHeight));\n };\n const anchored = constant$1((element, available) => {\n setMaxHeight(element, available);\n setAll(element, {\n 'overflow-x': 'hidden',\n 'overflow-y': 'auto'\n });\n });\n const expandable$1 = constant$1((element, available) => {\n setMaxHeight(element, available);\n });\n\n const defaultOr = (options, key, dephault) => options[key] === undefined ? dephault : options[key];\n const simple = (anchor, element, bubble, layouts, lastPlacement, optBounds, overrideOptions, transition) => {\n const maxHeightFunction = defaultOr(overrideOptions, 'maxHeightFunction', anchored());\n const maxWidthFunction = defaultOr(overrideOptions, 'maxWidthFunction', noop);\n const anchorBox = anchor.anchorBox;\n const origin = anchor.origin;\n const options = {\n bounds: viewport(origin, optBounds),\n origin,\n preference: layouts,\n maxHeightFunction,\n maxWidthFunction,\n lastPlacement,\n transition\n };\n return go(anchorBox, element, bubble, options);\n };\n const go = (anchorBox, element, bubble, options) => {\n const decision = layout(anchorBox, element, bubble, options);\n position$2(element, decision, options);\n setPlacement(element, decision);\n setClasses(element, decision);\n setHeight(element, decision, options);\n setWidth(element, decision, options);\n return {\n layout: decision.layout,\n placement: decision.placement\n };\n };\n\n const allAlignments = [\n 'valignCentre',\n 'alignLeft',\n 'alignRight',\n 'alignCentre',\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'inset'\n ];\n const nu$5 = (xOffset, yOffset, classes, insetModifier = 1) => {\n const insetXOffset = xOffset * insetModifier;\n const insetYOffset = yOffset * insetModifier;\n const getClasses = prop => get$h(classes, prop).getOr([]);\n const make = (xDelta, yDelta, alignmentsOn) => {\n const alignmentsOff = difference(allAlignments, alignmentsOn);\n return {\n offset: SugarPosition(xDelta, yDelta),\n classesOn: bind$3(alignmentsOn, getClasses),\n classesOff: bind$3(alignmentsOff, getClasses)\n };\n };\n return {\n southeast: () => make(-xOffset, yOffset, [\n 'top',\n 'alignLeft'\n ]),\n southwest: () => make(xOffset, yOffset, [\n 'top',\n 'alignRight'\n ]),\n south: () => make(-xOffset / 2, yOffset, [\n 'top',\n 'alignCentre'\n ]),\n northeast: () => make(-xOffset, -yOffset, [\n 'bottom',\n 'alignLeft'\n ]),\n northwest: () => make(xOffset, -yOffset, [\n 'bottom',\n 'alignRight'\n ]),\n north: () => make(-xOffset / 2, -yOffset, [\n 'bottom',\n 'alignCentre'\n ]),\n east: () => make(xOffset, -yOffset / 2, [\n 'valignCentre',\n 'left'\n ]),\n west: () => make(-xOffset, -yOffset / 2, [\n 'valignCentre',\n 'right'\n ]),\n insetNortheast: () => make(insetXOffset, insetYOffset, [\n 'top',\n 'alignLeft',\n 'inset'\n ]),\n insetNorthwest: () => make(-insetXOffset, insetYOffset, [\n 'top',\n 'alignRight',\n 'inset'\n ]),\n insetNorth: () => make(-insetXOffset / 2, insetYOffset, [\n 'top',\n 'alignCentre',\n 'inset'\n ]),\n insetSoutheast: () => make(insetXOffset, -insetYOffset, [\n 'bottom',\n 'alignLeft',\n 'inset'\n ]),\n insetSouthwest: () => make(-insetXOffset, -insetYOffset, [\n 'bottom',\n 'alignRight',\n 'inset'\n ]),\n insetSouth: () => make(-insetXOffset / 2, -insetYOffset, [\n 'bottom',\n 'alignCentre',\n 'inset'\n ]),\n insetEast: () => make(-insetXOffset, -insetYOffset / 2, [\n 'valignCentre',\n 'right',\n 'inset'\n ]),\n insetWest: () => make(insetXOffset, -insetYOffset / 2, [\n 'valignCentre',\n 'left',\n 'inset'\n ])\n };\n };\n const fallback = () => nu$5(0, 0, {});\n\n const nu$4 = identity;\n\n const onDirection = (isLtr, isRtl) => element => getDirection(element) === 'rtl' ? isRtl : isLtr;\n const getDirection = element => get$f(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n\n var AttributeValue;\n (function (AttributeValue) {\n AttributeValue['TopToBottom'] = 'toptobottom';\n AttributeValue['BottomToTop'] = 'bottomtotop';\n }(AttributeValue || (AttributeValue = {})));\n const Attribute = 'data-alloy-vertical-dir';\n const isBottomToTopDir = el => closest$2(el, current => isElement$1(current) && get$g(current, 'data-alloy-vertical-dir') === AttributeValue.BottomToTop);\n\n const schema$y = () => optionObjOf('layouts', [\n required$1('onLtr'),\n required$1('onRtl'),\n option$3('onBottomLtr'),\n option$3('onBottomRtl')\n ]);\n const get$6 = (elem, info, defaultLtr, defaultRtl, defaultBottomLtr, defaultBottomRtl, dirElement) => {\n const isBottomToTop = dirElement.map(isBottomToTopDir).getOr(false);\n const customLtr = info.layouts.map(ls => ls.onLtr(elem));\n const customRtl = info.layouts.map(ls => ls.onRtl(elem));\n const ltr = isBottomToTop ? info.layouts.bind(ls => ls.onBottomLtr.map(f => f(elem))).or(customLtr).getOr(defaultBottomLtr) : customLtr.getOr(defaultLtr);\n const rtl = isBottomToTop ? info.layouts.bind(ls => ls.onBottomRtl.map(f => f(elem))).or(customRtl).getOr(defaultBottomRtl) : customRtl.getOr(defaultRtl);\n const f = onDirection(ltr, rtl);\n return f(elem);\n };\n\n const placement$4 = (component, anchorInfo, origin) => {\n const hotspot = anchorInfo.hotspot;\n const anchorBox = toBox(origin, hotspot.element);\n const layouts = get$6(component.element, anchorInfo, belowOrAbove(), belowOrAboveRtl(), aboveOrBelow(), aboveOrBelowRtl(), Optional.some(anchorInfo.hotspot.element));\n return Optional.some(nu$4({\n anchorBox,\n bubble: anchorInfo.bubble.getOr(fallback()),\n overrides: anchorInfo.overrides,\n layouts\n }));\n };\n var HotspotAnchor = [\n required$1('hotspot'),\n option$3('bubble'),\n defaulted('overrides', {}),\n schema$y(),\n output$1('placement', placement$4)\n ];\n\n const placement$3 = (component, anchorInfo, origin) => {\n const pos = translate$2(origin, anchorInfo.x, anchorInfo.y);\n const anchorBox = bounds(pos.left, pos.top, anchorInfo.width, anchorInfo.height);\n const layouts = get$6(component.element, anchorInfo, all$1(), allRtl$1(), all$1(), allRtl$1(), Optional.none());\n return Optional.some(nu$4({\n anchorBox,\n bubble: anchorInfo.bubble,\n overrides: anchorInfo.overrides,\n layouts\n }));\n };\n var MakeshiftAnchor = [\n required$1('x'),\n required$1('y'),\n defaulted('height', 0),\n defaulted('width', 0),\n defaulted('bubble', fallback()),\n defaulted('overrides', {}),\n schema$y(),\n output$1('placement', placement$3)\n ];\n\n const adt$7 = Adt.generate([\n { screen: ['point'] },\n {\n absolute: [\n 'point',\n 'scrollLeft',\n 'scrollTop'\n ]\n }\n ]);\n const toFixed = pos => pos.fold(identity, (point, scrollLeft, scrollTop) => point.translate(-scrollLeft, -scrollTop));\n const toAbsolute = pos => pos.fold(identity, identity);\n const sum = points => foldl(points, (b, a) => b.translate(a.left, a.top), SugarPosition(0, 0));\n const sumAsFixed = positions => {\n const points = map$2(positions, toFixed);\n return sum(points);\n };\n const sumAsAbsolute = positions => {\n const points = map$2(positions, toAbsolute);\n return sum(points);\n };\n const screen = adt$7.screen;\n const absolute$1 = adt$7.absolute;\n\n const getOffset = (component, origin, anchorInfo) => {\n const win = defaultView(anchorInfo.root).dom;\n const hasSameOwner = frame => {\n const frameOwner = owner$4(frame);\n const compOwner = owner$4(component.element);\n return eq(frameOwner, compOwner);\n };\n return Optional.from(win.frameElement).map(SugarElement.fromDom).filter(hasSameOwner).map(absolute$3);\n };\n const getRootPoint = (component, origin, anchorInfo) => {\n const doc = owner$4(component.element);\n const outerScroll = get$c(doc);\n const offset = getOffset(component, origin, anchorInfo).getOr(outerScroll);\n return absolute$1(offset, outerScroll.left, outerScroll.top);\n };\n\n const getBox = (left, top, width, height) => {\n const point = screen(SugarPosition(left, top));\n return Optional.some(pointed(point, width, height));\n };\n const calcNewAnchor = (optBox, rootPoint, anchorInfo, origin, elem) => optBox.map(box => {\n const points = [\n rootPoint,\n box.point\n ];\n const topLeft = cata$1(origin, () => sumAsAbsolute(points), () => sumAsAbsolute(points), () => sumAsFixed(points));\n const anchorBox = rect(topLeft.left, topLeft.top, box.width, box.height);\n const layoutsLtr = anchorInfo.showAbove ? aboveOrBelow() : belowOrAbove();\n const layoutsRtl = anchorInfo.showAbove ? aboveOrBelowRtl() : belowOrAboveRtl();\n const layouts = get$6(elem, anchorInfo, layoutsLtr, layoutsRtl, layoutsLtr, layoutsRtl, Optional.none());\n return nu$4({\n anchorBox,\n bubble: anchorInfo.bubble.getOr(fallback()),\n overrides: anchorInfo.overrides,\n layouts\n });\n });\n\n const placement$2 = (component, anchorInfo, origin) => {\n const rootPoint = getRootPoint(component, origin, anchorInfo);\n return anchorInfo.node.filter(inBody).bind(target => {\n const rect = target.dom.getBoundingClientRect();\n const nodeBox = getBox(rect.left, rect.top, rect.width, rect.height);\n const elem = anchorInfo.node.getOr(component.element);\n return calcNewAnchor(nodeBox, rootPoint, anchorInfo, origin, elem);\n });\n };\n var NodeAnchor = [\n required$1('node'),\n required$1('root'),\n option$3('bubble'),\n schema$y(),\n defaulted('overrides', {}),\n defaulted('showAbove', false),\n output$1('placement', placement$2)\n ];\n\n const zeroWidth = '\\uFEFF';\n const nbsp = '\\xA0';\n\n const create$3 = (start, soffset, finish, foffset) => ({\n start,\n soffset,\n finish,\n foffset\n });\n const SimRange = { create: create$3 };\n\n const adt$6 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n const cata = (subject, onBefore, onOn, onAfter) => subject.fold(onBefore, onOn, onAfter);\n const getStart$1 = situ => situ.fold(identity, identity, identity);\n const before = adt$6.before;\n const on$1 = adt$6.on;\n const after$1 = adt$6.after;\n const Situ = {\n before,\n on: on$1,\n after: after$1,\n cata,\n getStart: getStart$1\n };\n\n const adt$5 = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const exactFromRange = simRange => adt$5.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n const getStart = selection => selection.match({\n domRange: rng => SugarElement.fromDom(rng.startContainer),\n relative: (startSitu, _finishSitu) => Situ.getStart(startSitu),\n exact: (start, _soffset, _finish, _foffset) => start\n });\n const domRange = adt$5.domRange;\n const relative = adt$5.relative;\n const exact = adt$5.exact;\n const getWin = selection => {\n const start = getStart(selection);\n return defaultView(start);\n };\n const range$1 = SimRange.create;\n const SimSelection = {\n domRange,\n relative,\n exact,\n exactFromRange,\n getWin,\n range: range$1\n };\n\n const setStart = (rng, situ) => {\n situ.fold(e => {\n rng.setStartBefore(e.dom);\n }, (e, o) => {\n rng.setStart(e.dom, o);\n }, e => {\n rng.setStartAfter(e.dom);\n });\n };\n const setFinish = (rng, situ) => {\n situ.fold(e => {\n rng.setEndBefore(e.dom);\n }, (e, o) => {\n rng.setEnd(e.dom, o);\n }, e => {\n rng.setEndAfter(e.dom);\n });\n };\n const relativeToNative = (win, startSitu, finishSitu) => {\n const range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n const exactToNative = (win, start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n const toRect = rect => ({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height\n });\n const getFirstRect$1 = rng => {\n const rects = rng.getClientRects();\n const rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n };\n const getBounds$2 = rng => {\n const rect = rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n };\n\n const adt$4 = Adt.generate([\n {\n ltr: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n },\n {\n rtl: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const fromRange = (win, type, range) => type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset);\n const getRanges = (win, selection) => selection.match({\n domRange: rng => {\n return {\n ltr: constant$1(rng),\n rtl: Optional.none\n };\n },\n relative: (startSitu, finishSitu) => {\n return {\n ltr: cached(() => relativeToNative(win, startSitu, finishSitu)),\n rtl: cached(() => Optional.some(relativeToNative(win, finishSitu, startSitu)))\n };\n },\n exact: (start, soffset, finish, foffset) => {\n return {\n ltr: cached(() => exactToNative(win, start, soffset, finish, foffset)),\n rtl: cached(() => Optional.some(exactToNative(win, finish, foffset, start, soffset)))\n };\n }\n });\n const doDiagnose = (win, ranges) => {\n const rng = ranges.ltr();\n if (rng.collapsed) {\n const reversed = ranges.rtl().filter(rev => rev.collapsed === false);\n return reversed.map(rev => adt$4.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset)).getOrThunk(() => fromRange(win, adt$4.ltr, rng));\n } else {\n return fromRange(win, adt$4.ltr, rng);\n }\n };\n const diagnose = (win, selection) => {\n const ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n const asLtrRange = (win, selection) => {\n const diagnosis = diagnose(win, selection);\n return diagnosis.match({\n ltr: (start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n },\n rtl: (start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(finish.dom, foffset);\n rng.setEnd(start.dom, soffset);\n return rng;\n }\n });\n };\n adt$4.ltr;\n adt$4.rtl;\n\n const ancestors = (scope, predicate, isRoot) => filter$2(parents(scope, isRoot), predicate);\n\n const descendants = (scope, selector) => all$3(selector, scope);\n\n const makeRange = (start, soffset, finish, foffset) => {\n const doc = owner$4(start);\n const rng = doc.dom.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n const after = (start, soffset, finish, foffset) => {\n const r = makeRange(start, soffset, finish, foffset);\n const same = eq(start, finish) && soffset === foffset;\n return r.collapsed && !same;\n };\n\n const getNativeSelection = win => Optional.from(win.getSelection());\n const readRange = selection => {\n if (selection.rangeCount > 0) {\n const firstRng = selection.getRangeAt(0);\n const lastRng = selection.getRangeAt(selection.rangeCount - 1);\n return Optional.some(SimRange.create(SugarElement.fromDom(firstRng.startContainer), firstRng.startOffset, SugarElement.fromDom(lastRng.endContainer), lastRng.endOffset));\n } else {\n return Optional.none();\n }\n };\n const doGetExact = selection => {\n if (selection.anchorNode === null || selection.focusNode === null) {\n return readRange(selection);\n } else {\n const anchor = SugarElement.fromDom(selection.anchorNode);\n const focus = SugarElement.fromDom(selection.focusNode);\n return after(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Optional.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);\n }\n };\n const getExact = win => getNativeSelection(win).filter(sel => sel.rangeCount > 0).bind(doGetExact);\n const getFirstRect = (win, selection) => {\n const rng = asLtrRange(win, selection);\n return getFirstRect$1(rng);\n };\n const getBounds$1 = (win, selection) => {\n const rng = asLtrRange(win, selection);\n return getBounds$2(rng);\n };\n\n const NodeValue = (is, name) => {\n const get = element => {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n const set = (element, value) => {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom.nodeValue = value;\n };\n return {\n get,\n getOption,\n set\n };\n };\n\n const api = NodeValue(isText, 'text');\n const get$5 = element => api.get(element);\n\n const point = (element, offset) => ({\n element,\n offset\n });\n const descendOnce$1 = (element, offset) => {\n const children$1 = children(element);\n if (children$1.length === 0) {\n return point(element, offset);\n } else if (offset < children$1.length) {\n return point(children$1[offset], 0);\n } else {\n const last = children$1[children$1.length - 1];\n const len = isText(last) ? get$5(last).length : children(last).length;\n return point(last, len);\n }\n };\n\n const descendOnce = (element, offset) => isText(element) ? point(element, offset) : descendOnce$1(element, offset);\n const isSimRange = detail => detail.foffset !== undefined;\n const getAnchorSelection = (win, anchorInfo) => {\n const getSelection = anchorInfo.getSelection.getOrThunk(() => () => getExact(win));\n return getSelection().map(sel => {\n if (isSimRange(sel)) {\n const modStart = descendOnce(sel.start, sel.soffset);\n const modFinish = descendOnce(sel.finish, sel.foffset);\n return SimSelection.range(modStart.element, modStart.offset, modFinish.element, modFinish.offset);\n } else {\n return sel;\n }\n });\n };\n const placement$1 = (component, anchorInfo, origin) => {\n const win = defaultView(anchorInfo.root).dom;\n const rootPoint = getRootPoint(component, origin, anchorInfo);\n const selectionBox = getAnchorSelection(win, anchorInfo).bind(sel => {\n if (isSimRange(sel)) {\n const optRect = getBounds$1(win, SimSelection.exactFromRange(sel)).orThunk(() => {\n const zeroWidth$1 = SugarElement.fromText(zeroWidth);\n before$1(sel.start, zeroWidth$1);\n const rect = getFirstRect(win, SimSelection.exact(zeroWidth$1, 0, zeroWidth$1, 1));\n remove$6(zeroWidth$1);\n return rect;\n });\n return optRect.bind(rawRect => {\n return getBox(rawRect.left, rawRect.top, rawRect.width, rawRect.height);\n });\n } else {\n const selectionRect = map$1(sel, cell => cell.dom.getBoundingClientRect());\n const bounds = {\n left: Math.min(selectionRect.firstCell.left, selectionRect.lastCell.left),\n right: Math.max(selectionRect.firstCell.right, selectionRect.lastCell.right),\n top: Math.min(selectionRect.firstCell.top, selectionRect.lastCell.top),\n bottom: Math.max(selectionRect.firstCell.bottom, selectionRect.lastCell.bottom)\n };\n return getBox(bounds.left, bounds.top, bounds.right - bounds.left, bounds.bottom - bounds.top);\n }\n });\n const targetElement = getAnchorSelection(win, anchorInfo).bind(sel => {\n if (isSimRange(sel)) {\n return isElement$1(sel.start) ? Optional.some(sel.start) : parentElement(sel.start);\n } else {\n return Optional.some(sel.firstCell);\n }\n });\n const elem = targetElement.getOr(component.element);\n return calcNewAnchor(selectionBox, rootPoint, anchorInfo, origin, elem);\n };\n var SelectionAnchor = [\n option$3('getSelection'),\n required$1('root'),\n option$3('bubble'),\n schema$y(),\n defaulted('overrides', {}),\n defaulted('showAbove', false),\n output$1('placement', placement$1)\n ];\n\n const labelPrefix$1 = 'link-layout';\n const eastX = anchor => anchor.x + anchor.width;\n const westX = (anchor, element) => anchor.x - element.width;\n const northY$1 = (anchor, element) => anchor.y - element.height + anchor.height;\n const southY$1 = anchor => anchor.y;\n const southeast$1 = (anchor, element, bubbles) => nu$6(eastX(anchor), southY$1(anchor), bubbles.southeast(), southeast$3(), 'southeast', boundsRestriction(anchor, {\n left: 0,\n top: 2\n }), labelPrefix$1);\n const southwest$1 = (anchor, element, bubbles) => nu$6(westX(anchor, element), southY$1(anchor), bubbles.southwest(), southwest$3(), 'southwest', boundsRestriction(anchor, {\n right: 1,\n top: 2\n }), labelPrefix$1);\n const northeast$1 = (anchor, element, bubbles) => nu$6(eastX(anchor), northY$1(anchor, element), bubbles.northeast(), northeast$3(), 'northeast', boundsRestriction(anchor, {\n left: 0,\n bottom: 3\n }), labelPrefix$1);\n const northwest$1 = (anchor, element, bubbles) => nu$6(westX(anchor, element), northY$1(anchor, element), bubbles.northwest(), northwest$3(), 'northwest', boundsRestriction(anchor, {\n right: 1,\n bottom: 3\n }), labelPrefix$1);\n const all = () => [\n southeast$1,\n southwest$1,\n northeast$1,\n northwest$1\n ];\n const allRtl = () => [\n southwest$1,\n southeast$1,\n northwest$1,\n northeast$1\n ];\n\n const placement = (component, submenuInfo, origin) => {\n const anchorBox = toBox(origin, submenuInfo.item.element);\n const layouts = get$6(component.element, submenuInfo, all(), allRtl(), all(), allRtl(), Optional.none());\n return Optional.some(nu$4({\n anchorBox,\n bubble: fallback(),\n overrides: submenuInfo.overrides,\n layouts\n }));\n };\n var SubmenuAnchor = [\n required$1('item'),\n schema$y(),\n defaulted('overrides', {}),\n output$1('placement', placement)\n ];\n\n var AnchorSchema = choose$1('type', {\n selection: SelectionAnchor,\n node: NodeAnchor,\n hotspot: HotspotAnchor,\n submenu: SubmenuAnchor,\n makeshift: MakeshiftAnchor\n });\n\n const TransitionSchema = [\n requiredArrayOf('classes', string),\n defaultedStringEnum('mode', 'all', [\n 'all',\n 'layout',\n 'placement'\n ])\n ];\n const PositionSchema = [\n defaulted('useFixed', never),\n option$3('getBounds')\n ];\n const PlacementSchema = [\n requiredOf('anchor', AnchorSchema),\n optionObjOf('transition', TransitionSchema)\n ];\n\n const getFixedOrigin = () => {\n const html = document.documentElement;\n return fixed$1(0, 0, html.clientWidth, html.clientHeight);\n };\n const getRelativeOrigin = component => {\n const position = absolute$3(component.element);\n const bounds = component.element.dom.getBoundingClientRect();\n return relative$1(position.left, position.top, bounds.width, bounds.height);\n };\n const place = (origin, anchoring, optBounds, placee, lastPlace, transition) => {\n const anchor = box(anchoring.anchorBox, origin);\n return simple(anchor, placee.element, anchoring.bubble, anchoring.layouts, lastPlace, optBounds, anchoring.overrides, transition);\n };\n const position$1 = (component, posConfig, posState, placee, placementSpec) => {\n const optWithinBounds = Optional.none();\n positionWithinBounds(component, posConfig, posState, placee, placementSpec, optWithinBounds);\n };\n const positionWithinBounds = (component, posConfig, posState, placee, placementSpec, optWithinBounds) => {\n const placeeDetail = asRawOrDie$1('placement.info', objOf(PlacementSchema), placementSpec);\n const anchorage = placeeDetail.anchor;\n const element = placee.element;\n const placeeState = posState.get(placee.uid);\n preserve$1(() => {\n set$8(element, 'position', 'fixed');\n const oldVisibility = getRaw(element, 'visibility');\n set$8(element, 'visibility', 'hidden');\n const origin = posConfig.useFixed() ? getFixedOrigin() : getRelativeOrigin(component);\n anchorage.placement(component, anchorage, origin).each(anchoring => {\n const optBounds = optWithinBounds.orThunk(() => posConfig.getBounds.map(apply$1));\n const newState = place(origin, anchoring, optBounds, placee, placeeState, placeeDetail.transition);\n posState.set(placee.uid, newState);\n });\n oldVisibility.fold(() => {\n remove$7(element, 'visibility');\n }, vis => {\n set$8(element, 'visibility', vis);\n });\n if (getRaw(element, 'left').isNone() && getRaw(element, 'top').isNone() && getRaw(element, 'right').isNone() && getRaw(element, 'bottom').isNone() && is$1(getRaw(element, 'position'), 'fixed')) {\n remove$7(element, 'position');\n }\n }, element);\n };\n const getMode = (component, pConfig, _pState) => pConfig.useFixed() ? 'fixed' : 'absolute';\n const reset = (component, pConfig, posState, placee) => {\n const element = placee.element;\n each$1([\n 'position',\n 'left',\n 'right',\n 'top',\n 'bottom'\n ], prop => remove$7(element, prop));\n reset$1(element);\n posState.clear(placee.uid);\n };\n\n var PositionApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n position: position$1,\n positionWithinBounds: positionWithinBounds,\n getMode: getMode,\n reset: reset\n });\n\n const init$f = () => {\n let state = {};\n const set = (id, data) => {\n state[id] = data;\n };\n const get = id => get$h(state, id);\n const clear = id => {\n if (isNonNullable(id)) {\n delete state[id];\n } else {\n state = {};\n }\n };\n return nu$7({\n readState: () => state,\n clear,\n set,\n get\n });\n };\n\n var PositioningState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$f\n });\n\n const Positioning = create$4({\n fields: PositionSchema,\n name: 'positioning',\n active: ActivePosition,\n apis: PositionApis,\n state: PositioningState\n });\n\n const isConnected = comp => comp.getSystem().isConnected();\n const fireDetaching = component => {\n emit(component, detachedFromDom());\n const children = component.components();\n each$1(children, fireDetaching);\n };\n const fireAttaching = component => {\n const children = component.components();\n each$1(children, fireAttaching);\n emit(component, attachedToDom());\n };\n const virtualAttach = (parent, child) => {\n parent.getSystem().addToWorld(child);\n if (inBody(parent.element)) {\n fireAttaching(child);\n }\n };\n const virtualDetach = comp => {\n fireDetaching(comp);\n comp.getSystem().removeFromWorld(comp);\n };\n const attach$1 = (parent, child) => {\n append$2(parent.element, child.element);\n };\n const detachChildren$1 = component => {\n each$1(component.components(), childComp => remove$6(childComp.element));\n empty(component.element);\n component.syncComponents();\n };\n const replaceChildren = (component, newSpecs, buildNewChildren) => {\n const subs = component.components();\n detachChildren$1(component);\n const newChildren = buildNewChildren(newSpecs);\n const deleted = difference(subs, newChildren);\n each$1(deleted, comp => {\n fireDetaching(comp);\n component.getSystem().removeFromWorld(comp);\n });\n each$1(newChildren, childComp => {\n if (!isConnected(childComp)) {\n component.getSystem().addToWorld(childComp);\n attach$1(component, childComp);\n if (inBody(component.element)) {\n fireAttaching(childComp);\n }\n } else {\n attach$1(component, childComp);\n }\n });\n component.syncComponents();\n };\n const virtualReplaceChildren = (component, newSpecs, buildNewChildren) => {\n const subs = component.components();\n const existingComps = bind$3(newSpecs, spec => getPremade(spec).toArray());\n each$1(subs, childComp => {\n if (!contains$2(existingComps, childComp)) {\n virtualDetach(childComp);\n }\n });\n const newChildren = buildNewChildren(newSpecs);\n const deleted = difference(subs, newChildren);\n each$1(deleted, deletedComp => {\n if (isConnected(deletedComp)) {\n virtualDetach(deletedComp);\n }\n });\n each$1(newChildren, childComp => {\n if (!isConnected(childComp)) {\n virtualAttach(component, childComp);\n }\n });\n component.syncComponents();\n };\n\n const attach = (parent, child) => {\n attachWith(parent, child, append$2);\n };\n const attachWith = (parent, child, insertion) => {\n parent.getSystem().addToWorld(child);\n insertion(parent.element, child.element);\n if (inBody(parent.element)) {\n fireAttaching(child);\n }\n parent.syncComponents();\n };\n const doDetach = component => {\n fireDetaching(component);\n remove$6(component.element);\n component.getSystem().removeFromWorld(component);\n };\n const detach = component => {\n const parent$1 = parent(component.element).bind(p => component.getSystem().getByDom(p).toOptional());\n doDetach(component);\n parent$1.each(p => {\n p.syncComponents();\n });\n };\n const detachChildren = component => {\n const subs = component.components();\n each$1(subs, doDetach);\n empty(component.element);\n component.syncComponents();\n };\n const attachSystem = (element, guiSystem) => {\n attachSystemWith(element, guiSystem, append$2);\n };\n const attachSystemAfter = (element, guiSystem) => {\n attachSystemWith(element, guiSystem, after$2);\n };\n const attachSystemWith = (element, guiSystem, inserter) => {\n inserter(element, guiSystem.element);\n const children$1 = children(guiSystem.element);\n each$1(children$1, child => {\n guiSystem.getByDom(child).each(fireAttaching);\n });\n };\n const detachSystem = guiSystem => {\n const children$1 = children(guiSystem.element);\n each$1(children$1, child => {\n guiSystem.getByDom(child).each(fireDetaching);\n });\n remove$6(guiSystem.element);\n };\n\n const rebuild = (sandbox, sConfig, sState, data) => {\n sState.get().each(_data => {\n detachChildren(sandbox);\n });\n const point = sConfig.getAttachPoint(sandbox);\n attach(point, sandbox);\n const built = sandbox.getSystem().build(data);\n attach(sandbox, built);\n sState.set(built);\n return built;\n };\n const open$1 = (sandbox, sConfig, sState, data) => {\n const newState = rebuild(sandbox, sConfig, sState, data);\n sConfig.onOpen(sandbox, newState);\n return newState;\n };\n const setContent = (sandbox, sConfig, sState, data) => sState.get().map(() => rebuild(sandbox, sConfig, sState, data));\n const openWhileCloaked = (sandbox, sConfig, sState, data, transaction) => {\n cloak(sandbox, sConfig);\n open$1(sandbox, sConfig, sState, data);\n transaction();\n decloak(sandbox, sConfig);\n };\n const close$1 = (sandbox, sConfig, sState) => {\n sState.get().each(data => {\n detachChildren(sandbox);\n detach(sandbox);\n sConfig.onClose(sandbox, data);\n sState.clear();\n });\n };\n const isOpen$1 = (_sandbox, _sConfig, sState) => sState.isOpen();\n const isPartOf = (sandbox, sConfig, sState, queryElem) => isOpen$1(sandbox, sConfig, sState) && sState.get().exists(data => sConfig.isPartOf(sandbox, data, queryElem));\n const getState$2 = (_sandbox, _sConfig, sState) => sState.get();\n const store = (sandbox, cssKey, attr, newValue) => {\n getRaw(sandbox.element, cssKey).fold(() => {\n remove$8(sandbox.element, attr);\n }, v => {\n set$9(sandbox.element, attr, v);\n });\n set$8(sandbox.element, cssKey, newValue);\n };\n const restore = (sandbox, cssKey, attr) => {\n getOpt(sandbox.element, attr).fold(() => remove$7(sandbox.element, cssKey), oldValue => set$8(sandbox.element, cssKey, oldValue));\n };\n const cloak = (sandbox, sConfig, _sState) => {\n const sink = sConfig.getAttachPoint(sandbox);\n set$8(sandbox.element, 'position', Positioning.getMode(sink));\n store(sandbox, 'visibility', sConfig.cloakVisibilityAttr, 'hidden');\n };\n const hasPosition = element => exists([\n 'top',\n 'left',\n 'right',\n 'bottom'\n ], pos => getRaw(element, pos).isSome());\n const decloak = (sandbox, sConfig, _sState) => {\n if (!hasPosition(sandbox.element)) {\n remove$7(sandbox.element, 'position');\n }\n restore(sandbox, 'visibility', sConfig.cloakVisibilityAttr);\n };\n\n var SandboxApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n cloak: cloak,\n decloak: decloak,\n open: open$1,\n openWhileCloaked: openWhileCloaked,\n close: close$1,\n isOpen: isOpen$1,\n isPartOf: isPartOf,\n getState: getState$2,\n setContent: setContent\n });\n\n const events$f = (sandboxConfig, sandboxState) => derive$2([run$1(sandboxClose(), (sandbox, _simulatedEvent) => {\n close$1(sandbox, sandboxConfig, sandboxState);\n })]);\n\n var ActiveSandbox = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$f\n });\n\n var SandboxSchema = [\n onHandler('onOpen'),\n onHandler('onClose'),\n required$1('isPartOf'),\n required$1('getAttachPoint'),\n defaulted('cloakVisibilityAttr', 'data-precloak-visibility')\n ];\n\n const init$e = () => {\n const contents = value$4();\n const readState = constant$1('not-implemented');\n return nu$7({\n readState,\n isOpen: contents.isSet,\n clear: contents.clear,\n set: contents.set,\n get: contents.get\n });\n };\n\n var SandboxState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$e\n });\n\n const Sandboxing = create$4({\n fields: SandboxSchema,\n name: 'sandboxing',\n active: ActiveSandbox,\n apis: SandboxApis,\n state: SandboxState\n });\n\n const dismissPopups = constant$1('dismiss.popups');\n const repositionPopups = constant$1('reposition.popups');\n const mouseReleased = constant$1('mouse.released');\n\n const schema$x = objOfOnly([\n defaulted('isExtraPart', never),\n optionObjOf('fireEventInstead', [defaulted('event', dismissRequested())])\n ]);\n const receivingChannel$1 = rawSpec => {\n const detail = asRawOrDie$1('Dismissal', schema$x, rawSpec);\n return {\n [dismissPopups()]: {\n schema: objOfOnly([required$1('target')]),\n onReceive: (sandbox, data) => {\n if (Sandboxing.isOpen(sandbox)) {\n const isPart = Sandboxing.isPartOf(sandbox, data.target) || detail.isExtraPart(sandbox, data.target);\n if (!isPart) {\n detail.fireEventInstead.fold(() => Sandboxing.close(sandbox), fe => emit(sandbox, fe.event));\n }\n }\n }\n }\n };\n };\n\n const schema$w = objOfOnly([\n optionObjOf('fireEventInstead', [defaulted('event', repositionRequested())]),\n requiredFunction('doReposition')\n ]);\n const receivingChannel = rawSpec => {\n const detail = asRawOrDie$1('Reposition', schema$w, rawSpec);\n return {\n [repositionPopups()]: {\n onReceive: sandbox => {\n if (Sandboxing.isOpen(sandbox)) {\n detail.fireEventInstead.fold(() => detail.doReposition(sandbox), fe => emit(sandbox, fe.event));\n }\n }\n }\n };\n };\n\n const onLoad$5 = (component, repConfig, repState) => {\n repConfig.store.manager.onLoad(component, repConfig, repState);\n };\n const onUnload$2 = (component, repConfig, repState) => {\n repConfig.store.manager.onUnload(component, repConfig, repState);\n };\n const setValue$3 = (component, repConfig, repState, data) => {\n repConfig.store.manager.setValue(component, repConfig, repState, data);\n };\n const getValue$3 = (component, repConfig, repState) => repConfig.store.manager.getValue(component, repConfig, repState);\n const getState$1 = (component, repConfig, repState) => repState;\n\n var RepresentApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n onLoad: onLoad$5,\n onUnload: onUnload$2,\n setValue: setValue$3,\n getValue: getValue$3,\n getState: getState$1\n });\n\n const events$e = (repConfig, repState) => {\n const es = repConfig.resetOnDom ? [\n runOnAttached((comp, _se) => {\n onLoad$5(comp, repConfig, repState);\n }),\n runOnDetached((comp, _se) => {\n onUnload$2(comp, repConfig, repState);\n })\n ] : [loadEvent(repConfig, repState, onLoad$5)];\n return derive$2(es);\n };\n\n var ActiveRepresenting = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$e\n });\n\n const memory$1 = () => {\n const data = Cell(null);\n const readState = () => ({\n mode: 'memory',\n value: data.get()\n });\n const isNotSet = () => data.get() === null;\n const clear = () => {\n data.set(null);\n };\n return nu$7({\n set: data.set,\n get: data.get,\n isNotSet,\n clear,\n readState\n });\n };\n const manual = () => {\n const readState = noop;\n return nu$7({ readState });\n };\n const dataset = () => {\n const dataByValue = Cell({});\n const dataByText = Cell({});\n const readState = () => ({\n mode: 'dataset',\n dataByValue: dataByValue.get(),\n dataByText: dataByText.get()\n });\n const clear = () => {\n dataByValue.set({});\n dataByText.set({});\n };\n const lookup = itemString => get$h(dataByValue.get(), itemString).orThunk(() => get$h(dataByText.get(), itemString));\n const update = items => {\n const currentDataByValue = dataByValue.get();\n const currentDataByText = dataByText.get();\n const newDataByValue = {};\n const newDataByText = {};\n each$1(items, item => {\n newDataByValue[item.value] = item;\n get$h(item, 'meta').each(meta => {\n get$h(meta, 'text').each(text => {\n newDataByText[text] = item;\n });\n });\n });\n dataByValue.set({\n ...currentDataByValue,\n ...newDataByValue\n });\n dataByText.set({\n ...currentDataByText,\n ...newDataByText\n });\n };\n return nu$7({\n readState,\n lookup,\n update,\n clear\n });\n };\n const init$d = spec => spec.store.manager.state(spec);\n\n var RepresentState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n memory: memory$1,\n dataset: dataset,\n manual: manual,\n init: init$d\n });\n\n const setValue$2 = (component, repConfig, repState, data) => {\n const store = repConfig.store;\n repState.update([data]);\n store.setValue(component, data);\n repConfig.onSetValue(component, data);\n };\n const getValue$2 = (component, repConfig, repState) => {\n const store = repConfig.store;\n const key = store.getDataKey(component);\n return repState.lookup(key).getOrThunk(() => store.getFallbackEntry(key));\n };\n const onLoad$4 = (component, repConfig, repState) => {\n const store = repConfig.store;\n store.initialValue.each(data => {\n setValue$2(component, repConfig, repState, data);\n });\n };\n const onUnload$1 = (component, repConfig, repState) => {\n repState.clear();\n };\n var DatasetStore = [\n option$3('initialValue'),\n required$1('getFallbackEntry'),\n required$1('getDataKey'),\n required$1('setValue'),\n output$1('manager', {\n setValue: setValue$2,\n getValue: getValue$2,\n onLoad: onLoad$4,\n onUnload: onUnload$1,\n state: dataset\n })\n ];\n\n const getValue$1 = (component, repConfig, _repState) => repConfig.store.getValue(component);\n const setValue$1 = (component, repConfig, _repState, data) => {\n repConfig.store.setValue(component, data);\n repConfig.onSetValue(component, data);\n };\n const onLoad$3 = (component, repConfig, _repState) => {\n repConfig.store.initialValue.each(data => {\n repConfig.store.setValue(component, data);\n });\n };\n var ManualStore = [\n required$1('getValue'),\n defaulted('setValue', noop),\n option$3('initialValue'),\n output$1('manager', {\n setValue: setValue$1,\n getValue: getValue$1,\n onLoad: onLoad$3,\n onUnload: noop,\n state: NoState.init\n })\n ];\n\n const setValue = (component, repConfig, repState, data) => {\n repState.set(data);\n repConfig.onSetValue(component, data);\n };\n const getValue = (component, repConfig, repState) => repState.get();\n const onLoad$2 = (component, repConfig, repState) => {\n repConfig.store.initialValue.each(initVal => {\n if (repState.isNotSet()) {\n repState.set(initVal);\n }\n });\n };\n const onUnload = (component, repConfig, repState) => {\n repState.clear();\n };\n var MemoryStore = [\n option$3('initialValue'),\n output$1('manager', {\n setValue,\n getValue,\n onLoad: onLoad$2,\n onUnload,\n state: memory$1\n })\n ];\n\n var RepresentSchema = [\n defaultedOf('store', { mode: 'memory' }, choose$1('mode', {\n memory: MemoryStore,\n manual: ManualStore,\n dataset: DatasetStore\n })),\n onHandler('onSetValue'),\n defaulted('resetOnDom', false)\n ];\n\n const Representing = create$4({\n fields: RepresentSchema,\n name: 'representing',\n active: ActiveRepresenting,\n apis: RepresentApis,\n extra: {\n setValueFrom: (component, source) => {\n const value = Representing.getValue(source);\n Representing.setValue(component, value);\n }\n },\n state: RepresentState\n });\n\n const field = (name, forbidden) => defaultedObjOf(name, {}, map$2(forbidden, f => forbid(f.name(), 'Cannot configure ' + f.name() + ' for ' + name)).concat([customField('dump', identity)]));\n const get$4 = data => data.dump;\n const augment = (data, original) => ({\n ...derive$1(original),\n ...data.dump\n });\n const SketchBehaviours = {\n field,\n augment,\n get: get$4\n };\n\n const _placeholder = 'placeholder';\n const adt$3 = Adt.generate([\n {\n single: [\n 'required',\n 'valueThunk'\n ]\n },\n {\n multiple: [\n 'required',\n 'valueThunks'\n ]\n }\n ]);\n const isSubstituted = spec => has$2(spec, 'uiType');\n const subPlaceholder = (owner, detail, compSpec, placeholders) => {\n if (owner.exists(o => o !== compSpec.owner)) {\n return adt$3.single(true, constant$1(compSpec));\n }\n return get$h(placeholders, compSpec.name).fold(() => {\n throw new Error('Unknown placeholder component: ' + compSpec.name + '\\nKnown: [' + keys(placeholders) + ']\\nNamespace: ' + owner.getOr('none') + '\\nSpec: ' + JSON.stringify(compSpec, null, 2));\n }, newSpec => newSpec.replace());\n };\n const scan = (owner, detail, compSpec, placeholders) => {\n if (isSubstituted(compSpec) && compSpec.uiType === _placeholder) {\n return subPlaceholder(owner, detail, compSpec, placeholders);\n } else {\n return adt$3.single(false, constant$1(compSpec));\n }\n };\n const substitute = (owner, detail, compSpec, placeholders) => {\n const base = scan(owner, detail, compSpec, placeholders);\n return base.fold((req, valueThunk) => {\n const value = isSubstituted(compSpec) ? valueThunk(detail, compSpec.config, compSpec.validated) : valueThunk(detail);\n const childSpecs = get$h(value, 'components').getOr([]);\n const substituted = bind$3(childSpecs, c => substitute(owner, detail, c, placeholders));\n return [{\n ...value,\n components: substituted\n }];\n }, (req, valuesThunk) => {\n if (isSubstituted(compSpec)) {\n const values = valuesThunk(detail, compSpec.config, compSpec.validated);\n const preprocessor = compSpec.validated.preprocess.getOr(identity);\n return preprocessor(values);\n } else {\n return valuesThunk(detail);\n }\n });\n };\n const substituteAll = (owner, detail, components, placeholders) => bind$3(components, c => substitute(owner, detail, c, placeholders));\n const oneReplace = (label, replacements) => {\n let called = false;\n const used = () => called;\n const replace = () => {\n if (called) {\n throw new Error('Trying to use the same placeholder more than once: ' + label);\n }\n called = true;\n return replacements;\n };\n const required = () => replacements.fold((req, _) => req, (req, _) => req);\n return {\n name: constant$1(label),\n required,\n used,\n replace\n };\n };\n const substitutePlaces = (owner, detail, components, placeholders) => {\n const ps = map$1(placeholders, (ph, name) => oneReplace(name, ph));\n const outcome = substituteAll(owner, detail, components, ps);\n each(ps, p => {\n if (p.used() === false && p.required()) {\n throw new Error('Placeholder: ' + p.name() + ' was not found in components list\\nNamespace: ' + owner.getOr('none') + '\\nComponents: ' + JSON.stringify(detail.components, null, 2));\n }\n });\n return outcome;\n };\n const single$2 = adt$3.single;\n const multiple = adt$3.multiple;\n const placeholder = constant$1(_placeholder);\n\n const adt$2 = Adt.generate([\n { required: ['data'] },\n { external: ['data'] },\n { optional: ['data'] },\n { group: ['data'] }\n ]);\n const fFactory = defaulted('factory', { sketch: identity });\n const fSchema = defaulted('schema', []);\n const fName = required$1('name');\n const fPname = field$1('pname', 'pname', defaultedThunk(typeSpec => ''), anyValue());\n const fGroupSchema = customField('schema', () => [option$3('preprocess')]);\n const fDefaults = defaulted('defaults', constant$1({}));\n const fOverrides = defaulted('overrides', constant$1({}));\n const requiredSpec = objOf([\n fFactory,\n fSchema,\n fName,\n fPname,\n fDefaults,\n fOverrides\n ]);\n const externalSpec = objOf([\n fFactory,\n fSchema,\n fName,\n fDefaults,\n fOverrides\n ]);\n const optionalSpec = objOf([\n fFactory,\n fSchema,\n fName,\n fPname,\n fDefaults,\n fOverrides\n ]);\n const groupSpec = objOf([\n fFactory,\n fGroupSchema,\n fName,\n required$1('unit'),\n fPname,\n fDefaults,\n fOverrides\n ]);\n const asNamedPart = part => {\n return part.fold(Optional.some, Optional.none, Optional.some, Optional.some);\n };\n const name$2 = part => {\n const get = data => data.name;\n return part.fold(get, get, get, get);\n };\n const asCommon = part => {\n return part.fold(identity, identity, identity, identity);\n };\n const convert = (adtConstructor, partSchema) => spec => {\n const data = asRawOrDie$1('Converting part type', partSchema, spec);\n return adtConstructor(data);\n };\n const required = convert(adt$2.required, requiredSpec);\n const external = convert(adt$2.external, externalSpec);\n const optional = convert(adt$2.optional, optionalSpec);\n const group = convert(adt$2.group, groupSpec);\n const original = constant$1('entirety');\n\n var PartType = /*#__PURE__*/Object.freeze({\n __proto__: null,\n required: required,\n external: external,\n optional: optional,\n group: group,\n asNamedPart: asNamedPart,\n name: name$2,\n asCommon: asCommon,\n original: original\n });\n\n const combine = (detail, data, partSpec, partValidated) => deepMerge(data.defaults(detail, partSpec, partValidated), partSpec, { uid: detail.partUids[data.name] }, data.overrides(detail, partSpec, partValidated));\n const subs = (owner, detail, parts) => {\n const internals = {};\n const externals = {};\n each$1(parts, part => {\n part.fold(data => {\n internals[data.pname] = single$2(true, (detail, partSpec, partValidated) => data.factory.sketch(combine(detail, data, partSpec, partValidated)));\n }, data => {\n const partSpec = detail.parts[data.name];\n externals[data.name] = constant$1(data.factory.sketch(combine(detail, data, partSpec[original()]), partSpec));\n }, data => {\n internals[data.pname] = single$2(false, (detail, partSpec, partValidated) => data.factory.sketch(combine(detail, data, partSpec, partValidated)));\n }, data => {\n internals[data.pname] = multiple(true, (detail, _partSpec, _partValidated) => {\n const units = detail[data.name];\n return map$2(units, u => data.factory.sketch(deepMerge(data.defaults(detail, u, _partValidated), u, data.overrides(detail, u))));\n });\n });\n });\n return {\n internals: constant$1(internals),\n externals: constant$1(externals)\n };\n };\n\n const generate$3 = (owner, parts) => {\n const r = {};\n each$1(parts, part => {\n asNamedPart(part).each(np => {\n const g = doGenerateOne(owner, np.pname);\n r[np.name] = config => {\n const validated = asRawOrDie$1('Part: ' + np.name + ' in ' + owner, objOf(np.schema), config);\n return {\n ...g,\n config,\n validated\n };\n };\n });\n });\n return r;\n };\n const doGenerateOne = (owner, pname) => ({\n uiType: placeholder(),\n owner,\n name: pname\n });\n const generateOne$1 = (owner, pname, config) => ({\n uiType: placeholder(),\n owner,\n name: pname,\n config,\n validated: {}\n });\n const schemas = parts => bind$3(parts, part => part.fold(Optional.none, Optional.some, Optional.none, Optional.none).map(data => requiredObjOf(data.name, data.schema.concat([snapshot(original())]))).toArray());\n const names = parts => map$2(parts, name$2);\n const substitutes = (owner, detail, parts) => subs(owner, detail, parts);\n const components$1 = (owner, detail, internals) => substitutePlaces(Optional.some(owner), detail, detail.components, internals);\n const getPart = (component, detail, partKey) => {\n const uid = detail.partUids[partKey];\n return component.getSystem().getByUid(uid).toOptional();\n };\n const getPartOrDie = (component, detail, partKey) => getPart(component, detail, partKey).getOrDie('Could not find part: ' + partKey);\n const getParts = (component, detail, partKeys) => {\n const r = {};\n const uids = detail.partUids;\n const system = component.getSystem();\n each$1(partKeys, pk => {\n r[pk] = constant$1(system.getByUid(uids[pk]));\n });\n return r;\n };\n const getAllParts = (component, detail) => {\n const system = component.getSystem();\n return map$1(detail.partUids, (pUid, _k) => constant$1(system.getByUid(pUid)));\n };\n const getAllPartNames = detail => keys(detail.partUids);\n const getPartsOrDie = (component, detail, partKeys) => {\n const r = {};\n const uids = detail.partUids;\n const system = component.getSystem();\n each$1(partKeys, pk => {\n r[pk] = constant$1(system.getByUid(uids[pk]).getOrDie());\n });\n return r;\n };\n const defaultUids = (baseUid, partTypes) => {\n const partNames = names(partTypes);\n return wrapAll(map$2(partNames, pn => ({\n key: pn,\n value: baseUid + '-' + pn\n })));\n };\n const defaultUidsSchema = partTypes => field$1('partUids', 'partUids', mergeWithThunk(spec => defaultUids(spec.uid, partTypes)), anyValue());\n\n var AlloyParts = /*#__PURE__*/Object.freeze({\n __proto__: null,\n generate: generate$3,\n generateOne: generateOne$1,\n schemas: schemas,\n names: names,\n substitutes: substitutes,\n components: components$1,\n defaultUids: defaultUids,\n defaultUidsSchema: defaultUidsSchema,\n getAllParts: getAllParts,\n getAllPartNames: getAllPartNames,\n getPart: getPart,\n getPartOrDie: getPartOrDie,\n getParts: getParts,\n getPartsOrDie: getPartsOrDie\n });\n\n const base = (partSchemas, partUidsSchemas) => {\n const ps = partSchemas.length > 0 ? [requiredObjOf('parts', partSchemas)] : [];\n return ps.concat([\n required$1('uid'),\n defaulted('dom', {}),\n defaulted('components', []),\n snapshot('originalSpec'),\n defaulted('debug.sketcher', {})\n ]).concat(partUidsSchemas);\n };\n const asRawOrDie = (label, schema, spec, partSchemas, partUidsSchemas) => {\n const baseS = base(partSchemas, partUidsSchemas);\n return asRawOrDie$1(label + ' [SpecSchema]', objOfOnly(baseS.concat(schema)), spec);\n };\n\n const single$1 = (owner, schema, factory, spec) => {\n const specWithUid = supplyUid(spec);\n const detail = asRawOrDie(owner, schema, specWithUid, [], []);\n return factory(detail, specWithUid);\n };\n const composite$1 = (owner, schema, partTypes, factory, spec) => {\n const specWithUid = supplyUid(spec);\n const partSchemas = schemas(partTypes);\n const partUidsSchema = defaultUidsSchema(partTypes);\n const detail = asRawOrDie(owner, schema, specWithUid, partSchemas, [partUidsSchema]);\n const subs = substitutes(owner, detail, partTypes);\n const components = components$1(owner, detail, subs.internals());\n return factory(detail, components, specWithUid, subs.externals());\n };\n const hasUid = spec => has$2(spec, 'uid');\n const supplyUid = spec => {\n return hasUid(spec) ? spec : {\n ...spec,\n uid: generate$5('uid')\n };\n };\n\n const isSketchSpec = spec => {\n return spec.uid !== undefined;\n };\n const singleSchema = objOfOnly([\n required$1('name'),\n required$1('factory'),\n required$1('configFields'),\n defaulted('apis', {}),\n defaulted('extraApis', {})\n ]);\n const compositeSchema = objOfOnly([\n required$1('name'),\n required$1('factory'),\n required$1('configFields'),\n required$1('partFields'),\n defaulted('apis', {}),\n defaulted('extraApis', {})\n ]);\n const single = rawConfig => {\n const config = asRawOrDie$1('Sketcher for ' + rawConfig.name, singleSchema, rawConfig);\n const sketch = spec => single$1(config.name, config.configFields, config.factory, spec);\n const apis = map$1(config.apis, makeApi);\n const extraApis = map$1(config.extraApis, (f, k) => markAsExtraApi(f, k));\n return {\n name: config.name,\n configFields: config.configFields,\n sketch,\n ...apis,\n ...extraApis\n };\n };\n const composite = rawConfig => {\n const config = asRawOrDie$1('Sketcher for ' + rawConfig.name, compositeSchema, rawConfig);\n const sketch = spec => composite$1(config.name, config.configFields, config.partFields, config.factory, spec);\n const parts = generate$3(config.name, config.partFields);\n const apis = map$1(config.apis, makeApi);\n const extraApis = map$1(config.extraApis, (f, k) => markAsExtraApi(f, k));\n return {\n name: config.name,\n partFields: config.partFields,\n configFields: config.configFields,\n sketch,\n parts,\n ...apis,\n ...extraApis\n };\n };\n\n const inside = target => isTag('input')(target) && get$g(target, 'type') !== 'radio' || isTag('textarea')(target);\n\n const getCurrent = (component, composeConfig, _composeState) => composeConfig.find(component);\n\n var ComposeApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getCurrent: getCurrent\n });\n\n const ComposeSchema = [required$1('find')];\n\n const Composing = create$4({\n fields: ComposeSchema,\n name: 'composing',\n apis: ComposeApis\n });\n\n const nativeDisabled = [\n 'input',\n 'button',\n 'textarea',\n 'select'\n ];\n const onLoad$1 = (component, disableConfig, disableState) => {\n const f = disableConfig.disabled() ? disable : enable;\n f(component, disableConfig);\n };\n const hasNative = (component, config) => config.useNative === true && contains$2(nativeDisabled, name$3(component.element));\n const nativeIsDisabled = component => has$1(component.element, 'disabled');\n const nativeDisable = component => {\n set$9(component.element, 'disabled', 'disabled');\n };\n const nativeEnable = component => {\n remove$8(component.element, 'disabled');\n };\n const ariaIsDisabled = component => get$g(component.element, 'aria-disabled') === 'true';\n const ariaDisable = component => {\n set$9(component.element, 'aria-disabled', 'true');\n };\n const ariaEnable = component => {\n set$9(component.element, 'aria-disabled', 'false');\n };\n const disable = (component, disableConfig, _disableState) => {\n disableConfig.disableClass.each(disableClass => {\n add$2(component.element, disableClass);\n });\n const f = hasNative(component, disableConfig) ? nativeDisable : ariaDisable;\n f(component);\n disableConfig.onDisabled(component);\n };\n const enable = (component, disableConfig, _disableState) => {\n disableConfig.disableClass.each(disableClass => {\n remove$3(component.element, disableClass);\n });\n const f = hasNative(component, disableConfig) ? nativeEnable : ariaEnable;\n f(component);\n disableConfig.onEnabled(component);\n };\n const isDisabled$1 = (component, disableConfig) => hasNative(component, disableConfig) ? nativeIsDisabled(component) : ariaIsDisabled(component);\n const set$4 = (component, disableConfig, disableState, disabled) => {\n const f = disabled ? disable : enable;\n f(component, disableConfig);\n };\n\n var DisableApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n enable: enable,\n disable: disable,\n isDisabled: isDisabled$1,\n onLoad: onLoad$1,\n set: set$4\n });\n\n const exhibit$5 = (base, disableConfig) => nu$8({ classes: disableConfig.disabled() ? disableConfig.disableClass.toArray() : [] });\n const events$d = (disableConfig, disableState) => derive$2([\n abort(execute$5(), (component, _simulatedEvent) => isDisabled$1(component, disableConfig)),\n loadEvent(disableConfig, disableState, onLoad$1)\n ]);\n\n var ActiveDisable = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$5,\n events: events$d\n });\n\n var DisableSchema = [\n defaultedFunction('disabled', never),\n defaulted('useNative', true),\n option$3('disableClass'),\n onHandler('onDisabled'),\n onHandler('onEnabled')\n ];\n\n const Disabling = create$4({\n fields: DisableSchema,\n name: 'disabling',\n active: ActiveDisable,\n apis: DisableApis\n });\n\n const dehighlightAllExcept = (component, hConfig, hState, skip) => {\n const highlighted = descendants(component.element, '.' + hConfig.highlightClass);\n each$1(highlighted, h => {\n const shouldSkip = exists(skip, skipComp => eq(skipComp.element, h));\n if (!shouldSkip) {\n remove$3(h, hConfig.highlightClass);\n component.getSystem().getByDom(h).each(target => {\n hConfig.onDehighlight(component, target);\n emit(target, dehighlight$1());\n });\n }\n });\n };\n const dehighlightAll = (component, hConfig, hState) => dehighlightAllExcept(component, hConfig, hState, []);\n const dehighlight = (component, hConfig, hState, target) => {\n if (isHighlighted(component, hConfig, hState, target)) {\n remove$3(target.element, hConfig.highlightClass);\n hConfig.onDehighlight(component, target);\n emit(target, dehighlight$1());\n }\n };\n const highlight = (component, hConfig, hState, target) => {\n dehighlightAllExcept(component, hConfig, hState, [target]);\n if (!isHighlighted(component, hConfig, hState, target)) {\n add$2(target.element, hConfig.highlightClass);\n hConfig.onHighlight(component, target);\n emit(target, highlight$1());\n }\n };\n const highlightFirst = (component, hConfig, hState) => {\n getFirst(component, hConfig).each(firstComp => {\n highlight(component, hConfig, hState, firstComp);\n });\n };\n const highlightLast = (component, hConfig, hState) => {\n getLast(component, hConfig).each(lastComp => {\n highlight(component, hConfig, hState, lastComp);\n });\n };\n const highlightAt = (component, hConfig, hState, index) => {\n getByIndex(component, hConfig, hState, index).fold(err => {\n throw err;\n }, firstComp => {\n highlight(component, hConfig, hState, firstComp);\n });\n };\n const highlightBy = (component, hConfig, hState, predicate) => {\n const candidates = getCandidates(component, hConfig);\n const targetComp = find$5(candidates, predicate);\n targetComp.each(c => {\n highlight(component, hConfig, hState, c);\n });\n };\n const isHighlighted = (component, hConfig, hState, queryTarget) => has(queryTarget.element, hConfig.highlightClass);\n const getHighlighted = (component, hConfig, _hState) => descendant(component.element, '.' + hConfig.highlightClass).bind(e => component.getSystem().getByDom(e).toOptional());\n const getByIndex = (component, hConfig, hState, index) => {\n const items = descendants(component.element, '.' + hConfig.itemClass);\n return Optional.from(items[index]).fold(() => Result.error(new Error('No element found with index ' + index)), component.getSystem().getByDom);\n };\n const getFirst = (component, hConfig, _hState) => descendant(component.element, '.' + hConfig.itemClass).bind(e => component.getSystem().getByDom(e).toOptional());\n const getLast = (component, hConfig, _hState) => {\n const items = descendants(component.element, '.' + hConfig.itemClass);\n const last = items.length > 0 ? Optional.some(items[items.length - 1]) : Optional.none();\n return last.bind(c => component.getSystem().getByDom(c).toOptional());\n };\n const getDelta$2 = (component, hConfig, hState, delta) => {\n const items = descendants(component.element, '.' + hConfig.itemClass);\n const current = findIndex$1(items, item => has(item, hConfig.highlightClass));\n return current.bind(selected => {\n const dest = cycleBy(selected, delta, 0, items.length - 1);\n return component.getSystem().getByDom(items[dest]).toOptional();\n });\n };\n const getPrevious = (component, hConfig, hState) => getDelta$2(component, hConfig, hState, -1);\n const getNext = (component, hConfig, hState) => getDelta$2(component, hConfig, hState, +1);\n const getCandidates = (component, hConfig, _hState) => {\n const items = descendants(component.element, '.' + hConfig.itemClass);\n return cat(map$2(items, i => component.getSystem().getByDom(i).toOptional()));\n };\n\n var HighlightApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n dehighlightAll: dehighlightAll,\n dehighlight: dehighlight,\n highlight: highlight,\n highlightFirst: highlightFirst,\n highlightLast: highlightLast,\n highlightAt: highlightAt,\n highlightBy: highlightBy,\n isHighlighted: isHighlighted,\n getHighlighted: getHighlighted,\n getFirst: getFirst,\n getLast: getLast,\n getPrevious: getPrevious,\n getNext: getNext,\n getCandidates: getCandidates\n });\n\n var HighlightSchema = [\n required$1('highlightClass'),\n required$1('itemClass'),\n onHandler('onHighlight'),\n onHandler('onDehighlight')\n ];\n\n const Highlighting = create$4({\n fields: HighlightSchema,\n name: 'highlighting',\n apis: HighlightApis\n });\n\n const BACKSPACE = [8];\n const TAB = [9];\n const ENTER = [13];\n const ESCAPE = [27];\n const SPACE = [32];\n const LEFT = [37];\n const UP = [38];\n const RIGHT = [39];\n const DOWN = [40];\n\n const cyclePrev = (values, index, predicate) => {\n const before = reverse(values.slice(0, index));\n const after = reverse(values.slice(index + 1));\n return find$5(before.concat(after), predicate);\n };\n const tryPrev = (values, index, predicate) => {\n const before = reverse(values.slice(0, index));\n return find$5(before, predicate);\n };\n const cycleNext = (values, index, predicate) => {\n const before = values.slice(0, index);\n const after = values.slice(index + 1);\n return find$5(after.concat(before), predicate);\n };\n const tryNext = (values, index, predicate) => {\n const after = values.slice(index + 1);\n return find$5(after, predicate);\n };\n\n const inSet = keys => event => {\n const raw = event.raw;\n return contains$2(keys, raw.which);\n };\n const and = preds => event => forall(preds, pred => pred(event));\n const isShift$1 = event => {\n const raw = event.raw;\n return raw.shiftKey === true;\n };\n const isControl = event => {\n const raw = event.raw;\n return raw.ctrlKey === true;\n };\n const isNotShift = not(isShift$1);\n\n const rule = (matches, action) => ({\n matches,\n classification: action\n });\n const choose = (transitions, event) => {\n const transition = find$5(transitions, t => t.matches(event));\n return transition.map(t => t.classification);\n };\n\n const reportFocusShifting = (component, prevFocus, newFocus) => {\n const noChange = prevFocus.exists(p => newFocus.exists(n => eq(n, p)));\n if (!noChange) {\n emitWith(component, focusShifted(), {\n prevFocus,\n newFocus\n });\n }\n };\n const dom$2 = () => {\n const get = component => search(component.element);\n const set = (component, focusee) => {\n const prevFocus = get(component);\n component.getSystem().triggerFocus(focusee, component.element);\n const newFocus = get(component);\n reportFocusShifting(component, prevFocus, newFocus);\n };\n return {\n get,\n set\n };\n };\n const highlights = () => {\n const get = component => Highlighting.getHighlighted(component).map(item => item.element);\n const set = (component, element) => {\n const prevFocus = get(component);\n component.getSystem().getByDom(element).fold(noop, item => {\n Highlighting.highlight(component, item);\n });\n const newFocus = get(component);\n reportFocusShifting(component, prevFocus, newFocus);\n };\n return {\n get,\n set\n };\n };\n\n var FocusInsideModes;\n (function (FocusInsideModes) {\n FocusInsideModes['OnFocusMode'] = 'onFocus';\n FocusInsideModes['OnEnterOrSpaceMode'] = 'onEnterOrSpace';\n FocusInsideModes['OnApiMode'] = 'onApi';\n }(FocusInsideModes || (FocusInsideModes = {})));\n\n const typical = (infoSchema, stateInit, getKeydownRules, getKeyupRules, optFocusIn) => {\n const schema = () => infoSchema.concat([\n defaulted('focusManager', dom$2()),\n defaultedOf('focusInside', 'onFocus', valueOf(val => contains$2([\n 'onFocus',\n 'onEnterOrSpace',\n 'onApi'\n ], val) ? Result.value(val) : Result.error('Invalid value for focusInside'))),\n output$1('handler', me),\n output$1('state', stateInit),\n output$1('sendFocusIn', optFocusIn)\n ]);\n const processKey = (component, simulatedEvent, getRules, keyingConfig, keyingState) => {\n const rules = getRules(component, simulatedEvent, keyingConfig, keyingState);\n return choose(rules, simulatedEvent.event).bind(rule => rule(component, simulatedEvent, keyingConfig, keyingState));\n };\n const toEvents = (keyingConfig, keyingState) => {\n const onFocusHandler = keyingConfig.focusInside !== FocusInsideModes.OnFocusMode ? Optional.none() : optFocusIn(keyingConfig).map(focusIn => run$1(focus$4(), (component, simulatedEvent) => {\n focusIn(component, keyingConfig, keyingState);\n simulatedEvent.stop();\n }));\n const tryGoInsideComponent = (component, simulatedEvent) => {\n const isEnterOrSpace = inSet(SPACE.concat(ENTER))(simulatedEvent.event);\n if (keyingConfig.focusInside === FocusInsideModes.OnEnterOrSpaceMode && isEnterOrSpace && isSource(component, simulatedEvent)) {\n optFocusIn(keyingConfig).each(focusIn => {\n focusIn(component, keyingConfig, keyingState);\n simulatedEvent.stop();\n });\n }\n };\n const keyboardEvents = [\n run$1(keydown(), (component, simulatedEvent) => {\n processKey(component, simulatedEvent, getKeydownRules, keyingConfig, keyingState).fold(() => {\n tryGoInsideComponent(component, simulatedEvent);\n }, _ => {\n simulatedEvent.stop();\n });\n }),\n run$1(keyup(), (component, simulatedEvent) => {\n processKey(component, simulatedEvent, getKeyupRules, keyingConfig, keyingState).each(_ => {\n simulatedEvent.stop();\n });\n })\n ];\n return derive$2(onFocusHandler.toArray().concat(keyboardEvents));\n };\n const me = {\n schema,\n processKey,\n toEvents\n };\n return me;\n };\n\n const create$2 = cyclicField => {\n const schema = [\n option$3('onEscape'),\n option$3('onEnter'),\n defaulted('selector', '[data-alloy-tabstop=\"true\"]:not(:disabled)'),\n defaulted('firstTabstop', 0),\n defaulted('useTabstopAt', always),\n option$3('visibilitySelector')\n ].concat([cyclicField]);\n const isVisible = (tabbingConfig, element) => {\n const target = tabbingConfig.visibilitySelector.bind(sel => closest$1(element, sel)).getOr(element);\n return get$e(target) > 0;\n };\n const findInitial = (component, tabbingConfig) => {\n const tabstops = descendants(component.element, tabbingConfig.selector);\n const visibles = filter$2(tabstops, elem => isVisible(tabbingConfig, elem));\n return Optional.from(visibles[tabbingConfig.firstTabstop]);\n };\n const findCurrent = (component, tabbingConfig) => tabbingConfig.focusManager.get(component).bind(elem => closest$1(elem, tabbingConfig.selector));\n const isTabstop = (tabbingConfig, element) => isVisible(tabbingConfig, element) && tabbingConfig.useTabstopAt(element);\n const focusIn = (component, tabbingConfig, _tabbingState) => {\n findInitial(component, tabbingConfig).each(target => {\n tabbingConfig.focusManager.set(component, target);\n });\n };\n const goFromTabstop = (component, tabstops, stopIndex, tabbingConfig, cycle) => cycle(tabstops, stopIndex, elem => isTabstop(tabbingConfig, elem)).fold(() => tabbingConfig.cyclic ? Optional.some(true) : Optional.none(), target => {\n tabbingConfig.focusManager.set(component, target);\n return Optional.some(true);\n });\n const go = (component, _simulatedEvent, tabbingConfig, cycle) => {\n const tabstops = filter$2(descendants(component.element, tabbingConfig.selector), element => isVisible(tabbingConfig, element));\n return findCurrent(component, tabbingConfig).bind(tabstop => {\n const optStopIndex = findIndex$1(tabstops, curry(eq, tabstop));\n return optStopIndex.bind(stopIndex => goFromTabstop(component, tabstops, stopIndex, tabbingConfig, cycle));\n });\n };\n const goBackwards = (component, simulatedEvent, tabbingConfig) => {\n const navigate = tabbingConfig.cyclic ? cyclePrev : tryPrev;\n return go(component, simulatedEvent, tabbingConfig, navigate);\n };\n const goForwards = (component, simulatedEvent, tabbingConfig) => {\n const navigate = tabbingConfig.cyclic ? cycleNext : tryNext;\n return go(component, simulatedEvent, tabbingConfig, navigate);\n };\n const isFirstChild = elem => parentNode(elem).bind(firstChild).exists(child => eq(child, elem));\n const goFromPseudoTabstop = (component, simulatedEvent, tabbingConfig) => findCurrent(component, tabbingConfig).filter(elem => !tabbingConfig.useTabstopAt(elem)).bind(elem => (isFirstChild(elem) ? goBackwards : goForwards)(component, simulatedEvent, tabbingConfig));\n const execute = (component, simulatedEvent, tabbingConfig) => tabbingConfig.onEnter.bind(f => f(component, simulatedEvent));\n const exit = (component, simulatedEvent, tabbingConfig) => tabbingConfig.onEscape.bind(f => f(component, simulatedEvent));\n const getKeydownRules = constant$1([\n rule(and([\n isShift$1,\n inSet(TAB)\n ]), goBackwards),\n rule(inSet(TAB), goForwards),\n rule(and([\n isNotShift,\n inSet(ENTER)\n ]), execute)\n ]);\n const getKeyupRules = constant$1([\n rule(inSet(ESCAPE), exit),\n rule(inSet(TAB), goFromPseudoTabstop)\n ]);\n return typical(schema, NoState.init, getKeydownRules, getKeyupRules, () => Optional.some(focusIn));\n };\n\n var AcyclicType = create$2(customField('cyclic', never));\n\n var CyclicType = create$2(customField('cyclic', always));\n\n const doDefaultExecute = (component, _simulatedEvent, focused) => {\n dispatch(component, focused, execute$5());\n return Optional.some(true);\n };\n const defaultExecute = (component, simulatedEvent, focused) => {\n const isComplex = inside(focused) && inSet(SPACE)(simulatedEvent.event);\n return isComplex ? Optional.none() : doDefaultExecute(component, simulatedEvent, focused);\n };\n const stopEventForFirefox = (_component, _simulatedEvent) => Optional.some(true);\n\n const schema$v = [\n defaulted('execute', defaultExecute),\n defaulted('useSpace', false),\n defaulted('useEnter', true),\n defaulted('useControlEnter', false),\n defaulted('useDown', false)\n ];\n const execute$4 = (component, simulatedEvent, executeConfig) => executeConfig.execute(component, simulatedEvent, component.element);\n const getKeydownRules$5 = (component, _simulatedEvent, executeConfig, _executeState) => {\n const spaceExec = executeConfig.useSpace && !inside(component.element) ? SPACE : [];\n const enterExec = executeConfig.useEnter ? ENTER : [];\n const downExec = executeConfig.useDown ? DOWN : [];\n const execKeys = spaceExec.concat(enterExec).concat(downExec);\n return [rule(inSet(execKeys), execute$4)].concat(executeConfig.useControlEnter ? [rule(and([\n isControl,\n inSet(ENTER)\n ]), execute$4)] : []);\n };\n const getKeyupRules$5 = (component, _simulatedEvent, executeConfig, _executeState) => executeConfig.useSpace && !inside(component.element) ? [rule(inSet(SPACE), stopEventForFirefox)] : [];\n var ExecutionType = typical(schema$v, NoState.init, getKeydownRules$5, getKeyupRules$5, () => Optional.none());\n\n const flatgrid$1 = () => {\n const dimensions = value$4();\n const setGridSize = (numRows, numColumns) => {\n dimensions.set({\n numRows,\n numColumns\n });\n };\n const getNumRows = () => dimensions.get().map(d => d.numRows);\n const getNumColumns = () => dimensions.get().map(d => d.numColumns);\n return nu$7({\n readState: () => dimensions.get().map(d => ({\n numRows: String(d.numRows),\n numColumns: String(d.numColumns)\n })).getOr({\n numRows: '?',\n numColumns: '?'\n }),\n setGridSize,\n getNumRows,\n getNumColumns\n });\n };\n const init$c = spec => spec.state(spec);\n\n var KeyingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n flatgrid: flatgrid$1,\n init: init$c\n });\n\n const useH = movement => (component, simulatedEvent, config, state) => {\n const move = movement(component.element);\n return use(move, component, simulatedEvent, config, state);\n };\n const west$1 = (moveLeft, moveRight) => {\n const movement = onDirection(moveLeft, moveRight);\n return useH(movement);\n };\n const east$1 = (moveLeft, moveRight) => {\n const movement = onDirection(moveRight, moveLeft);\n return useH(movement);\n };\n const useV = move => (component, simulatedEvent, config, state) => use(move, component, simulatedEvent, config, state);\n const use = (move, component, simulatedEvent, config, state) => {\n const outcome = config.focusManager.get(component).bind(focused => move(component.element, focused, config, state));\n return outcome.map(newFocus => {\n config.focusManager.set(component, newFocus);\n return true;\n });\n };\n const north$1 = useV;\n const south$1 = useV;\n const move$1 = useV;\n\n const isHidden$1 = dom => dom.offsetWidth <= 0 && dom.offsetHeight <= 0;\n const isVisible = element => !isHidden$1(element.dom);\n\n const locate = (candidates, predicate) => findIndex$1(candidates, predicate).map(index => ({\n index,\n candidates\n }));\n\n const locateVisible = (container, current, selector) => {\n const predicate = x => eq(x, current);\n const candidates = descendants(container, selector);\n const visible = filter$2(candidates, isVisible);\n return locate(visible, predicate);\n };\n const findIndex = (elements, target) => findIndex$1(elements, elem => eq(target, elem));\n\n const withGrid = (values, index, numCols, f) => {\n const oldRow = Math.floor(index / numCols);\n const oldColumn = index % numCols;\n return f(oldRow, oldColumn).bind(address => {\n const newIndex = address.row * numCols + address.column;\n return newIndex >= 0 && newIndex < values.length ? Optional.some(values[newIndex]) : Optional.none();\n });\n };\n const cycleHorizontal$1 = (values, index, numRows, numCols, delta) => withGrid(values, index, numCols, (oldRow, oldColumn) => {\n const onLastRow = oldRow === numRows - 1;\n const colsInRow = onLastRow ? values.length - oldRow * numCols : numCols;\n const newColumn = cycleBy(oldColumn, delta, 0, colsInRow - 1);\n return Optional.some({\n row: oldRow,\n column: newColumn\n });\n });\n const cycleVertical$1 = (values, index, numRows, numCols, delta) => withGrid(values, index, numCols, (oldRow, oldColumn) => {\n const newRow = cycleBy(oldRow, delta, 0, numRows - 1);\n const onLastRow = newRow === numRows - 1;\n const colsInRow = onLastRow ? values.length - newRow * numCols : numCols;\n const newCol = clamp(oldColumn, 0, colsInRow - 1);\n return Optional.some({\n row: newRow,\n column: newCol\n });\n });\n const cycleRight$1 = (values, index, numRows, numCols) => cycleHorizontal$1(values, index, numRows, numCols, +1);\n const cycleLeft$1 = (values, index, numRows, numCols) => cycleHorizontal$1(values, index, numRows, numCols, -1);\n const cycleUp$1 = (values, index, numRows, numCols) => cycleVertical$1(values, index, numRows, numCols, -1);\n const cycleDown$1 = (values, index, numRows, numCols) => cycleVertical$1(values, index, numRows, numCols, +1);\n\n const schema$u = [\n required$1('selector'),\n defaulted('execute', defaultExecute),\n onKeyboardHandler('onEscape'),\n defaulted('captureTab', false),\n initSize()\n ];\n const focusIn$4 = (component, gridConfig, _gridState) => {\n descendant(component.element, gridConfig.selector).each(first => {\n gridConfig.focusManager.set(component, first);\n });\n };\n const findCurrent$1 = (component, gridConfig) => gridConfig.focusManager.get(component).bind(elem => closest$1(elem, gridConfig.selector));\n const execute$3 = (component, simulatedEvent, gridConfig, _gridState) => findCurrent$1(component, gridConfig).bind(focused => gridConfig.execute(component, simulatedEvent, focused));\n const doMove$2 = cycle => (element, focused, gridConfig, gridState) => locateVisible(element, focused, gridConfig.selector).bind(identified => cycle(identified.candidates, identified.index, gridState.getNumRows().getOr(gridConfig.initSize.numRows), gridState.getNumColumns().getOr(gridConfig.initSize.numColumns)));\n const handleTab = (_component, _simulatedEvent, gridConfig) => gridConfig.captureTab ? Optional.some(true) : Optional.none();\n const doEscape$1 = (component, simulatedEvent, gridConfig) => gridConfig.onEscape(component, simulatedEvent);\n const moveLeft$3 = doMove$2(cycleLeft$1);\n const moveRight$3 = doMove$2(cycleRight$1);\n const moveNorth$1 = doMove$2(cycleUp$1);\n const moveSouth$1 = doMove$2(cycleDown$1);\n const getKeydownRules$4 = constant$1([\n rule(inSet(LEFT), west$1(moveLeft$3, moveRight$3)),\n rule(inSet(RIGHT), east$1(moveLeft$3, moveRight$3)),\n rule(inSet(UP), north$1(moveNorth$1)),\n rule(inSet(DOWN), south$1(moveSouth$1)),\n rule(and([\n isShift$1,\n inSet(TAB)\n ]), handleTab),\n rule(and([\n isNotShift,\n inSet(TAB)\n ]), handleTab),\n rule(inSet(SPACE.concat(ENTER)), execute$3)\n ]);\n const getKeyupRules$4 = constant$1([\n rule(inSet(ESCAPE), doEscape$1),\n rule(inSet(SPACE), stopEventForFirefox)\n ]);\n var FlatgridType = typical(schema$u, flatgrid$1, getKeydownRules$4, getKeyupRules$4, () => Optional.some(focusIn$4));\n\n const f = (container, selector, current, delta, getNewIndex) => {\n const isDisabledButton = candidate => name$3(candidate) === 'button' && get$g(candidate, 'disabled') === 'disabled';\n const tryNewIndex = (initial, index, candidates) => getNewIndex(initial, index, delta, 0, candidates.length - 1, candidates[index], newIndex => isDisabledButton(candidates[newIndex]) ? tryNewIndex(initial, newIndex, candidates) : Optional.from(candidates[newIndex]));\n return locateVisible(container, current, selector).bind(identified => {\n const index = identified.index;\n const candidates = identified.candidates;\n return tryNewIndex(index, index, candidates);\n });\n };\n const horizontalWithoutCycles = (container, selector, current, delta) => f(container, selector, current, delta, (prevIndex, v, d, min, max, oldCandidate, onNewIndex) => {\n const newIndex = clamp(v + d, min, max);\n return newIndex === prevIndex ? Optional.from(oldCandidate) : onNewIndex(newIndex);\n });\n const horizontal = (container, selector, current, delta) => f(container, selector, current, delta, (prevIndex, v, d, min, max, _oldCandidate, onNewIndex) => {\n const newIndex = cycleBy(v, d, min, max);\n return newIndex === prevIndex ? Optional.none() : onNewIndex(newIndex);\n });\n\n const schema$t = [\n required$1('selector'),\n defaulted('getInitial', Optional.none),\n defaulted('execute', defaultExecute),\n onKeyboardHandler('onEscape'),\n defaulted('executeOnMove', false),\n defaulted('allowVertical', true),\n defaulted('allowHorizontal', true),\n defaulted('cycles', true)\n ];\n const findCurrent = (component, flowConfig) => flowConfig.focusManager.get(component).bind(elem => closest$1(elem, flowConfig.selector));\n const execute$2 = (component, simulatedEvent, flowConfig) => findCurrent(component, flowConfig).bind(focused => flowConfig.execute(component, simulatedEvent, focused));\n const focusIn$3 = (component, flowConfig, _state) => {\n flowConfig.getInitial(component).orThunk(() => descendant(component.element, flowConfig.selector)).each(first => {\n flowConfig.focusManager.set(component, first);\n });\n };\n const moveLeft$2 = (element, focused, info) => (info.cycles ? horizontal : horizontalWithoutCycles)(element, info.selector, focused, -1);\n const moveRight$2 = (element, focused, info) => (info.cycles ? horizontal : horizontalWithoutCycles)(element, info.selector, focused, +1);\n const doMove$1 = movement => (component, simulatedEvent, flowConfig, flowState) => movement(component, simulatedEvent, flowConfig, flowState).bind(() => flowConfig.executeOnMove ? execute$2(component, simulatedEvent, flowConfig) : Optional.some(true));\n const doEscape = (component, simulatedEvent, flowConfig) => flowConfig.onEscape(component, simulatedEvent);\n const getKeydownRules$3 = (_component, _se, flowConfig, _flowState) => {\n const westMovers = [...flowConfig.allowHorizontal ? LEFT : []].concat(flowConfig.allowVertical ? UP : []);\n const eastMovers = [...flowConfig.allowHorizontal ? RIGHT : []].concat(flowConfig.allowVertical ? DOWN : []);\n return [\n rule(inSet(westMovers), doMove$1(west$1(moveLeft$2, moveRight$2))),\n rule(inSet(eastMovers), doMove$1(east$1(moveLeft$2, moveRight$2))),\n rule(inSet(ENTER), execute$2),\n rule(inSet(SPACE), execute$2)\n ];\n };\n const getKeyupRules$3 = constant$1([\n rule(inSet(SPACE), stopEventForFirefox),\n rule(inSet(ESCAPE), doEscape)\n ]);\n var FlowType = typical(schema$t, NoState.init, getKeydownRules$3, getKeyupRules$3, () => Optional.some(focusIn$3));\n\n const toCell = (matrix, rowIndex, columnIndex) => Optional.from(matrix[rowIndex]).bind(row => Optional.from(row[columnIndex]).map(cell => ({\n rowIndex,\n columnIndex,\n cell\n })));\n const cycleHorizontal = (matrix, rowIndex, startCol, deltaCol) => {\n const row = matrix[rowIndex];\n const colsInRow = row.length;\n const newColIndex = cycleBy(startCol, deltaCol, 0, colsInRow - 1);\n return toCell(matrix, rowIndex, newColIndex);\n };\n const cycleVertical = (matrix, colIndex, startRow, deltaRow) => {\n const nextRowIndex = cycleBy(startRow, deltaRow, 0, matrix.length - 1);\n const colsInNextRow = matrix[nextRowIndex].length;\n const nextColIndex = clamp(colIndex, 0, colsInNextRow - 1);\n return toCell(matrix, nextRowIndex, nextColIndex);\n };\n const moveHorizontal = (matrix, rowIndex, startCol, deltaCol) => {\n const row = matrix[rowIndex];\n const colsInRow = row.length;\n const newColIndex = clamp(startCol + deltaCol, 0, colsInRow - 1);\n return toCell(matrix, rowIndex, newColIndex);\n };\n const moveVertical = (matrix, colIndex, startRow, deltaRow) => {\n const nextRowIndex = clamp(startRow + deltaRow, 0, matrix.length - 1);\n const colsInNextRow = matrix[nextRowIndex].length;\n const nextColIndex = clamp(colIndex, 0, colsInNextRow - 1);\n return toCell(matrix, nextRowIndex, nextColIndex);\n };\n const cycleRight = (matrix, startRow, startCol) => cycleHorizontal(matrix, startRow, startCol, +1);\n const cycleLeft = (matrix, startRow, startCol) => cycleHorizontal(matrix, startRow, startCol, -1);\n const cycleUp = (matrix, startRow, startCol) => cycleVertical(matrix, startCol, startRow, -1);\n const cycleDown = (matrix, startRow, startCol) => cycleVertical(matrix, startCol, startRow, +1);\n const moveLeft$1 = (matrix, startRow, startCol) => moveHorizontal(matrix, startRow, startCol, -1);\n const moveRight$1 = (matrix, startRow, startCol) => moveHorizontal(matrix, startRow, startCol, +1);\n const moveUp$1 = (matrix, startRow, startCol) => moveVertical(matrix, startCol, startRow, -1);\n const moveDown$1 = (matrix, startRow, startCol) => moveVertical(matrix, startCol, startRow, +1);\n\n const schema$s = [\n requiredObjOf('selectors', [\n required$1('row'),\n required$1('cell')\n ]),\n defaulted('cycles', true),\n defaulted('previousSelector', Optional.none),\n defaulted('execute', defaultExecute)\n ];\n const focusIn$2 = (component, matrixConfig, _state) => {\n const focused = matrixConfig.previousSelector(component).orThunk(() => {\n const selectors = matrixConfig.selectors;\n return descendant(component.element, selectors.cell);\n });\n focused.each(cell => {\n matrixConfig.focusManager.set(component, cell);\n });\n };\n const execute$1 = (component, simulatedEvent, matrixConfig) => search(component.element).bind(focused => matrixConfig.execute(component, simulatedEvent, focused));\n const toMatrix = (rows, matrixConfig) => map$2(rows, row => descendants(row, matrixConfig.selectors.cell));\n const doMove = (ifCycle, ifMove) => (element, focused, matrixConfig) => {\n const move = matrixConfig.cycles ? ifCycle : ifMove;\n return closest$1(focused, matrixConfig.selectors.row).bind(inRow => {\n const cellsInRow = descendants(inRow, matrixConfig.selectors.cell);\n return findIndex(cellsInRow, focused).bind(colIndex => {\n const allRows = descendants(element, matrixConfig.selectors.row);\n return findIndex(allRows, inRow).bind(rowIndex => {\n const matrix = toMatrix(allRows, matrixConfig);\n return move(matrix, rowIndex, colIndex).map(next => next.cell);\n });\n });\n });\n };\n const moveLeft = doMove(cycleLeft, moveLeft$1);\n const moveRight = doMove(cycleRight, moveRight$1);\n const moveNorth = doMove(cycleUp, moveUp$1);\n const moveSouth = doMove(cycleDown, moveDown$1);\n const getKeydownRules$2 = constant$1([\n rule(inSet(LEFT), west$1(moveLeft, moveRight)),\n rule(inSet(RIGHT), east$1(moveLeft, moveRight)),\n rule(inSet(UP), north$1(moveNorth)),\n rule(inSet(DOWN), south$1(moveSouth)),\n rule(inSet(SPACE.concat(ENTER)), execute$1)\n ]);\n const getKeyupRules$2 = constant$1([rule(inSet(SPACE), stopEventForFirefox)]);\n var MatrixType = typical(schema$s, NoState.init, getKeydownRules$2, getKeyupRules$2, () => Optional.some(focusIn$2));\n\n const schema$r = [\n required$1('selector'),\n defaulted('execute', defaultExecute),\n defaulted('moveOnTab', false)\n ];\n const execute = (component, simulatedEvent, menuConfig) => menuConfig.focusManager.get(component).bind(focused => menuConfig.execute(component, simulatedEvent, focused));\n const focusIn$1 = (component, menuConfig, _state) => {\n descendant(component.element, menuConfig.selector).each(first => {\n menuConfig.focusManager.set(component, first);\n });\n };\n const moveUp = (element, focused, info) => horizontal(element, info.selector, focused, -1);\n const moveDown = (element, focused, info) => horizontal(element, info.selector, focused, +1);\n const fireShiftTab = (component, simulatedEvent, menuConfig, menuState) => menuConfig.moveOnTab ? move$1(moveUp)(component, simulatedEvent, menuConfig, menuState) : Optional.none();\n const fireTab = (component, simulatedEvent, menuConfig, menuState) => menuConfig.moveOnTab ? move$1(moveDown)(component, simulatedEvent, menuConfig, menuState) : Optional.none();\n const getKeydownRules$1 = constant$1([\n rule(inSet(UP), move$1(moveUp)),\n rule(inSet(DOWN), move$1(moveDown)),\n rule(and([\n isShift$1,\n inSet(TAB)\n ]), fireShiftTab),\n rule(and([\n isNotShift,\n inSet(TAB)\n ]), fireTab),\n rule(inSet(ENTER), execute),\n rule(inSet(SPACE), execute)\n ]);\n const getKeyupRules$1 = constant$1([rule(inSet(SPACE), stopEventForFirefox)]);\n var MenuType = typical(schema$r, NoState.init, getKeydownRules$1, getKeyupRules$1, () => Optional.some(focusIn$1));\n\n const schema$q = [\n onKeyboardHandler('onSpace'),\n onKeyboardHandler('onEnter'),\n onKeyboardHandler('onShiftEnter'),\n onKeyboardHandler('onLeft'),\n onKeyboardHandler('onRight'),\n onKeyboardHandler('onTab'),\n onKeyboardHandler('onShiftTab'),\n onKeyboardHandler('onUp'),\n onKeyboardHandler('onDown'),\n onKeyboardHandler('onEscape'),\n defaulted('stopSpaceKeyup', false),\n option$3('focusIn')\n ];\n const getKeydownRules = (component, simulatedEvent, specialInfo) => [\n rule(inSet(SPACE), specialInfo.onSpace),\n rule(and([\n isNotShift,\n inSet(ENTER)\n ]), specialInfo.onEnter),\n rule(and([\n isShift$1,\n inSet(ENTER)\n ]), specialInfo.onShiftEnter),\n rule(and([\n isShift$1,\n inSet(TAB)\n ]), specialInfo.onShiftTab),\n rule(and([\n isNotShift,\n inSet(TAB)\n ]), specialInfo.onTab),\n rule(inSet(UP), specialInfo.onUp),\n rule(inSet(DOWN), specialInfo.onDown),\n rule(inSet(LEFT), specialInfo.onLeft),\n rule(inSet(RIGHT), specialInfo.onRight),\n rule(inSet(SPACE), specialInfo.onSpace)\n ];\n const getKeyupRules = (component, simulatedEvent, specialInfo) => [\n ...specialInfo.stopSpaceKeyup ? [rule(inSet(SPACE), stopEventForFirefox)] : [],\n rule(inSet(ESCAPE), specialInfo.onEscape)\n ];\n var SpecialType = typical(schema$q, NoState.init, getKeydownRules, getKeyupRules, specialInfo => specialInfo.focusIn);\n\n const acyclic = AcyclicType.schema();\n const cyclic = CyclicType.schema();\n const flow = FlowType.schema();\n const flatgrid = FlatgridType.schema();\n const matrix = MatrixType.schema();\n const execution = ExecutionType.schema();\n const menu = MenuType.schema();\n const special = SpecialType.schema();\n\n var KeyboardBranches = /*#__PURE__*/Object.freeze({\n __proto__: null,\n acyclic: acyclic,\n cyclic: cyclic,\n flow: flow,\n flatgrid: flatgrid,\n matrix: matrix,\n execution: execution,\n menu: menu,\n special: special\n });\n\n const isFlatgridState = keyState => hasNonNullableKey(keyState, 'setGridSize');\n const Keying = createModes({\n branchKey: 'mode',\n branches: KeyboardBranches,\n name: 'keying',\n active: {\n events: (keyingConfig, keyingState) => {\n const handler = keyingConfig.handler;\n return handler.toEvents(keyingConfig, keyingState);\n }\n },\n apis: {\n focusIn: (component, keyConfig, keyState) => {\n keyConfig.sendFocusIn(keyConfig).fold(() => {\n component.getSystem().triggerFocus(component.element, component.element);\n }, sendFocusIn => {\n sendFocusIn(component, keyConfig, keyState);\n });\n },\n setGridSize: (component, keyConfig, keyState, numRows, numColumns) => {\n if (!isFlatgridState(keyState)) {\n console.error('Layout does not support setGridSize');\n } else {\n keyState.setGridSize(numRows, numColumns);\n }\n }\n },\n state: KeyingState\n });\n\n const withoutReuse = (parent, data) => {\n preserve$1(() => {\n replaceChildren(parent, data, () => map$2(data, parent.getSystem().build));\n }, parent.element);\n };\n const withReuse = (parent, data) => {\n preserve$1(() => {\n virtualReplaceChildren(parent, data, () => {\n return patchSpecChildren(parent.element, data, parent.getSystem().buildOrPatch);\n });\n }, parent.element);\n };\n\n const virtualReplace = (component, replacee, replaceeIndex, childSpec) => {\n virtualDetach(replacee);\n const child = patchSpecChild(component.element, replaceeIndex, childSpec, component.getSystem().buildOrPatch);\n virtualAttach(component, child);\n component.syncComponents();\n };\n const insert = (component, insertion, childSpec) => {\n const child = component.getSystem().build(childSpec);\n attachWith(component, child, insertion);\n };\n const replace = (component, replacee, replaceeIndex, childSpec) => {\n detach(replacee);\n insert(component, (p, c) => appendAt(p, c, replaceeIndex), childSpec);\n };\n const set$3 = (component, replaceConfig, replaceState, data) => {\n const replacer = replaceConfig.reuseDom ? withReuse : withoutReuse;\n return replacer(component, data);\n };\n const append = (component, replaceConfig, replaceState, appendee) => {\n insert(component, append$2, appendee);\n };\n const prepend = (component, replaceConfig, replaceState, prependee) => {\n insert(component, prepend$1, prependee);\n };\n const remove$1 = (component, replaceConfig, replaceState, removee) => {\n const children = contents(component);\n const foundChild = find$5(children, child => eq(removee.element, child.element));\n foundChild.each(detach);\n };\n const contents = (component, _replaceConfig) => component.components();\n const replaceAt = (component, replaceConfig, replaceState, replaceeIndex, replacer) => {\n const children = contents(component);\n return Optional.from(children[replaceeIndex]).map(replacee => {\n replacer.fold(() => detach(replacee), r => {\n const replacer = replaceConfig.reuseDom ? virtualReplace : replace;\n replacer(component, replacee, replaceeIndex, r);\n });\n return replacee;\n });\n };\n const replaceBy = (component, replaceConfig, replaceState, replaceePred, replacer) => {\n const children = contents(component);\n return findIndex$1(children, replaceePred).bind(replaceeIndex => replaceAt(component, replaceConfig, replaceState, replaceeIndex, replacer));\n };\n\n var ReplaceApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n append: append,\n prepend: prepend,\n remove: remove$1,\n replaceAt: replaceAt,\n replaceBy: replaceBy,\n set: set$3,\n contents: contents\n });\n\n const Replacing = create$4({\n fields: [defaultedBoolean('reuseDom', true)],\n name: 'replacing',\n apis: ReplaceApis\n });\n\n const events$c = (name, eventHandlers) => {\n const events = derive$2(eventHandlers);\n return create$4({\n fields: [required$1('enabled')],\n name,\n active: { events: constant$1(events) }\n });\n };\n const config = (name, eventHandlers) => {\n const me = events$c(name, eventHandlers);\n return {\n key: name,\n value: {\n config: {},\n me,\n configAsRaw: constant$1({}),\n initialConfig: {},\n state: NoState\n }\n };\n };\n\n const focus$2 = (component, focusConfig) => {\n if (!focusConfig.ignore) {\n focus$3(component.element);\n focusConfig.onFocus(component);\n }\n };\n const blur = (component, focusConfig) => {\n if (!focusConfig.ignore) {\n blur$1(component.element);\n }\n };\n const isFocused = component => hasFocus(component.element);\n\n var FocusApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n focus: focus$2,\n blur: blur,\n isFocused: isFocused\n });\n\n const exhibit$4 = (base, focusConfig) => {\n const mod = focusConfig.ignore ? {} : { attributes: { tabindex: '-1' } };\n return nu$8(mod);\n };\n const events$b = focusConfig => derive$2([run$1(focus$4(), (component, simulatedEvent) => {\n focus$2(component, focusConfig);\n simulatedEvent.stop();\n })].concat(focusConfig.stopMousedown ? [run$1(mousedown(), (_, simulatedEvent) => {\n simulatedEvent.event.prevent();\n })] : []));\n\n var ActiveFocus = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$4,\n events: events$b\n });\n\n var FocusSchema = [\n onHandler('onFocus'),\n defaulted('stopMousedown', false),\n defaulted('ignore', false)\n ];\n\n const Focusing = create$4({\n fields: FocusSchema,\n name: 'focusing',\n active: ActiveFocus,\n apis: FocusApis\n });\n\n const SetupBehaviourCellState = initialState => {\n const init = () => {\n const cell = Cell(initialState);\n const get = () => cell.get();\n const set = newState => cell.set(newState);\n const clear = () => cell.set(initialState);\n const readState = () => cell.get();\n return {\n get,\n set,\n clear,\n readState\n };\n };\n return { init };\n };\n\n const updateAriaState = (component, toggleConfig, toggleState) => {\n const ariaInfo = toggleConfig.aria;\n ariaInfo.update(component, ariaInfo, toggleState.get());\n };\n const updateClass = (component, toggleConfig, toggleState) => {\n toggleConfig.toggleClass.each(toggleClass => {\n if (toggleState.get()) {\n add$2(component.element, toggleClass);\n } else {\n remove$3(component.element, toggleClass);\n }\n });\n };\n const set$2 = (component, toggleConfig, toggleState, state) => {\n const initialState = toggleState.get();\n toggleState.set(state);\n updateClass(component, toggleConfig, toggleState);\n updateAriaState(component, toggleConfig, toggleState);\n if (initialState !== state) {\n toggleConfig.onToggled(component, state);\n }\n };\n const toggle$2 = (component, toggleConfig, toggleState) => {\n set$2(component, toggleConfig, toggleState, !toggleState.get());\n };\n const on = (component, toggleConfig, toggleState) => {\n set$2(component, toggleConfig, toggleState, true);\n };\n const off = (component, toggleConfig, toggleState) => {\n set$2(component, toggleConfig, toggleState, false);\n };\n const isOn = (component, toggleConfig, toggleState) => toggleState.get();\n const onLoad = (component, toggleConfig, toggleState) => {\n set$2(component, toggleConfig, toggleState, toggleConfig.selected);\n };\n\n var ToggleApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n onLoad: onLoad,\n toggle: toggle$2,\n isOn: isOn,\n on: on,\n off: off,\n set: set$2\n });\n\n const exhibit$3 = () => nu$8({});\n const events$a = (toggleConfig, toggleState) => {\n const execute = executeEvent(toggleConfig, toggleState, toggle$2);\n const load = loadEvent(toggleConfig, toggleState, onLoad);\n return derive$2(flatten([\n toggleConfig.toggleOnExecute ? [execute] : [],\n [load]\n ]));\n };\n\n var ActiveToggle = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$3,\n events: events$a\n });\n\n const updatePressed = (component, ariaInfo, status) => {\n set$9(component.element, 'aria-pressed', status);\n if (ariaInfo.syncWithExpanded) {\n updateExpanded(component, ariaInfo, status);\n }\n };\n const updateSelected = (component, ariaInfo, status) => {\n set$9(component.element, 'aria-selected', status);\n };\n const updateChecked = (component, ariaInfo, status) => {\n set$9(component.element, 'aria-checked', status);\n };\n const updateExpanded = (component, ariaInfo, status) => {\n set$9(component.element, 'aria-expanded', status);\n };\n\n var ToggleSchema = [\n defaulted('selected', false),\n option$3('toggleClass'),\n defaulted('toggleOnExecute', true),\n onHandler('onToggled'),\n defaultedOf('aria', { mode: 'none' }, choose$1('mode', {\n pressed: [\n defaulted('syncWithExpanded', false),\n output$1('update', updatePressed)\n ],\n checked: [output$1('update', updateChecked)],\n expanded: [output$1('update', updateExpanded)],\n selected: [output$1('update', updateSelected)],\n none: [output$1('update', noop)]\n }))\n ];\n\n const Toggling = create$4({\n fields: ToggleSchema,\n name: 'toggling',\n active: ActiveToggle,\n apis: ToggleApis,\n state: SetupBehaviourCellState(false)\n });\n\n const pointerEvents = () => {\n const onClick = (component, simulatedEvent) => {\n simulatedEvent.stop();\n emitExecute(component);\n };\n return [\n run$1(click(), onClick),\n run$1(tap(), onClick),\n cutter(touchstart()),\n cutter(mousedown())\n ];\n };\n const events$9 = optAction => {\n const executeHandler = action => runOnExecute$1((component, simulatedEvent) => {\n action(component);\n simulatedEvent.stop();\n });\n return derive$2(flatten([\n optAction.map(executeHandler).toArray(),\n pointerEvents()\n ]));\n };\n\n const hoverEvent = 'alloy.item-hover';\n const focusEvent = 'alloy.item-focus';\n const toggledEvent = 'alloy.item-toggled';\n const onHover = item => {\n if (search(item.element).isNone() || Focusing.isFocused(item)) {\n if (!Focusing.isFocused(item)) {\n Focusing.focus(item);\n }\n emitWith(item, hoverEvent, { item });\n }\n };\n const onFocus$1 = item => {\n emitWith(item, focusEvent, { item });\n };\n const onToggled = (item, state) => {\n emitWith(item, toggledEvent, {\n item,\n state\n });\n };\n const hover = constant$1(hoverEvent);\n const focus$1 = constant$1(focusEvent);\n const toggled = constant$1(toggledEvent);\n\n const getItemRole = detail => detail.role.fold(() => detail.toggling.map(toggling => toggling.exclusive ? 'menuitemradio' : 'menuitemcheckbox').getOr('menuitem'), identity);\n const getTogglingSpec = (tConfig, isOption) => ({\n aria: { mode: isOption ? 'selected' : 'checked' },\n ...filter$1(tConfig, (_value, name) => name !== 'exclusive'),\n onToggled: (component, state) => {\n if (isFunction(tConfig.onToggled)) {\n tConfig.onToggled(component, state);\n }\n onToggled(component, state);\n }\n });\n const builder$2 = detail => ({\n dom: detail.dom,\n domModification: {\n ...detail.domModification,\n attributes: {\n 'role': getItemRole(detail),\n ...detail.domModification.attributes,\n 'aria-haspopup': detail.hasSubmenu,\n ...detail.hasSubmenu ? { 'aria-expanded': false } : {}\n }\n },\n behaviours: SketchBehaviours.augment(detail.itemBehaviours, [\n detail.toggling.fold(Toggling.revoke, tConfig => Toggling.config(getTogglingSpec(tConfig, detail.role.exists(role => role === 'option')))),\n Focusing.config({\n ignore: detail.ignoreFocus,\n stopMousedown: detail.ignoreFocus,\n onFocus: component => {\n onFocus$1(component);\n }\n }),\n Keying.config({ mode: 'execution' }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: detail.data\n }\n }),\n config('item-type-events', [\n ...pointerEvents(),\n run$1(mouseover(), onHover),\n run$1(focusItem(), Focusing.focus)\n ])\n ]),\n components: detail.components,\n eventOrder: detail.eventOrder\n });\n const schema$p = [\n required$1('data'),\n required$1('components'),\n required$1('dom'),\n defaulted('hasSubmenu', false),\n option$3('toggling'),\n option$3('role'),\n SketchBehaviours.field('itemBehaviours', [\n Toggling,\n Focusing,\n Keying,\n Representing\n ]),\n defaulted('ignoreFocus', false),\n defaulted('domModification', {}),\n output$1('builder', builder$2),\n defaulted('eventOrder', {})\n ];\n\n const builder$1 = detail => ({\n dom: detail.dom,\n components: detail.components,\n events: derive$2([stopper(focusItem())])\n });\n const schema$o = [\n required$1('dom'),\n required$1('components'),\n output$1('builder', builder$1)\n ];\n\n const owner$2 = constant$1('item-widget');\n const parts$h = constant$1([required({\n name: 'widget',\n overrides: detail => {\n return {\n behaviours: derive$1([Representing.config({\n store: {\n mode: 'manual',\n getValue: _component => {\n return detail.data;\n },\n setValue: noop\n }\n })])\n };\n }\n })]);\n\n const builder = detail => {\n const subs = substitutes(owner$2(), detail, parts$h());\n const components = components$1(owner$2(), detail, subs.internals());\n const focusWidget = component => getPart(component, detail, 'widget').map(widget => {\n Keying.focusIn(widget);\n return widget;\n });\n const onHorizontalArrow = (component, simulatedEvent) => inside(simulatedEvent.event.target) ? Optional.none() : (() => {\n if (detail.autofocus) {\n simulatedEvent.setSource(component.element);\n return Optional.none();\n } else {\n return Optional.none();\n }\n })();\n return {\n dom: detail.dom,\n components,\n domModification: detail.domModification,\n events: derive$2([\n runOnExecute$1((component, simulatedEvent) => {\n focusWidget(component).each(_widget => {\n simulatedEvent.stop();\n });\n }),\n run$1(mouseover(), onHover),\n run$1(focusItem(), (component, _simulatedEvent) => {\n if (detail.autofocus) {\n focusWidget(component);\n } else {\n Focusing.focus(component);\n }\n })\n ]),\n behaviours: SketchBehaviours.augment(detail.widgetBehaviours, [\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: detail.data\n }\n }),\n Focusing.config({\n ignore: detail.ignoreFocus,\n onFocus: component => {\n onFocus$1(component);\n }\n }),\n Keying.config({\n mode: 'special',\n focusIn: detail.autofocus ? component => {\n focusWidget(component);\n } : revoke(),\n onLeft: onHorizontalArrow,\n onRight: onHorizontalArrow,\n onEscape: (component, simulatedEvent) => {\n if (!Focusing.isFocused(component) && !detail.autofocus) {\n Focusing.focus(component);\n return Optional.some(true);\n } else if (detail.autofocus) {\n simulatedEvent.setSource(component.element);\n return Optional.none();\n } else {\n return Optional.none();\n }\n }\n })\n ])\n };\n };\n const schema$n = [\n required$1('uid'),\n required$1('data'),\n required$1('components'),\n required$1('dom'),\n defaulted('autofocus', false),\n defaulted('ignoreFocus', false),\n SketchBehaviours.field('widgetBehaviours', [\n Representing,\n Focusing,\n Keying\n ]),\n defaulted('domModification', {}),\n defaultUidsSchema(parts$h()),\n output$1('builder', builder)\n ];\n\n const itemSchema$2 = choose$1('type', {\n widget: schema$n,\n item: schema$p,\n separator: schema$o\n });\n const configureGrid = (detail, movementInfo) => ({\n mode: 'flatgrid',\n selector: '.' + detail.markers.item,\n initSize: {\n numColumns: movementInfo.initSize.numColumns,\n numRows: movementInfo.initSize.numRows\n },\n focusManager: detail.focusManager\n });\n const configureMatrix = (detail, movementInfo) => ({\n mode: 'matrix',\n selectors: {\n row: movementInfo.rowSelector,\n cell: '.' + detail.markers.item\n },\n previousSelector: movementInfo.previousSelector,\n focusManager: detail.focusManager\n });\n const configureMenu = (detail, movementInfo) => ({\n mode: 'menu',\n selector: '.' + detail.markers.item,\n moveOnTab: movementInfo.moveOnTab,\n focusManager: detail.focusManager\n });\n const parts$g = constant$1([group({\n factory: {\n sketch: spec => {\n const itemInfo = asRawOrDie$1('menu.spec item', itemSchema$2, spec);\n return itemInfo.builder(itemInfo);\n }\n },\n name: 'items',\n unit: 'item',\n defaults: (detail, u) => {\n return has$2(u, 'uid') ? u : {\n ...u,\n uid: generate$5('item')\n };\n },\n overrides: (detail, u) => {\n return {\n type: u.type,\n ignoreFocus: detail.fakeFocus,\n domModification: { classes: [detail.markers.item] }\n };\n }\n })]);\n const schema$m = constant$1([\n optionString('role'),\n required$1('value'),\n required$1('items'),\n required$1('dom'),\n required$1('components'),\n defaulted('eventOrder', {}),\n field('menuBehaviours', [\n Highlighting,\n Representing,\n Composing,\n Keying\n ]),\n defaultedOf('movement', {\n mode: 'menu',\n moveOnTab: true\n }, choose$1('mode', {\n grid: [\n initSize(),\n output$1('config', configureGrid)\n ],\n matrix: [\n output$1('config', configureMatrix),\n required$1('rowSelector'),\n defaulted('previousSelector', Optional.none)\n ],\n menu: [\n defaulted('moveOnTab', true),\n output$1('config', configureMenu)\n ]\n })),\n itemMarkers(),\n defaulted('fakeFocus', false),\n defaulted('focusManager', dom$2()),\n onHandler('onHighlight'),\n onHandler('onDehighlight'),\n defaulted('showMenuRole', true)\n ]);\n\n const focus = constant$1('alloy.menu-focus');\n\n const deselectOtherRadioItems = (menu, item) => {\n const checkedRadioItems = descendants(menu.element, '[role=\"menuitemradio\"][aria-checked=\"true\"]');\n each$1(checkedRadioItems, ele => {\n if (!eq(ele, item.element)) {\n menu.getSystem().getByDom(ele).each(c => {\n Toggling.off(c);\n });\n }\n });\n };\n const make$7 = (detail, components, _spec, _externals) => ({\n uid: detail.uid,\n dom: detail.dom,\n markers: detail.markers,\n behaviours: augment(detail.menuBehaviours, [\n Highlighting.config({\n highlightClass: detail.markers.selectedItem,\n itemClass: detail.markers.item,\n onHighlight: detail.onHighlight,\n onDehighlight: detail.onDehighlight\n }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: detail.value\n }\n }),\n Composing.config({ find: Optional.some }),\n Keying.config(detail.movement.config(detail, detail.movement))\n ]),\n events: derive$2([\n run$1(focus$1(), (menu, simulatedEvent) => {\n const event = simulatedEvent.event;\n menu.getSystem().getByDom(event.target).each(item => {\n Highlighting.highlight(menu, item);\n simulatedEvent.stop();\n emitWith(menu, focus(), {\n menu,\n item\n });\n });\n }),\n run$1(hover(), (menu, simulatedEvent) => {\n const item = simulatedEvent.event.item;\n Highlighting.highlight(menu, item);\n }),\n run$1(toggled(), (menu, simulatedEvent) => {\n const {item, state} = simulatedEvent.event;\n if (state && get$g(item.element, 'role') === 'menuitemradio') {\n deselectOtherRadioItems(menu, item);\n }\n })\n ]),\n components,\n eventOrder: detail.eventOrder,\n ...detail.showMenuRole ? { domModification: { attributes: { role: detail.role.getOr('menu') } } } : {}\n });\n\n const Menu = composite({\n name: 'Menu',\n configFields: schema$m(),\n partFields: parts$g(),\n factory: make$7\n });\n\n const transpose$1 = obj => tupleMap(obj, (v, k) => ({\n k: v,\n v: k\n }));\n const trace = (items, byItem, byMenu, finish) => get$h(byMenu, finish).bind(triggerItem => get$h(items, triggerItem).bind(triggerMenu => {\n const rest = trace(items, byItem, byMenu, triggerMenu);\n return Optional.some([triggerMenu].concat(rest));\n })).getOr([]);\n const generate$2 = (menus, expansions) => {\n const items = {};\n each(menus, (menuItems, menu) => {\n each$1(menuItems, item => {\n items[item] = menu;\n });\n });\n const byItem = expansions;\n const byMenu = transpose$1(expansions);\n const menuPaths = map$1(byMenu, (_triggerItem, submenu) => [submenu].concat(trace(items, byItem, byMenu, submenu)));\n return map$1(items, menu => get$h(menuPaths, menu).getOr([menu]));\n };\n\n const init$b = () => {\n const expansions = Cell({});\n const menus = Cell({});\n const paths = Cell({});\n const primary = value$4();\n const directory = Cell({});\n const clear = () => {\n expansions.set({});\n menus.set({});\n paths.set({});\n primary.clear();\n };\n const isClear = () => primary.get().isNone();\n const setMenuBuilt = (menuName, built) => {\n menus.set({\n ...menus.get(),\n [menuName]: {\n type: 'prepared',\n menu: built\n }\n });\n };\n const setContents = (sPrimary, sMenus, sExpansions, dir) => {\n primary.set(sPrimary);\n expansions.set(sExpansions);\n menus.set(sMenus);\n directory.set(dir);\n const sPaths = generate$2(dir, sExpansions);\n paths.set(sPaths);\n };\n const getTriggeringItem = menuValue => find$4(expansions.get(), (v, _k) => v === menuValue);\n const getTriggerData = (menuValue, getItemByValue, path) => getPreparedMenu(menuValue).bind(menu => getTriggeringItem(menuValue).bind(triggeringItemValue => getItemByValue(triggeringItemValue).map(triggeredItem => ({\n triggeredMenu: menu,\n triggeringItem: triggeredItem,\n triggeringPath: path\n }))));\n const getTriggeringPath = (itemValue, getItemByValue) => {\n const extraPath = filter$2(lookupItem(itemValue).toArray(), menuValue => getPreparedMenu(menuValue).isSome());\n return get$h(paths.get(), itemValue).bind(path => {\n const revPath = reverse(extraPath.concat(path));\n const triggers = bind$3(revPath, (menuValue, menuIndex) => getTriggerData(menuValue, getItemByValue, revPath.slice(0, menuIndex + 1)).fold(() => is$1(primary.get(), menuValue) ? [] : [Optional.none()], data => [Optional.some(data)]));\n return sequence(triggers);\n });\n };\n const expand = itemValue => get$h(expansions.get(), itemValue).map(menu => {\n const current = get$h(paths.get(), itemValue).getOr([]);\n return [menu].concat(current);\n });\n const collapse = itemValue => get$h(paths.get(), itemValue).bind(path => path.length > 1 ? Optional.some(path.slice(1)) : Optional.none());\n const refresh = itemValue => get$h(paths.get(), itemValue);\n const getPreparedMenu = menuValue => lookupMenu(menuValue).bind(extractPreparedMenu);\n const lookupMenu = menuValue => get$h(menus.get(), menuValue);\n const lookupItem = itemValue => get$h(expansions.get(), itemValue);\n const otherMenus = path => {\n const menuValues = directory.get();\n return difference(keys(menuValues), path);\n };\n const getPrimary = () => primary.get().bind(getPreparedMenu);\n const getMenus = () => menus.get();\n return {\n setMenuBuilt,\n setContents,\n expand,\n refresh,\n collapse,\n lookupMenu,\n lookupItem,\n otherMenus,\n getPrimary,\n getMenus,\n clear,\n isClear,\n getTriggeringPath\n };\n };\n const extractPreparedMenu = prep => prep.type === 'prepared' ? Optional.some(prep.menu) : Optional.none();\n const LayeredState = {\n init: init$b,\n extractPreparedMenu\n };\n\n const onMenuItemHighlightedEvent = generate$6('tiered-menu-item-highlight');\n const onMenuItemDehighlightedEvent = generate$6('tiered-menu-item-dehighlight');\n\n var HighlightOnOpen;\n (function (HighlightOnOpen) {\n HighlightOnOpen[HighlightOnOpen['HighlightMenuAndItem'] = 0] = 'HighlightMenuAndItem';\n HighlightOnOpen[HighlightOnOpen['HighlightJustMenu'] = 1] = 'HighlightJustMenu';\n HighlightOnOpen[HighlightOnOpen['HighlightNone'] = 2] = 'HighlightNone';\n }(HighlightOnOpen || (HighlightOnOpen = {})));\n\n const make$6 = (detail, _rawUiSpec) => {\n const submenuParentItems = value$4();\n const buildMenus = (container, primaryName, menus) => map$1(menus, (spec, name) => {\n const makeSketch = () => Menu.sketch({\n ...spec,\n value: name,\n markers: detail.markers,\n fakeFocus: detail.fakeFocus,\n onHighlight: (menuComp, itemComp) => {\n const highlightData = {\n menuComp,\n itemComp\n };\n emitWith(menuComp, onMenuItemHighlightedEvent, highlightData);\n },\n onDehighlight: (menuComp, itemComp) => {\n const dehighlightData = {\n menuComp,\n itemComp\n };\n emitWith(menuComp, onMenuItemDehighlightedEvent, dehighlightData);\n },\n focusManager: detail.fakeFocus ? highlights() : dom$2()\n });\n return name === primaryName ? {\n type: 'prepared',\n menu: container.getSystem().build(makeSketch())\n } : {\n type: 'notbuilt',\n nbMenu: makeSketch\n };\n });\n const layeredState = LayeredState.init();\n const setup = container => {\n const componentMap = buildMenus(container, detail.data.primary, detail.data.menus);\n const directory = toDirectory();\n layeredState.setContents(detail.data.primary, componentMap, detail.data.expansions, directory);\n return layeredState.getPrimary();\n };\n const getItemValue = item => Representing.getValue(item).value;\n const getItemByValue = (_container, menus, itemValue) => findMap(menus, menu => {\n if (!menu.getSystem().isConnected()) {\n return Optional.none();\n }\n const candidates = Highlighting.getCandidates(menu);\n return find$5(candidates, c => getItemValue(c) === itemValue);\n });\n const toDirectory = _container => map$1(detail.data.menus, (data, _menuName) => bind$3(data.items, item => item.type === 'separator' ? [] : [item.data.value]));\n const setActiveMenu = Highlighting.highlight;\n const setActiveMenuAndItem = (container, menu) => {\n setActiveMenu(container, menu);\n Highlighting.getHighlighted(menu).orThunk(() => Highlighting.getFirst(menu)).each(item => {\n if (detail.fakeFocus) {\n Highlighting.highlight(menu, item);\n } else {\n dispatch(container, item.element, focusItem());\n }\n });\n };\n const getMenus = (state, menuValues) => cat(map$2(menuValues, mv => state.lookupMenu(mv).bind(prep => prep.type === 'prepared' ? Optional.some(prep.menu) : Optional.none())));\n const closeOthers = (container, state, path) => {\n const others = getMenus(state, state.otherMenus(path));\n each$1(others, o => {\n remove$2(o.element, [detail.markers.backgroundMenu]);\n if (!detail.stayInDom) {\n Replacing.remove(container, o);\n }\n });\n };\n const getSubmenuParents = container => submenuParentItems.get().getOrThunk(() => {\n const r = {};\n const items = descendants(container.element, `.${ detail.markers.item }`);\n const parentItems = filter$2(items, i => get$g(i, 'aria-haspopup') === 'true');\n each$1(parentItems, i => {\n container.getSystem().getByDom(i).each(itemComp => {\n const key = getItemValue(itemComp);\n r[key] = itemComp;\n });\n });\n submenuParentItems.set(r);\n return r;\n });\n const updateAriaExpansions = (container, path) => {\n const parentItems = getSubmenuParents(container);\n each(parentItems, (v, k) => {\n const expanded = contains$2(path, k);\n set$9(v.element, 'aria-expanded', expanded);\n });\n };\n const updateMenuPath = (container, state, path) => Optional.from(path[0]).bind(latestMenuName => state.lookupMenu(latestMenuName).bind(menuPrep => {\n if (menuPrep.type === 'notbuilt') {\n return Optional.none();\n } else {\n const activeMenu = menuPrep.menu;\n const rest = getMenus(state, path.slice(1));\n each$1(rest, r => {\n add$2(r.element, detail.markers.backgroundMenu);\n });\n if (!inBody(activeMenu.element)) {\n Replacing.append(container, premade(activeMenu));\n }\n remove$2(activeMenu.element, [detail.markers.backgroundMenu]);\n setActiveMenuAndItem(container, activeMenu);\n closeOthers(container, state, path);\n return Optional.some(activeMenu);\n }\n }));\n let ExpandHighlightDecision;\n (function (ExpandHighlightDecision) {\n ExpandHighlightDecision[ExpandHighlightDecision['HighlightSubmenu'] = 0] = 'HighlightSubmenu';\n ExpandHighlightDecision[ExpandHighlightDecision['HighlightParent'] = 1] = 'HighlightParent';\n }(ExpandHighlightDecision || (ExpandHighlightDecision = {})));\n const buildIfRequired = (container, menuName, menuPrep) => {\n if (menuPrep.type === 'notbuilt') {\n const menu = container.getSystem().build(menuPrep.nbMenu());\n layeredState.setMenuBuilt(menuName, menu);\n return menu;\n } else {\n return menuPrep.menu;\n }\n };\n const expandRight = (container, item, decision = ExpandHighlightDecision.HighlightSubmenu) => {\n if (item.hasConfigured(Disabling) && Disabling.isDisabled(item)) {\n return Optional.some(item);\n } else {\n const value = getItemValue(item);\n return layeredState.expand(value).bind(path => {\n updateAriaExpansions(container, path);\n return Optional.from(path[0]).bind(menuName => layeredState.lookupMenu(menuName).bind(activeMenuPrep => {\n const activeMenu = buildIfRequired(container, menuName, activeMenuPrep);\n if (!inBody(activeMenu.element)) {\n Replacing.append(container, premade(activeMenu));\n }\n detail.onOpenSubmenu(container, item, activeMenu, reverse(path));\n if (decision === ExpandHighlightDecision.HighlightSubmenu) {\n Highlighting.highlightFirst(activeMenu);\n return updateMenuPath(container, layeredState, path);\n } else {\n Highlighting.dehighlightAll(activeMenu);\n return Optional.some(item);\n }\n }));\n });\n }\n };\n const collapseLeft = (container, item) => {\n const value = getItemValue(item);\n return layeredState.collapse(value).bind(path => {\n updateAriaExpansions(container, path);\n return updateMenuPath(container, layeredState, path).map(activeMenu => {\n detail.onCollapseMenu(container, item, activeMenu);\n return activeMenu;\n });\n });\n };\n const updateView = (container, item) => {\n const value = getItemValue(item);\n return layeredState.refresh(value).bind(path => {\n updateAriaExpansions(container, path);\n return updateMenuPath(container, layeredState, path);\n });\n };\n const onRight = (container, item) => inside(item.element) ? Optional.none() : expandRight(container, item, ExpandHighlightDecision.HighlightSubmenu);\n const onLeft = (container, item) => inside(item.element) ? Optional.none() : collapseLeft(container, item);\n const onEscape = (container, item) => collapseLeft(container, item).orThunk(() => detail.onEscape(container, item).map(() => container));\n const keyOnItem = f => (container, simulatedEvent) => {\n return closest$1(simulatedEvent.getSource(), `.${ detail.markers.item }`).bind(target => container.getSystem().getByDom(target).toOptional().bind(item => f(container, item).map(always)));\n };\n const events = derive$2([\n run$1(focus(), (tmenu, simulatedEvent) => {\n const item = simulatedEvent.event.item;\n layeredState.lookupItem(getItemValue(item)).each(() => {\n const menu = simulatedEvent.event.menu;\n Highlighting.highlight(tmenu, menu);\n const value = getItemValue(simulatedEvent.event.item);\n layeredState.refresh(value).each(path => closeOthers(tmenu, layeredState, path));\n });\n }),\n runOnExecute$1((component, simulatedEvent) => {\n const target = simulatedEvent.event.target;\n component.getSystem().getByDom(target).each(item => {\n const itemValue = getItemValue(item);\n if (itemValue.indexOf('collapse-item') === 0) {\n collapseLeft(component, item);\n }\n expandRight(component, item, ExpandHighlightDecision.HighlightSubmenu).fold(() => {\n detail.onExecute(component, item);\n }, noop);\n });\n }),\n runOnAttached((container, _simulatedEvent) => {\n setup(container).each(primary => {\n Replacing.append(container, premade(primary));\n detail.onOpenMenu(container, primary);\n if (detail.highlightOnOpen === HighlightOnOpen.HighlightMenuAndItem) {\n setActiveMenuAndItem(container, primary);\n } else if (detail.highlightOnOpen === HighlightOnOpen.HighlightJustMenu) {\n setActiveMenu(container, primary);\n }\n });\n }),\n run$1(onMenuItemHighlightedEvent, (tmenuComp, se) => {\n detail.onHighlightItem(tmenuComp, se.event.menuComp, se.event.itemComp);\n }),\n run$1(onMenuItemDehighlightedEvent, (tmenuComp, se) => {\n detail.onDehighlightItem(tmenuComp, se.event.menuComp, se.event.itemComp);\n }),\n ...detail.navigateOnHover ? [run$1(hover(), (tmenu, simulatedEvent) => {\n const item = simulatedEvent.event.item;\n updateView(tmenu, item);\n expandRight(tmenu, item, ExpandHighlightDecision.HighlightParent);\n detail.onHover(tmenu, item);\n })] : []\n ]);\n const getActiveItem = container => Highlighting.getHighlighted(container).bind(Highlighting.getHighlighted);\n const collapseMenuApi = container => {\n getActiveItem(container).each(currentItem => {\n collapseLeft(container, currentItem);\n });\n };\n const highlightPrimary = container => {\n layeredState.getPrimary().each(primary => {\n setActiveMenuAndItem(container, primary);\n });\n };\n const extractMenuFromContainer = container => Optional.from(container.components()[0]).filter(comp => get$g(comp.element, 'role') === 'menu');\n const repositionMenus = container => {\n const maybeActivePrimary = layeredState.getPrimary().bind(primary => getActiveItem(container).bind(currentItem => {\n const itemValue = getItemValue(currentItem);\n const allMenus = values(layeredState.getMenus());\n const preparedMenus = cat(map$2(allMenus, LayeredState.extractPreparedMenu));\n return layeredState.getTriggeringPath(itemValue, v => getItemByValue(container, preparedMenus, v));\n }).map(triggeringPath => ({\n primary,\n triggeringPath\n })));\n maybeActivePrimary.fold(() => {\n extractMenuFromContainer(container).each(primaryMenu => {\n detail.onRepositionMenu(container, primaryMenu, []);\n });\n }, ({primary, triggeringPath}) => {\n detail.onRepositionMenu(container, primary, triggeringPath);\n });\n };\n const apis = {\n collapseMenu: collapseMenuApi,\n highlightPrimary,\n repositionMenus\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n markers: detail.markers,\n behaviours: augment(detail.tmenuBehaviours, [\n Keying.config({\n mode: 'special',\n onRight: keyOnItem(onRight),\n onLeft: keyOnItem(onLeft),\n onEscape: keyOnItem(onEscape),\n focusIn: (container, _keyInfo) => {\n layeredState.getPrimary().each(primary => {\n dispatch(container, primary.element, focusItem());\n });\n }\n }),\n Highlighting.config({\n highlightClass: detail.markers.selectedMenu,\n itemClass: detail.markers.menu\n }),\n Composing.config({\n find: container => {\n return Highlighting.getHighlighted(container);\n }\n }),\n Replacing.config({})\n ]),\n eventOrder: detail.eventOrder,\n apis,\n events\n };\n };\n const collapseItem$1 = constant$1('collapse-item');\n\n const tieredData = (primary, menus, expansions) => ({\n primary,\n menus,\n expansions\n });\n const singleData = (name, menu) => ({\n primary: name,\n menus: wrap$1(name, menu),\n expansions: {}\n });\n const collapseItem = text => ({\n value: generate$6(collapseItem$1()),\n meta: { text }\n });\n const tieredMenu = single({\n name: 'TieredMenu',\n configFields: [\n onStrictKeyboardHandler('onExecute'),\n onStrictKeyboardHandler('onEscape'),\n onStrictHandler('onOpenMenu'),\n onStrictHandler('onOpenSubmenu'),\n onHandler('onRepositionMenu'),\n onHandler('onCollapseMenu'),\n defaulted('highlightOnOpen', HighlightOnOpen.HighlightMenuAndItem),\n requiredObjOf('data', [\n required$1('primary'),\n required$1('menus'),\n required$1('expansions')\n ]),\n defaulted('fakeFocus', false),\n onHandler('onHighlightItem'),\n onHandler('onDehighlightItem'),\n onHandler('onHover'),\n tieredMenuMarkers(),\n required$1('dom'),\n defaulted('navigateOnHover', true),\n defaulted('stayInDom', false),\n field('tmenuBehaviours', [\n Keying,\n Highlighting,\n Composing,\n Replacing\n ]),\n defaulted('eventOrder', {})\n ],\n apis: {\n collapseMenu: (apis, tmenu) => {\n apis.collapseMenu(tmenu);\n },\n highlightPrimary: (apis, tmenu) => {\n apis.highlightPrimary(tmenu);\n },\n repositionMenus: (apis, tmenu) => {\n apis.repositionMenus(tmenu);\n }\n },\n factory: make$6,\n extraApis: {\n tieredData,\n singleData,\n collapseItem\n }\n });\n\n const makeMenu = (detail, menuSandbox, placementSpec, menuSpec, getBounds) => {\n const lazySink = () => detail.lazySink(menuSandbox);\n const layouts = menuSpec.type === 'horizontal' ? {\n layouts: {\n onLtr: () => belowOrAbove(),\n onRtl: () => belowOrAboveRtl()\n }\n } : {};\n const isFirstTierSubmenu = triggeringPaths => triggeringPaths.length === 2;\n const getSubmenuLayouts = triggeringPaths => isFirstTierSubmenu(triggeringPaths) ? layouts : {};\n return tieredMenu.sketch({\n dom: { tag: 'div' },\n data: menuSpec.data,\n markers: menuSpec.menu.markers,\n highlightOnOpen: menuSpec.menu.highlightOnOpen,\n fakeFocus: menuSpec.menu.fakeFocus,\n onEscape: () => {\n Sandboxing.close(menuSandbox);\n detail.onEscape.map(handler => handler(menuSandbox));\n return Optional.some(true);\n },\n onExecute: () => {\n return Optional.some(true);\n },\n onOpenMenu: (tmenu, menu) => {\n Positioning.positionWithinBounds(lazySink().getOrDie(), menu, placementSpec, getBounds());\n },\n onOpenSubmenu: (tmenu, item, submenu, triggeringPaths) => {\n const sink = lazySink().getOrDie();\n Positioning.position(sink, submenu, {\n anchor: {\n type: 'submenu',\n item,\n ...getSubmenuLayouts(triggeringPaths)\n }\n });\n },\n onRepositionMenu: (tmenu, primaryMenu, submenuTriggers) => {\n const sink = lazySink().getOrDie();\n Positioning.positionWithinBounds(sink, primaryMenu, placementSpec, getBounds());\n each$1(submenuTriggers, st => {\n const submenuLayouts = getSubmenuLayouts(st.triggeringPath);\n Positioning.position(sink, st.triggeredMenu, {\n anchor: {\n type: 'submenu',\n item: st.triggeringItem,\n ...submenuLayouts\n }\n });\n });\n }\n });\n };\n const factory$o = (detail, spec) => {\n const isPartOfRelated = (sandbox, queryElem) => {\n const related = detail.getRelated(sandbox);\n return related.exists(rel => isPartOf$1(rel, queryElem));\n };\n const setContent = (sandbox, thing) => {\n Sandboxing.setContent(sandbox, thing);\n };\n const showAt = (sandbox, thing, placementSpec) => {\n const getBounds = Optional.none;\n showWithinBounds(sandbox, thing, placementSpec, getBounds);\n };\n const showWithinBounds = (sandbox, thing, placementSpec, getBounds) => {\n const sink = detail.lazySink(sandbox).getOrDie();\n Sandboxing.openWhileCloaked(sandbox, thing, () => Positioning.positionWithinBounds(sink, sandbox, placementSpec, getBounds()));\n Representing.setValue(sandbox, Optional.some({\n mode: 'position',\n config: placementSpec,\n getBounds\n }));\n };\n const showMenuAt = (sandbox, placementSpec, menuSpec) => {\n showMenuWithinBounds(sandbox, placementSpec, menuSpec, Optional.none);\n };\n const showMenuWithinBounds = (sandbox, placementSpec, menuSpec, getBounds) => {\n const menu = makeMenu(detail, sandbox, placementSpec, menuSpec, getBounds);\n Sandboxing.open(sandbox, menu);\n Representing.setValue(sandbox, Optional.some({\n mode: 'menu',\n menu\n }));\n };\n const hide = sandbox => {\n if (Sandboxing.isOpen(sandbox)) {\n Representing.setValue(sandbox, Optional.none());\n Sandboxing.close(sandbox);\n }\n };\n const getContent = sandbox => Sandboxing.getState(sandbox);\n const reposition = sandbox => {\n if (Sandboxing.isOpen(sandbox)) {\n Representing.getValue(sandbox).each(state => {\n switch (state.mode) {\n case 'menu':\n Sandboxing.getState(sandbox).each(tieredMenu.repositionMenus);\n break;\n case 'position':\n const sink = detail.lazySink(sandbox).getOrDie();\n Positioning.positionWithinBounds(sink, sandbox, state.config, state.getBounds());\n break;\n }\n });\n }\n };\n const apis = {\n setContent,\n showAt,\n showWithinBounds,\n showMenuAt,\n showMenuWithinBounds,\n hide,\n getContent,\n reposition,\n isOpen: Sandboxing.isOpen\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n behaviours: augment(detail.inlineBehaviours, [\n Sandboxing.config({\n isPartOf: (sandbox, data, queryElem) => {\n return isPartOf$1(data, queryElem) || isPartOfRelated(sandbox, queryElem);\n },\n getAttachPoint: sandbox => {\n return detail.lazySink(sandbox).getOrDie();\n },\n onOpen: sandbox => {\n detail.onShow(sandbox);\n },\n onClose: sandbox => {\n detail.onHide(sandbox);\n }\n }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: Optional.none()\n }\n }),\n Receiving.config({\n channels: {\n ...receivingChannel$1({\n isExtraPart: spec.isExtraPart,\n ...detail.fireDismissalEventInstead.map(fe => ({ fireEventInstead: { event: fe.event } })).getOr({})\n }),\n ...receivingChannel({\n ...detail.fireRepositionEventInstead.map(fe => ({ fireEventInstead: { event: fe.event } })).getOr({}),\n doReposition: reposition\n })\n }\n })\n ]),\n eventOrder: detail.eventOrder,\n apis\n };\n };\n const InlineView = single({\n name: 'InlineView',\n configFields: [\n required$1('lazySink'),\n onHandler('onShow'),\n onHandler('onHide'),\n optionFunction('onEscape'),\n field('inlineBehaviours', [\n Sandboxing,\n Representing,\n Receiving\n ]),\n optionObjOf('fireDismissalEventInstead', [defaulted('event', dismissRequested())]),\n optionObjOf('fireRepositionEventInstead', [defaulted('event', repositionRequested())]),\n defaulted('getRelated', Optional.none),\n defaulted('isExtraPart', never),\n defaulted('eventOrder', Optional.none)\n ],\n factory: factory$o,\n apis: {\n showAt: (apis, component, anchor, thing) => {\n apis.showAt(component, anchor, thing);\n },\n showWithinBounds: (apis, component, anchor, thing, bounds) => {\n apis.showWithinBounds(component, anchor, thing, bounds);\n },\n showMenuAt: (apis, component, anchor, menuSpec) => {\n apis.showMenuAt(component, anchor, menuSpec);\n },\n showMenuWithinBounds: (apis, component, anchor, menuSpec, bounds) => {\n apis.showMenuWithinBounds(component, anchor, menuSpec, bounds);\n },\n hide: (apis, component) => {\n apis.hide(component);\n },\n isOpen: (apis, component) => apis.isOpen(component),\n getContent: (apis, component) => apis.getContent(component),\n setContent: (apis, component, thing) => {\n apis.setContent(component, thing);\n },\n reposition: (apis, component) => {\n apis.reposition(component);\n }\n }\n });\n\n var global$9 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var ToolbarMode$1;\n (function (ToolbarMode) {\n ToolbarMode['default'] = 'wrap';\n ToolbarMode['floating'] = 'floating';\n ToolbarMode['sliding'] = 'sliding';\n ToolbarMode['scrolling'] = 'scrolling';\n }(ToolbarMode$1 || (ToolbarMode$1 = {})));\n var ToolbarLocation$1;\n (function (ToolbarLocation) {\n ToolbarLocation['auto'] = 'auto';\n ToolbarLocation['top'] = 'top';\n ToolbarLocation['bottom'] = 'bottom';\n }(ToolbarLocation$1 || (ToolbarLocation$1 = {})));\n const option$2 = name => editor => editor.options.get(name);\n const wrapOptional = fn => editor => Optional.from(fn(editor));\n const register$f = editor => {\n const isPhone = global$6.deviceType.isPhone();\n const isMobile = global$6.deviceType.isTablet() || isPhone;\n const registerOption = editor.options.register;\n const stringOrFalseProcessor = value => isString(value) || value === false;\n const stringOrNumberProcessor = value => isString(value) || isNumber(value);\n registerOption('skin', {\n processor: value => isString(value) || value === false,\n default: 'oxide'\n });\n registerOption('skin_url', { processor: 'string' });\n registerOption('height', {\n processor: stringOrNumberProcessor,\n default: Math.max(editor.getElement().offsetHeight, 400)\n });\n registerOption('width', {\n processor: stringOrNumberProcessor,\n default: global$8.DOM.getStyle(editor.getElement(), 'width')\n });\n registerOption('min_height', {\n processor: 'number',\n default: 100\n });\n registerOption('min_width', { processor: 'number' });\n registerOption('max_height', { processor: 'number' });\n registerOption('max_width', { processor: 'number' });\n registerOption('style_formats', { processor: 'object[]' });\n registerOption('style_formats_merge', {\n processor: 'boolean',\n default: false\n });\n registerOption('style_formats_autohide', {\n processor: 'boolean',\n default: false\n });\n registerOption('line_height_formats', {\n processor: 'string',\n default: '1 1.1 1.2 1.3 1.4 1.5 2'\n });\n registerOption('font_family_formats', {\n processor: 'string',\n default: 'Andale Mono=andale mono,monospace;' + 'Arial=arial,helvetica,sans-serif;' + 'Arial Black=arial black,sans-serif;' + 'Book Antiqua=book antiqua,palatino,serif;' + 'Comic Sans MS=comic sans ms,sans-serif;' + 'Courier New=courier new,courier,monospace;' + 'Georgia=georgia,palatino,serif;' + 'Helvetica=helvetica,arial,sans-serif;' + 'Impact=impact,sans-serif;' + 'Symbol=symbol;' + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + 'Terminal=terminal,monaco,monospace;' + 'Times New Roman=times new roman,times,serif;' + 'Trebuchet MS=trebuchet ms,geneva,sans-serif;' + 'Verdana=verdana,geneva,sans-serif;' + 'Webdings=webdings;' + 'Wingdings=wingdings,zapf dingbats'\n });\n registerOption('font_size_formats', {\n processor: 'string',\n default: '8pt 10pt 12pt 14pt 18pt 24pt 36pt'\n });\n registerOption('font_size_input_default_unit', {\n processor: 'string',\n default: 'pt'\n });\n registerOption('block_formats', {\n processor: 'string',\n default: 'Paragraph=p;' + 'Heading 1=h1;' + 'Heading 2=h2;' + 'Heading 3=h3;' + 'Heading 4=h4;' + 'Heading 5=h5;' + 'Heading 6=h6;' + 'Preformatted=pre'\n });\n registerOption('content_langs', { processor: 'object[]' });\n registerOption('removed_menuitems', {\n processor: 'string',\n default: ''\n });\n registerOption('menubar', {\n processor: value => isString(value) || isBoolean(value),\n default: !isPhone\n });\n registerOption('menu', {\n processor: 'object',\n default: {}\n });\n registerOption('toolbar', {\n processor: value => {\n if (isBoolean(value) || isString(value) || isArray(value)) {\n return {\n value,\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be a boolean, string or array.'\n };\n }\n },\n default: true\n });\n range$2(9, num => {\n registerOption('toolbar' + (num + 1), { processor: 'string' });\n });\n registerOption('toolbar_mode', {\n processor: 'string',\n default: isMobile ? 'scrolling' : 'floating'\n });\n registerOption('toolbar_groups', {\n processor: 'object',\n default: {}\n });\n registerOption('toolbar_location', {\n processor: 'string',\n default: ToolbarLocation$1.auto\n });\n registerOption('toolbar_persist', {\n processor: 'boolean',\n default: false\n });\n registerOption('toolbar_sticky', {\n processor: 'boolean',\n default: editor.inline\n });\n registerOption('toolbar_sticky_offset', {\n processor: 'number',\n default: 0\n });\n registerOption('fixed_toolbar_container', {\n processor: 'string',\n default: ''\n });\n registerOption('fixed_toolbar_container_target', { processor: 'object' });\n registerOption('ui_mode', {\n processor: 'string',\n default: 'combined'\n });\n registerOption('file_picker_callback', { processor: 'function' });\n registerOption('file_picker_validator_handler', { processor: 'function' });\n registerOption('file_picker_types', { processor: 'string' });\n registerOption('typeahead_urls', {\n processor: 'boolean',\n default: true\n });\n registerOption('anchor_top', {\n processor: stringOrFalseProcessor,\n default: '#top'\n });\n registerOption('anchor_bottom', {\n processor: stringOrFalseProcessor,\n default: '#bottom'\n });\n registerOption('draggable_modal', {\n processor: 'boolean',\n default: false\n });\n registerOption('statusbar', {\n processor: 'boolean',\n default: true\n });\n registerOption('elementpath', {\n processor: 'boolean',\n default: true\n });\n registerOption('branding', {\n processor: 'boolean',\n default: true\n });\n registerOption('promotion', {\n processor: 'boolean',\n default: true\n });\n registerOption('resize', {\n processor: value => value === 'both' || isBoolean(value),\n default: !global$6.deviceType.isTouch()\n });\n registerOption('sidebar_show', { processor: 'string' });\n registerOption('help_accessibility', {\n processor: 'boolean',\n default: editor.hasPlugin('help')\n });\n registerOption('default_font_stack', {\n processor: 'string[]',\n default: []\n });\n };\n const isReadOnly = option$2('readonly');\n const isDisabled = option$2('disabled');\n const getHeightOption = option$2('height');\n const getWidthOption = option$2('width');\n const getMinWidthOption = wrapOptional(option$2('min_width'));\n const getMinHeightOption = wrapOptional(option$2('min_height'));\n const getMaxWidthOption = wrapOptional(option$2('max_width'));\n const getMaxHeightOption = wrapOptional(option$2('max_height'));\n const getUserStyleFormats = wrapOptional(option$2('style_formats'));\n const shouldMergeStyleFormats = option$2('style_formats_merge');\n const shouldAutoHideStyleFormats = option$2('style_formats_autohide');\n const getContentLanguages = option$2('content_langs');\n const getRemovedMenuItems = option$2('removed_menuitems');\n const getToolbarMode = option$2('toolbar_mode');\n const getToolbarGroups = option$2('toolbar_groups');\n const getToolbarLocation = option$2('toolbar_location');\n const fixedContainerSelector = option$2('fixed_toolbar_container');\n const fixedToolbarContainerTarget = option$2('fixed_toolbar_container_target');\n const isToolbarPersist = option$2('toolbar_persist');\n const getStickyToolbarOffset = option$2('toolbar_sticky_offset');\n const getMenubar = option$2('menubar');\n const getToolbar = option$2('toolbar');\n const getFilePickerCallback = option$2('file_picker_callback');\n const getFilePickerValidatorHandler = option$2('file_picker_validator_handler');\n const getFontSizeInputDefaultUnit = option$2('font_size_input_default_unit');\n const getFilePickerTypes = option$2('file_picker_types');\n const useTypeaheadUrls = option$2('typeahead_urls');\n const getAnchorTop = option$2('anchor_top');\n const getAnchorBottom = option$2('anchor_bottom');\n const isDraggableModal$1 = option$2('draggable_modal');\n const useStatusBar = option$2('statusbar');\n const useElementPath = option$2('elementpath');\n const useBranding = option$2('branding');\n const getResize = option$2('resize');\n const getPasteAsText = option$2('paste_as_text');\n const getSidebarShow = option$2('sidebar_show');\n const promotionEnabled = option$2('promotion');\n const useHelpAccessibility = option$2('help_accessibility');\n const getDefaultFontStack = option$2('default_font_stack');\n const getSkin = option$2('skin');\n const isSkinDisabled = editor => editor.options.get('skin') === false;\n const isMenubarEnabled = editor => editor.options.get('menubar') !== false;\n const getSkinUrl = editor => {\n const skinUrl = editor.options.get('skin_url');\n if (isSkinDisabled(editor)) {\n return skinUrl;\n } else {\n if (skinUrl) {\n return editor.documentBaseURI.toAbsolute(skinUrl);\n } else {\n const skin = editor.options.get('skin');\n return global$7.baseURL + '/skins/ui/' + skin;\n }\n }\n };\n const getSkinUrlOption = editor => Optional.from(editor.options.get('skin_url'));\n const getLineHeightFormats = editor => editor.options.get('line_height_formats').split(' ');\n const isToolbarEnabled = editor => {\n const toolbar = getToolbar(editor);\n const isToolbarString = isString(toolbar);\n const isToolbarObjectArray = isArray(toolbar) && toolbar.length > 0;\n return !isMultipleToolbars(editor) && (isToolbarObjectArray || isToolbarString || toolbar === true);\n };\n const getMultipleToolbarsOption = editor => {\n const toolbars = range$2(9, num => editor.options.get('toolbar' + (num + 1)));\n const toolbarArray = filter$2(toolbars, isString);\n return someIf(toolbarArray.length > 0, toolbarArray);\n };\n const isMultipleToolbars = editor => getMultipleToolbarsOption(editor).fold(() => {\n const toolbar = getToolbar(editor);\n return isArrayOf(toolbar, isString) && toolbar.length > 0;\n }, always);\n const isToolbarLocationBottom = editor => getToolbarLocation(editor) === ToolbarLocation$1.bottom;\n const fixedContainerTarget = editor => {\n var _a;\n if (!editor.inline) {\n return Optional.none();\n }\n const selector = (_a = fixedContainerSelector(editor)) !== null && _a !== void 0 ? _a : '';\n if (selector.length > 0) {\n return descendant(body(), selector);\n }\n const element = fixedToolbarContainerTarget(editor);\n if (isNonNullable(element)) {\n return Optional.some(SugarElement.fromDom(element));\n }\n return Optional.none();\n };\n const useFixedContainer = editor => editor.inline && fixedContainerTarget(editor).isSome();\n const getUiContainer = editor => {\n const fixedContainer = fixedContainerTarget(editor);\n return fixedContainer.getOrThunk(() => getContentContainer(getRootNode(SugarElement.fromDom(editor.getElement()))));\n };\n const isDistractionFree = editor => editor.inline && !isMenubarEnabled(editor) && !isToolbarEnabled(editor) && !isMultipleToolbars(editor);\n const isStickyToolbar = editor => {\n const isStickyToolbar = editor.options.get('toolbar_sticky');\n return (isStickyToolbar || editor.inline) && !useFixedContainer(editor) && !isDistractionFree(editor);\n };\n const isSplitUiMode = editor => !useFixedContainer(editor) && editor.options.get('ui_mode') === 'split';\n const getMenus = editor => {\n const menu = editor.options.get('menu');\n return map$1(menu, menu => ({\n ...menu,\n items: menu.items\n }));\n };\n\n var Options = /*#__PURE__*/Object.freeze({\n __proto__: null,\n get ToolbarMode () { return ToolbarMode$1; },\n get ToolbarLocation () { return ToolbarLocation$1; },\n register: register$f,\n getSkinUrl: getSkinUrl,\n getSkinUrlOption: getSkinUrlOption,\n isReadOnly: isReadOnly,\n isDisabled: isDisabled,\n getSkin: getSkin,\n isSkinDisabled: isSkinDisabled,\n getHeightOption: getHeightOption,\n getWidthOption: getWidthOption,\n getMinWidthOption: getMinWidthOption,\n getMinHeightOption: getMinHeightOption,\n getMaxWidthOption: getMaxWidthOption,\n getMaxHeightOption: getMaxHeightOption,\n getUserStyleFormats: getUserStyleFormats,\n shouldMergeStyleFormats: shouldMergeStyleFormats,\n shouldAutoHideStyleFormats: shouldAutoHideStyleFormats,\n getLineHeightFormats: getLineHeightFormats,\n getContentLanguages: getContentLanguages,\n getRemovedMenuItems: getRemovedMenuItems,\n isMenubarEnabled: isMenubarEnabled,\n isMultipleToolbars: isMultipleToolbars,\n isToolbarEnabled: isToolbarEnabled,\n isToolbarPersist: isToolbarPersist,\n getMultipleToolbarsOption: getMultipleToolbarsOption,\n getUiContainer: getUiContainer,\n useFixedContainer: useFixedContainer,\n isSplitUiMode: isSplitUiMode,\n getToolbarMode: getToolbarMode,\n isDraggableModal: isDraggableModal$1,\n isDistractionFree: isDistractionFree,\n isStickyToolbar: isStickyToolbar,\n getStickyToolbarOffset: getStickyToolbarOffset,\n getToolbarLocation: getToolbarLocation,\n isToolbarLocationBottom: isToolbarLocationBottom,\n getToolbarGroups: getToolbarGroups,\n getMenus: getMenus,\n getMenubar: getMenubar,\n getToolbar: getToolbar,\n getFilePickerCallback: getFilePickerCallback,\n getFilePickerTypes: getFilePickerTypes,\n useTypeaheadUrls: useTypeaheadUrls,\n getAnchorTop: getAnchorTop,\n getAnchorBottom: getAnchorBottom,\n getFilePickerValidatorHandler: getFilePickerValidatorHandler,\n getFontSizeInputDefaultUnit: getFontSizeInputDefaultUnit,\n useStatusBar: useStatusBar,\n useElementPath: useElementPath,\n promotionEnabled: promotionEnabled,\n useBranding: useBranding,\n getResize: getResize,\n getPasteAsText: getPasteAsText,\n getSidebarShow: getSidebarShow,\n useHelpAccessibility: useHelpAccessibility,\n getDefaultFontStack: getDefaultFontStack\n });\n\n const nonScrollingOverflows = [\n 'visible',\n 'hidden',\n 'clip'\n ];\n const isScrollingOverflowValue = value => trim$1(value).length > 0 && !contains$2(nonScrollingOverflows, value);\n const isScroller = elem => {\n if (isHTMLElement(elem)) {\n const overflowX = get$f(elem, 'overflow-x');\n const overflowY = get$f(elem, 'overflow-y');\n return isScrollingOverflowValue(overflowX) || isScrollingOverflowValue(overflowY);\n } else {\n return false;\n }\n };\n const isFullscreen = editor => editor.plugins.fullscreen && editor.plugins.fullscreen.isFullscreen();\n const detect = (editor, popupSinkElem) => {\n const ancestorsScrollers = ancestors(popupSinkElem, isScroller);\n const scrollers = ancestorsScrollers.length === 0 ? getShadowRoot(popupSinkElem).map(getShadowHost).map(x => ancestors(x, isScroller)).getOr([]) : ancestorsScrollers;\n return head(scrollers).map(element => ({\n element,\n others: scrollers.slice(1),\n isFullscreen: () => isFullscreen(editor)\n }));\n };\n const detectWhenSplitUiMode = (editor, popupSinkElem) => isSplitUiMode(editor) ? detect(editor, popupSinkElem) : Optional.none();\n const getBoundsFrom = sc => {\n const scrollableBoxes = [\n ...map$2(sc.others, box$1),\n win()\n ];\n return sc.isFullscreen() ? win() : constrainByMany(box$1(sc.element), scrollableBoxes);\n };\n\n const factory$n = detail => {\n const events = events$9(detail.action);\n const tag = detail.dom.tag;\n const lookupAttr = attr => get$h(detail.dom, 'attributes').bind(attrs => get$h(attrs, attr));\n const getModAttributes = () => {\n if (tag === 'button') {\n const type = lookupAttr('type').getOr('button');\n const roleAttrs = lookupAttr('role').map(role => ({ role })).getOr({});\n return {\n type,\n ...roleAttrs\n };\n } else {\n const role = detail.role.getOr(lookupAttr('role').getOr('button'));\n return { role };\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: detail.components,\n events,\n behaviours: SketchBehaviours.augment(detail.buttonBehaviours, [\n Focusing.config({}),\n Keying.config({\n mode: 'execution',\n useSpace: true,\n useEnter: true\n })\n ]),\n domModification: { attributes: getModAttributes() },\n eventOrder: detail.eventOrder\n };\n };\n const Button = single({\n name: 'Button',\n factory: factory$n,\n configFields: [\n defaulted('uid', undefined),\n required$1('dom'),\n defaulted('components', []),\n SketchBehaviours.field('buttonBehaviours', [\n Focusing,\n Keying\n ]),\n option$3('action'),\n option$3('role'),\n defaulted('eventOrder', {})\n ]\n });\n\n const getAttrs = elem => {\n const attributes = elem.dom.attributes !== undefined ? elem.dom.attributes : [];\n return foldl(attributes, (b, attr) => {\n if (attr.name === 'class') {\n return b;\n } else {\n return {\n ...b,\n [attr.name]: attr.value\n };\n }\n }, {});\n };\n const getClasses = elem => Array.prototype.slice.call(elem.dom.classList, 0);\n const fromHtml = html => {\n const elem = SugarElement.fromHtml(html);\n const children$1 = children(elem);\n const attrs = getAttrs(elem);\n const classes = getClasses(elem);\n const contents = children$1.length === 0 ? {} : { innerHtml: get$8(elem) };\n return {\n tag: name$3(elem),\n classes,\n attributes: attrs,\n ...contents\n };\n };\n\n const record = spec => {\n const uid = isSketchSpec(spec) && hasNonNullableKey(spec, 'uid') ? spec.uid : generate$5('memento');\n const get = anyInSystem => anyInSystem.getSystem().getByUid(uid).getOrDie();\n const getOpt = anyInSystem => anyInSystem.getSystem().getByUid(uid).toOptional();\n const asSpec = () => ({\n ...spec,\n uid\n });\n return {\n get,\n getOpt,\n asSpec\n };\n };\n\n const exhibit$2 = (base, tabConfig) => nu$8({\n attributes: wrapAll([{\n key: tabConfig.tabAttr,\n value: 'true'\n }])\n });\n\n var ActiveTabstopping = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$2\n });\n\n var TabstopSchema = [defaulted('tabAttr', 'data-alloy-tabstop')];\n\n const Tabstopping = create$4({\n fields: TabstopSchema,\n name: 'tabstopping',\n active: ActiveTabstopping\n });\n\n const ExclusivityChannel = generate$6('tooltip.exclusive');\n const ShowTooltipEvent = generate$6('tooltip.show');\n const HideTooltipEvent = generate$6('tooltip.hide');\n const ImmediateHideTooltipEvent = generate$6('tooltip.immediateHide');\n const ImmediateShowTooltipEvent = generate$6('tooltip.immediateShow');\n\n const hideAllExclusive = (component, _tConfig, _tState) => {\n component.getSystem().broadcastOn([ExclusivityChannel], {});\n };\n const setComponents = (_component, _tConfig, tState, specs) => {\n tState.getTooltip().each(tooltip => {\n if (tooltip.getSystem().isConnected()) {\n Replacing.set(tooltip, specs);\n }\n });\n };\n const isEnabled = (_component, _tConfig, tState) => tState.isEnabled();\n const setEnabled = (_component, _tConfig, tState, enabled) => tState.setEnabled(enabled);\n const immediateOpenClose = (component, _tConfig, _tState, open) => emit(component, open ? ImmediateShowTooltipEvent : ImmediateHideTooltipEvent);\n\n var TooltippingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n hideAllExclusive: hideAllExclusive,\n immediateOpenClose: immediateOpenClose,\n isEnabled: isEnabled,\n setComponents: setComponents,\n setEnabled: setEnabled\n });\n\n const events$8 = (tooltipConfig, state) => {\n const hide = comp => {\n state.getTooltip().each(p => {\n if (p.getSystem().isConnected()) {\n detach(p);\n tooltipConfig.onHide(comp, p);\n state.clearTooltip();\n }\n });\n state.clearTimer();\n };\n const show = comp => {\n if (!state.isShowing() && state.isEnabled()) {\n hideAllExclusive(comp);\n const sink = tooltipConfig.lazySink(comp).getOrDie();\n const popup = comp.getSystem().build({\n dom: tooltipConfig.tooltipDom,\n components: tooltipConfig.tooltipComponents,\n events: derive$2(tooltipConfig.mode === 'normal' ? [\n run$1(mouseover(), _ => {\n emit(comp, ShowTooltipEvent);\n }),\n run$1(mouseout(), _ => {\n emit(comp, HideTooltipEvent);\n })\n ] : []),\n behaviours: derive$1([Replacing.config({})])\n });\n state.setTooltip(popup);\n attach(sink, popup);\n tooltipConfig.onShow(comp, popup);\n Positioning.position(sink, popup, { anchor: tooltipConfig.anchor(comp) });\n }\n };\n const reposition = comp => {\n state.getTooltip().each(tooltip => {\n const sink = tooltipConfig.lazySink(comp).getOrDie();\n Positioning.position(sink, tooltip, { anchor: tooltipConfig.anchor(comp) });\n });\n };\n const getEvents = () => {\n switch (tooltipConfig.mode) {\n case 'normal':\n return [\n run$1(focusin(), comp => {\n emit(comp, ImmediateShowTooltipEvent);\n }),\n run$1(postBlur(), comp => {\n emit(comp, ImmediateHideTooltipEvent);\n }),\n run$1(mouseover(), comp => {\n emit(comp, ShowTooltipEvent);\n }),\n run$1(mouseout(), comp => {\n emit(comp, HideTooltipEvent);\n })\n ];\n case 'follow-highlight':\n return [\n run$1(highlight$1(), (comp, _se) => {\n emit(comp, ShowTooltipEvent);\n }),\n run$1(dehighlight$1(), comp => {\n emit(comp, HideTooltipEvent);\n })\n ];\n case 'children-normal':\n return [\n run$1(focusin(), (comp, se) => {\n search(comp.element).each(_ => {\n if (is(se.event.target, '[data-mce-tooltip]')) {\n state.getTooltip().fold(() => {\n emit(comp, ImmediateShowTooltipEvent);\n }, tooltip => {\n if (state.isShowing()) {\n tooltipConfig.onShow(comp, tooltip);\n reposition(comp);\n }\n });\n }\n });\n }),\n run$1(postBlur(), comp => {\n search(comp.element).fold(() => {\n emit(comp, ImmediateHideTooltipEvent);\n }, noop);\n }),\n run$1(mouseover(), comp => {\n descendant(comp.element, '[data-mce-tooltip]:hover').each(_ => {\n state.getTooltip().fold(() => {\n emit(comp, ShowTooltipEvent);\n }, tooltip => {\n if (state.isShowing()) {\n tooltipConfig.onShow(comp, tooltip);\n reposition(comp);\n }\n });\n });\n }),\n run$1(mouseout(), comp => {\n descendant(comp.element, '[data-mce-tooltip]:hover').fold(() => {\n emit(comp, HideTooltipEvent);\n }, noop);\n })\n ];\n default:\n return [\n run$1(focusin(), (comp, se) => {\n search(comp.element).each(_ => {\n if (is(se.event.target, '[data-mce-tooltip]')) {\n state.getTooltip().fold(() => {\n emit(comp, ImmediateShowTooltipEvent);\n }, tooltip => {\n if (state.isShowing()) {\n tooltipConfig.onShow(comp, tooltip);\n reposition(comp);\n }\n });\n }\n });\n }),\n run$1(postBlur(), comp => {\n search(comp.element).fold(() => {\n emit(comp, ImmediateHideTooltipEvent);\n }, noop);\n })\n ];\n }\n };\n return derive$2(flatten([\n [\n runOnInit(component => {\n tooltipConfig.onSetup(component);\n }),\n run$1(ShowTooltipEvent, comp => {\n state.resetTimer(() => {\n show(comp);\n }, tooltipConfig.delayForShow());\n }),\n run$1(HideTooltipEvent, comp => {\n state.resetTimer(() => {\n hide(comp);\n }, tooltipConfig.delayForHide());\n }),\n run$1(ImmediateShowTooltipEvent, comp => {\n state.resetTimer(() => {\n show(comp);\n }, 0);\n }),\n run$1(ImmediateHideTooltipEvent, comp => {\n state.resetTimer(() => {\n hide(comp);\n }, 0);\n }),\n run$1(receive(), (comp, message) => {\n const receivingData = message;\n if (!receivingData.universal) {\n if (contains$2(receivingData.channels, ExclusivityChannel)) {\n hide(comp);\n }\n }\n }),\n runOnDetached(comp => {\n hide(comp);\n })\n ],\n getEvents()\n ]));\n };\n\n var ActiveTooltipping = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$8\n });\n\n var TooltippingSchema = [\n required$1('lazySink'),\n required$1('tooltipDom'),\n defaulted('exclusive', true),\n defaulted('tooltipComponents', []),\n defaultedFunction('delayForShow', constant$1(300)),\n defaultedFunction('delayForHide', constant$1(100)),\n defaultedFunction('onSetup', noop),\n defaultedStringEnum('mode', 'normal', [\n 'normal',\n 'follow-highlight',\n 'children-keyboard-focus',\n 'children-normal'\n ]),\n defaulted('anchor', comp => ({\n type: 'hotspot',\n hotspot: comp,\n layouts: {\n onLtr: constant$1([\n south$2,\n north$2,\n southeast$2,\n northeast$2,\n southwest$2,\n northwest$2\n ]),\n onRtl: constant$1([\n south$2,\n north$2,\n southeast$2,\n northeast$2,\n southwest$2,\n northwest$2\n ])\n },\n bubble: nu$5(0, -2, {})\n })),\n onHandler('onHide'),\n onHandler('onShow')\n ];\n\n const init$a = () => {\n const enabled = Cell(true);\n const timer = value$4();\n const popup = value$4();\n const clearTimer = () => {\n timer.on(clearTimeout);\n };\n const resetTimer = (f, delay) => {\n clearTimer();\n timer.set(setTimeout(f, delay));\n };\n const readState = constant$1('not-implemented');\n return nu$7({\n getTooltip: popup.get,\n isShowing: popup.isSet,\n setTooltip: popup.set,\n clearTooltip: popup.clear,\n clearTimer,\n resetTimer,\n readState,\n isEnabled: () => enabled.get(),\n setEnabled: setToEnabled => enabled.set(setToEnabled)\n });\n };\n\n var TooltippingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$a\n });\n\n const Tooltipping = create$4({\n fields: TooltippingSchema,\n name: 'tooltipping',\n active: ActiveTooltipping,\n state: TooltippingState,\n apis: TooltippingApis\n });\n\n /*! @license DOMPurify 3.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],\n Optional.from(notificationIconMap[detail.level]).toArray()\n ]);\n const memButton = record(Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-notification__dismiss',\n 'tox-button',\n 'tox-button--naked',\n 'tox-button--icon'\n ],\n attributes: { 'aria-label': detail.backstageProvider.translate('Close') }\n },\n components: [render$3('close', {\n tag: 'span',\n classes: ['tox-icon']\n }, detail.iconProvider)],\n buttonBehaviours: derive$1([\n Tabstopping.config({}),\n Tooltipping.config({ ...detail.backstageProvider.tooltips.getConfig({ tooltipText: detail.backstageProvider.translate('Close') }) })\n ]),\n action: comp => {\n detail.onAction(comp);\n }\n }));\n const notificationIconSpec = renderFirst(iconChoices, {\n tag: 'div',\n classes: ['tox-notification__icon']\n }, detail.iconProvider);\n const notificationBodySpec = {\n dom: {\n tag: 'div',\n classes: ['tox-notification__body']\n },\n components: [memBannerText.asSpec()],\n behaviours: derive$1([Replacing.config({})])\n };\n const components = [\n notificationIconSpec,\n notificationBodySpec\n ];\n return {\n uid: detail.uid,\n dom: {\n tag: 'div',\n attributes: {\n 'role': 'alert',\n 'aria-labelledby': notificationTextId\n },\n classes: [\n 'tox-notification',\n 'tox-notification--in',\n `tox-notification--${ detail.level }`\n ]\n },\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({}),\n Keying.config({\n mode: 'special',\n onEscape: comp => {\n detail.onAction(comp);\n return Optional.some(true);\n }\n })\n ]),\n components: components.concat(detail.progress ? [memBannerProgress.asSpec()] : []).concat([memButton.asSpec()]),\n apis\n };\n };\n const Notification = single({\n name: 'Notification',\n factory: factory$m,\n configFields: [\n defaultedStringEnum('level', 'info', [\n 'success',\n 'error',\n 'warning',\n 'warn',\n 'info'\n ]),\n required$1('progress'),\n option$3('icon'),\n required$1('onAction'),\n required$1('text'),\n required$1('iconProvider'),\n required$1('backstageProvider')\n ],\n apis: {\n updateProgress: (apis, comp, percent) => {\n apis.updateProgress(comp, percent);\n },\n updateText: (apis, comp, text) => {\n apis.updateText(comp, text);\n }\n }\n });\n\n var NotificationManagerImpl = (editor, extras, uiMothership, notificationRegion) => {\n const sharedBackstage = extras.backstage.shared;\n const getBoundsContainer = () => SugarElement.fromDom(editor.queryCommandValue('ToggleView') === '' ? editor.getContentAreaContainer() : editor.getContainer());\n const getBounds = () => {\n const contentArea = box$1(getBoundsContainer());\n return Optional.some(contentArea);\n };\n const clampComponentsToBounds = components => {\n getBounds().each(bounds => {\n each$1(components, comp => {\n remove$7(comp.element, 'width');\n if (get$d(comp.element) > bounds.width) {\n set$8(comp.element, 'width', bounds.width + 'px');\n }\n });\n });\n };\n const open = (settings, closeCallback, isEditorOrUIFocused) => {\n const close = () => {\n const removeNotificationAndReposition = region => {\n Replacing.remove(region, notification);\n reposition();\n };\n const manageRegionVisibility = (region, editorOrUiFocused) => {\n if (children(region.element).length === 0) {\n handleEmptyRegion(region, editorOrUiFocused);\n } else {\n handleRegionWithChildren(region, editorOrUiFocused);\n }\n };\n const handleEmptyRegion = (region, editorOrUIFocused) => {\n InlineView.hide(region);\n notificationRegion.clear();\n if (editorOrUIFocused) {\n editor.focus();\n }\n };\n const handleRegionWithChildren = (region, editorOrUIFocused) => {\n if (editorOrUIFocused) {\n Keying.focusIn(region);\n }\n };\n notificationRegion.on(region => {\n closeCallback();\n const editorOrUIFocused = isEditorOrUIFocused();\n removeNotificationAndReposition(region);\n manageRegionVisibility(region, editorOrUIFocused);\n });\n };\n const shouldApplyDocking = () => !isStickyToolbar(editor) || !sharedBackstage.header.isPositionedAtTop();\n const notification = build$1(Notification.sketch({\n text: settings.text,\n level: contains$2([\n 'success',\n 'error',\n 'warning',\n 'warn',\n 'info'\n ], settings.type) ? settings.type : undefined,\n progress: settings.progressBar === true,\n icon: settings.icon,\n onAction: close,\n iconProvider: sharedBackstage.providers.icons,\n backstageProvider: sharedBackstage.providers\n }));\n if (!notificationRegion.isSet()) {\n const notificationWrapper = build$1(InlineView.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-notifications-container'],\n attributes: {\n 'aria-label': 'Notifications',\n 'role': 'region'\n }\n },\n lazySink: sharedBackstage.getSink,\n fireDismissalEventInstead: {},\n ...sharedBackstage.header.isPositionedAtTop() ? {} : { fireRepositionEventInstead: {} },\n inlineBehaviours: derive$1([\n Keying.config({\n mode: 'cyclic',\n selector: '.tox-notification, .tox-notification a, .tox-notification button'\n }),\n Replacing.config({}),\n ...shouldApplyDocking() ? [Docking.config({\n contextual: {\n lazyContext: () => Optional.some(box$1(getBoundsContainer())),\n fadeInClass: 'tox-notification-container-dock-fadein',\n fadeOutClass: 'tox-notification-container-dock-fadeout',\n transitionClass: 'tox-notification-container-dock-transition'\n },\n modes: ['top'],\n lazyViewport: comp => {\n const optScrollingContext = detectWhenSplitUiMode(editor, comp.element);\n return optScrollingContext.map(sc => {\n const combinedBounds = getBoundsFrom(sc);\n return {\n bounds: combinedBounds,\n optScrollEnv: Optional.some({\n currentScrollTop: sc.element.dom.scrollTop,\n scrollElmTop: absolute$3(sc.element).top\n })\n };\n }).getOrThunk(() => ({\n bounds: win(),\n optScrollEnv: Optional.none()\n }));\n }\n })] : []\n ])\n }));\n const notificationSpec = premade(notification);\n const anchorOverrides = { maxHeightFunction: expandable$1() };\n const anchor = {\n ...sharedBackstage.anchors.banner(),\n overrides: anchorOverrides\n };\n notificationRegion.set(notificationWrapper);\n uiMothership.add(notificationWrapper);\n InlineView.showWithinBounds(notificationWrapper, notificationSpec, { anchor }, getBounds);\n } else {\n const notificationSpec = premade(notification);\n notificationRegion.on(notificationWrapper => {\n Replacing.append(notificationWrapper, notificationSpec);\n InlineView.reposition(notificationWrapper);\n if (notification.hasConfigured(Docking)) {\n Docking.refresh(notificationWrapper);\n }\n clampComponentsToBounds(notificationWrapper.components());\n });\n }\n if (isNumber(settings.timeout) && settings.timeout > 0) {\n global$9.setEditorTimeout(editor, () => {\n close();\n }, settings.timeout);\n }\n const reposition = () => {\n notificationRegion.on(region => {\n InlineView.reposition(region);\n if (region.hasConfigured(Docking)) {\n Docking.refresh(region);\n }\n clampComponentsToBounds(region.components());\n });\n };\n const thisNotification = {\n close,\n reposition,\n text: nuText => {\n Notification.updateText(notification, nuText);\n },\n settings,\n getEl: () => notification.element.dom,\n progressBar: {\n value: percent => {\n Notification.updateProgress(notification, percent);\n }\n }\n };\n return thisNotification;\n };\n const close = notification => {\n notification.close();\n };\n const getArgs = notification => {\n return notification.settings;\n };\n return {\n open,\n close,\n getArgs\n };\n };\n\n const setup$e = (api, editor) => {\n const redirectKeyToItem = (item, e) => {\n emitWith(item, keydown(), { raw: e });\n };\n const getItem = () => api.getMenu().bind(Highlighting.getHighlighted);\n editor.on('keydown', e => {\n const keyCode = e.which;\n if (!api.isActive()) {\n return;\n }\n if (api.isMenuOpen()) {\n if (keyCode === 13) {\n getItem().each(emitExecute);\n e.preventDefault();\n } else if (keyCode === 40) {\n getItem().fold(() => {\n api.getMenu().each(Highlighting.highlightFirst);\n }, item => {\n redirectKeyToItem(item, e);\n });\n e.preventDefault();\n e.stopImmediatePropagation();\n } else if (keyCode === 37 || keyCode === 38 || keyCode === 39) {\n getItem().each(item => {\n redirectKeyToItem(item, e);\n e.preventDefault();\n e.stopImmediatePropagation();\n });\n }\n } else {\n if (keyCode === 13 || keyCode === 38 || keyCode === 40) {\n api.cancelIfNecessary();\n }\n }\n });\n editor.on('NodeChange', () => {\n if (api.isActive() && !api.isProcessingAction() && !editor.queryCommandState('mceAutoCompleterInRange')) {\n api.cancelIfNecessary();\n }\n });\n };\n const AutocompleterEditorEvents = { setup: setup$e };\n\n var ItemResponse;\n (function (ItemResponse) {\n ItemResponse[ItemResponse['CLOSE_ON_EXECUTE'] = 0] = 'CLOSE_ON_EXECUTE';\n ItemResponse[ItemResponse['BUBBLE_TO_SANDBOX'] = 1] = 'BUBBLE_TO_SANDBOX';\n }(ItemResponse || (ItemResponse = {})));\n var ItemResponse$1 = ItemResponse;\n\n const navClass = 'tox-menu-nav__js';\n const selectableClass = 'tox-collection__item';\n const colorClass = 'tox-swatch';\n const presetClasses = {\n normal: navClass,\n color: colorClass\n };\n const tickedClass = 'tox-collection__item--enabled';\n const groupHeadingClass = 'tox-collection__group-heading';\n const iconClass = 'tox-collection__item-icon';\n const textClass = 'tox-collection__item-label';\n const accessoryClass = 'tox-collection__item-accessory';\n const caretClass = 'tox-collection__item-caret';\n const checkmarkClass = 'tox-collection__item-checkmark';\n const activeClass = 'tox-collection__item--active';\n const containerClass = 'tox-collection__item-container';\n const containerColumnClass = 'tox-collection__item-container--column';\n const containerRowClass = 'tox-collection__item-container--row';\n const containerAlignRightClass = 'tox-collection__item-container--align-right';\n const containerAlignLeftClass = 'tox-collection__item-container--align-left';\n const containerValignTopClass = 'tox-collection__item-container--valign-top';\n const containerValignMiddleClass = 'tox-collection__item-container--valign-middle';\n const containerValignBottomClass = 'tox-collection__item-container--valign-bottom';\n const classForPreset = presets => get$h(presetClasses, presets).getOr(navClass);\n\n const forMenu = presets => {\n if (presets === 'color') {\n return 'tox-swatches';\n } else {\n return 'tox-menu';\n }\n };\n const classes = presets => ({\n backgroundMenu: 'tox-background-menu',\n selectedMenu: 'tox-selected-menu',\n selectedItem: 'tox-collection__item--active',\n hasIcons: 'tox-menu--has-icons',\n menu: forMenu(presets),\n tieredMenu: 'tox-tiered-menu'\n });\n\n const markers = presets => {\n const menuClasses = classes(presets);\n return {\n backgroundMenu: menuClasses.backgroundMenu,\n selectedMenu: menuClasses.selectedMenu,\n menu: menuClasses.menu,\n selectedItem: menuClasses.selectedItem,\n item: classForPreset(presets)\n };\n };\n const dom$1 = (hasIcons, columns, presets) => {\n const menuClasses = classes(presets);\n return {\n tag: 'div',\n classes: flatten([\n [\n menuClasses.menu,\n `tox-menu-${ columns }-column`\n ],\n hasIcons ? [menuClasses.hasIcons] : []\n ])\n };\n };\n const components = [Menu.parts.items({})];\n const part = (hasIcons, columns, presets) => {\n const menuClasses = classes(presets);\n const d = {\n tag: 'div',\n classes: flatten([[menuClasses.tieredMenu]])\n };\n return {\n dom: d,\n markers: markers(presets)\n };\n };\n\n const schema$l = constant$1([\n defaultedString('type', 'text'),\n option$3('data'),\n defaulted('inputAttributes', {}),\n defaulted('inputStyles', {}),\n defaulted('tag', 'input'),\n defaulted('inputClasses', []),\n onHandler('onSetValue'),\n defaultedFunction('fromInputValue', identity),\n defaultedFunction('toInputValue', identity),\n defaulted('styles', {}),\n defaulted('eventOrder', {}),\n field('inputBehaviours', [\n Representing,\n Focusing\n ]),\n defaulted('selectOnFocus', true)\n ]);\n const focusBehaviours = detail => derive$1([Focusing.config({\n onFocus: !detail.selectOnFocus ? noop : component => {\n const input = component.element;\n const value = get$7(input);\n if (detail.type !== 'range') {\n input.dom.setSelectionRange(0, value.length);\n }\n }\n })]);\n const behaviours = detail => ({\n ...focusBehaviours(detail),\n ...augment(detail.inputBehaviours, [Representing.config({\n store: {\n mode: 'manual',\n ...detail.data.map(data => ({ initialValue: data })).getOr({}),\n getValue: input => {\n return detail.fromInputValue(get$7(input.element));\n },\n setValue: (input, data) => {\n const current = get$7(input.element);\n if (current !== data) {\n set$5(input.element, detail.toInputValue(data));\n }\n }\n },\n onSetValue: detail.onSetValue\n })])\n });\n const dom = detail => ({\n tag: detail.tag,\n attributes: {\n type: detail.type,\n ...detail.inputAttributes\n },\n styles: detail.inputStyles,\n classes: detail.inputClasses\n });\n\n const factory$l = (detail, _spec) => ({\n uid: detail.uid,\n dom: dom(detail),\n components: [],\n behaviours: behaviours(detail),\n eventOrder: detail.eventOrder\n });\n const Input = single({\n name: 'Input',\n configFields: schema$l(),\n factory: factory$l\n });\n\n const refetchTriggerEvent = generate$6('refetch-trigger-event');\n const redirectMenuItemInteractionEvent = generate$6('redirect-menu-item-interaction');\n\n const menuSearcherClass = 'tox-menu__searcher';\n const findWithinSandbox = sandboxComp => {\n return descendant(sandboxComp.element, `.${ menuSearcherClass }`).bind(inputElem => sandboxComp.getSystem().getByDom(inputElem).toOptional());\n };\n const findWithinMenu = findWithinSandbox;\n const restoreState = (inputComp, searcherState) => {\n Representing.setValue(inputComp, searcherState.fetchPattern);\n inputComp.element.dom.selectionStart = searcherState.selectionStart;\n inputComp.element.dom.selectionEnd = searcherState.selectionEnd;\n };\n const saveState = inputComp => {\n const fetchPattern = Representing.getValue(inputComp);\n const selectionStart = inputComp.element.dom.selectionStart;\n const selectionEnd = inputComp.element.dom.selectionEnd;\n return {\n fetchPattern,\n selectionStart,\n selectionEnd\n };\n };\n const setActiveDescendant = (inputComp, active) => {\n getOpt(active.element, 'id').each(id => set$9(inputComp.element, 'aria-activedescendant', id));\n };\n const renderMenuSearcher = spec => {\n const handleByBrowser = (comp, se) => {\n se.cut();\n return Optional.none();\n };\n const handleByHighlightedItem = (comp, se) => {\n const eventData = {\n interactionEvent: se.event,\n eventType: se.event.raw.type\n };\n emitWith(comp, redirectMenuItemInteractionEvent, eventData);\n return Optional.some(true);\n };\n const customSearcherEventsName = 'searcher-events';\n return {\n dom: {\n tag: 'div',\n classes: [selectableClass]\n },\n components: [Input.sketch({\n inputClasses: [\n menuSearcherClass,\n 'tox-textfield'\n ],\n inputAttributes: {\n ...spec.placeholder.map(placeholder => ({ placeholder: spec.i18n(placeholder) })).getOr({}),\n 'type': 'search',\n 'aria-autocomplete': 'list'\n },\n inputBehaviours: derive$1([\n config(customSearcherEventsName, [\n run$1(input(), inputComp => {\n emit(inputComp, refetchTriggerEvent);\n }),\n run$1(keydown(), (inputComp, se) => {\n if (se.event.raw.key === 'Escape') {\n se.stop();\n }\n })\n ]),\n Keying.config({\n mode: 'special',\n onLeft: handleByBrowser,\n onRight: handleByBrowser,\n onSpace: handleByBrowser,\n onEnter: handleByHighlightedItem,\n onEscape: handleByHighlightedItem,\n onUp: handleByHighlightedItem,\n onDown: handleByHighlightedItem\n })\n ]),\n eventOrder: {\n keydown: [\n customSearcherEventsName,\n Keying.name()\n ]\n }\n })]\n };\n };\n\n const searchResultsClass = 'tox-collection--results__js';\n const augmentWithAria = item => {\n var _a;\n if (item.dom) {\n return {\n ...item,\n dom: {\n ...item.dom,\n attributes: {\n ...(_a = item.dom.attributes) !== null && _a !== void 0 ? _a : {},\n 'id': generate$6('aria-item-search-result-id'),\n 'aria-selected': 'false'\n }\n }\n };\n } else {\n return item;\n }\n };\n\n const chunk = (rowDom, numColumns) => items => {\n const chunks = chunk$1(items, numColumns);\n return map$2(chunks, c => ({\n dom: rowDom,\n components: c\n }));\n };\n const forSwatch = columns => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-swatches-menu'\n ]\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-swatches']\n },\n components: [Menu.parts.items({\n preprocess: columns !== 'auto' ? chunk({\n tag: 'div',\n classes: ['tox-swatches__row']\n }, columns) : identity\n })]\n }]\n });\n const forToolbar = columns => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-collection',\n 'tox-collection--toolbar',\n 'tox-collection--toolbar-lg'\n ]\n },\n components: [Menu.parts.items({\n preprocess: chunk({\n tag: 'div',\n classes: ['tox-collection__group']\n }, columns)\n })]\n });\n const preprocessCollection = (items, isSeparator) => {\n const allSplits = [];\n let currentSplit = [];\n each$1(items, (item, i) => {\n if (isSeparator(item, i)) {\n if (currentSplit.length > 0) {\n allSplits.push(currentSplit);\n }\n currentSplit = [];\n if (has$2(item.dom, 'innerHtml') || item.components && item.components.length > 0) {\n currentSplit.push(item);\n }\n } else {\n currentSplit.push(item);\n }\n });\n if (currentSplit.length > 0) {\n allSplits.push(currentSplit);\n }\n return map$2(allSplits, s => ({\n dom: {\n tag: 'div',\n classes: ['tox-collection__group']\n },\n components: s\n }));\n };\n const insertItemsPlaceholder = (columns, initItems, onItem) => {\n return Menu.parts.items({\n preprocess: rawItems => {\n const enrichedItems = map$2(rawItems, onItem);\n if (columns !== 'auto' && columns > 1) {\n return chunk({\n tag: 'div',\n classes: ['tox-collection__group']\n }, columns)(enrichedItems);\n } else {\n return preprocessCollection(enrichedItems, (_item, i) => initItems[i].type === 'separator');\n }\n }\n });\n };\n const forCollection = (columns, initItems, _hasIcons = true) => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-collection'\n ].concat(columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid'])\n },\n components: [insertItemsPlaceholder(columns, initItems, identity)]\n });\n const forCollectionWithSearchResults = (columns, initItems, _hasIcons = true) => {\n const ariaControlsSearchResults = generate$6('aria-controls-search-results');\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-collection',\n searchResultsClass\n ].concat(columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid']),\n attributes: { id: ariaControlsSearchResults }\n },\n components: [insertItemsPlaceholder(columns, initItems, augmentWithAria)]\n };\n };\n const forCollectionWithSearchField = (columns, initItems, searchField) => {\n const ariaControlsSearchResults = generate$6('aria-controls-search-results');\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-menu',\n 'tox-collection'\n ].concat(columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid'])\n },\n components: [\n renderMenuSearcher({\n i18n: global$5.translate,\n placeholder: searchField.placeholder\n }),\n {\n dom: {\n tag: 'div',\n classes: [\n ...columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid'],\n searchResultsClass\n ],\n attributes: { id: ariaControlsSearchResults }\n },\n components: [insertItemsPlaceholder(columns, initItems, augmentWithAria)]\n }\n ]\n };\n };\n const forHorizontalCollection = (initItems, _hasIcons = true) => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-collection',\n 'tox-collection--horizontal'\n ]\n },\n components: [Menu.parts.items({ preprocess: items => preprocessCollection(items, (_item, i) => initItems[i].type === 'separator') })]\n });\n\n const menuHasIcons = xs => exists(xs, item => 'icon' in item && item.icon !== undefined);\n const handleError = error => {\n console.error(formatError(error));\n console.log(error);\n return Optional.none();\n };\n const createHorizontalPartialMenuWithAlloyItems = (value, _hasIcons, items, _columns, _menuLayout) => {\n const structure = forHorizontalCollection(items);\n return {\n value,\n dom: structure.dom,\n components: structure.components,\n items\n };\n };\n const createPartialMenuWithAlloyItems = (value, hasIcons, items, columns, menuLayout) => {\n const getNormalStructure = () => {\n if (menuLayout.menuType !== 'searchable') {\n return forCollection(columns, items);\n } else {\n return menuLayout.searchMode.searchMode === 'search-with-field' ? forCollectionWithSearchField(columns, items, menuLayout.searchMode) : forCollectionWithSearchResults(columns, items);\n }\n };\n if (menuLayout.menuType === 'color') {\n const structure = forSwatch(columns);\n return {\n value,\n dom: structure.dom,\n components: structure.components,\n items\n };\n } else if (menuLayout.menuType === 'normal' && columns === 'auto') {\n const structure = forCollection(columns, items);\n return {\n value,\n dom: structure.dom,\n components: structure.components,\n items\n };\n } else if (menuLayout.menuType === 'normal' || menuLayout.menuType === 'searchable') {\n const structure = getNormalStructure();\n return {\n value,\n dom: structure.dom,\n components: structure.components,\n items\n };\n } else if (menuLayout.menuType === 'listpreview' && columns !== 'auto') {\n const structure = forToolbar(columns);\n return {\n value,\n dom: structure.dom,\n components: structure.components,\n items\n };\n } else {\n return {\n value,\n dom: dom$1(hasIcons, columns, menuLayout.menuType),\n components: components,\n items\n };\n }\n };\n\n const type = requiredString('type');\n const name$1 = requiredString('name');\n const label = requiredString('label');\n const text = requiredString('text');\n const title = requiredString('title');\n const icon = requiredString('icon');\n const value$1 = requiredString('value');\n const fetch$1 = requiredFunction('fetch');\n const getSubmenuItems = requiredFunction('getSubmenuItems');\n const onAction = requiredFunction('onAction');\n const onItemAction = requiredFunction('onItemAction');\n const onSetup = defaultedFunction('onSetup', () => noop);\n const optionalName = optionString('name');\n const optionalText = optionString('text');\n const optionalRole = optionString('role');\n const optionalIcon = optionString('icon');\n const optionalTooltip = optionString('tooltip');\n const optionalLabel = optionString('label');\n const optionalShortcut = optionString('shortcut');\n const optionalSelect = optionFunction('select');\n const active = defaultedBoolean('active', false);\n const borderless = defaultedBoolean('borderless', false);\n const enabled = defaultedBoolean('enabled', true);\n const primary = defaultedBoolean('primary', false);\n const defaultedColumns = num => defaulted('columns', num);\n const defaultedMeta = defaulted('meta', {});\n const defaultedOnAction = defaultedFunction('onAction', noop);\n const defaultedType = type => defaultedString('type', type);\n const generatedName = namePrefix => field$1('name', 'name', defaultedThunk(() => generate$6(`${ namePrefix }-name`)), string);\n const generatedValue = valuePrefix => field$1('value', 'value', defaultedThunk(() => generate$6(`${ valuePrefix }-value`)), anyValue());\n\n const separatorMenuItemSchema = objOf([\n type,\n optionalText\n ]);\n const createSeparatorMenuItem = spec => asRaw('separatormenuitem', separatorMenuItemSchema, spec);\n\n const autocompleterItemSchema = objOf([\n defaultedType('autocompleteitem'),\n active,\n enabled,\n defaultedMeta,\n value$1,\n optionalText,\n optionalIcon\n ]);\n const createSeparatorItem = spec => asRaw('Autocompleter.Separator', separatorMenuItemSchema, spec);\n const createAutocompleterItem = spec => asRaw('Autocompleter.Item', autocompleterItemSchema, spec);\n\n const baseToolbarButtonFields = [\n enabled,\n optionalTooltip,\n optionalIcon,\n optionalText,\n onSetup,\n defaultedString('context', 'mode:design')\n ];\n const toolbarButtonSchema = objOf([\n type,\n onAction,\n optionalShortcut\n ].concat(baseToolbarButtonFields));\n const createToolbarButton = spec => asRaw('toolbarbutton', toolbarButtonSchema, spec);\n\n const baseToolbarToggleButtonFields = [active].concat(baseToolbarButtonFields);\n const toggleButtonSchema = objOf(baseToolbarToggleButtonFields.concat([\n type,\n onAction,\n optionalShortcut\n ]));\n const createToggleButton = spec => asRaw('ToggleButton', toggleButtonSchema, spec);\n\n const contextBarFields = [\n defaultedFunction('predicate', never),\n defaultedStringEnum('scope', 'node', [\n 'node',\n 'editor'\n ]),\n defaultedStringEnum('position', 'selection', [\n 'node',\n 'selection',\n 'line'\n ])\n ];\n\n const contextButtonFields = baseToolbarButtonFields.concat([\n defaultedType('contextformbutton'),\n defaultedString('align', 'end'),\n primary,\n onAction,\n customField('original', identity)\n ]);\n const contextToggleButtonFields = baseToolbarToggleButtonFields.concat([\n defaultedType('contextformbutton'),\n defaultedString('align', 'end'),\n primary,\n onAction,\n customField('original', identity)\n ]);\n const launchButtonFields = baseToolbarButtonFields.concat([defaultedType('contextformbutton')]);\n const launchToggleButtonFields = baseToolbarToggleButtonFields.concat([defaultedType('contextformtogglebutton')]);\n const toggleOrNormal = choose$1('type', {\n contextformbutton: contextButtonFields,\n contextformtogglebutton: contextToggleButtonFields\n });\n const baseContextFormFields = [\n optionalLabel,\n requiredArrayOf('commands', toggleOrNormal),\n optionOf('launch', choose$1('type', {\n contextformbutton: launchButtonFields,\n contextformtogglebutton: launchToggleButtonFields\n })),\n defaultedFunction('onInput', noop),\n defaultedFunction('onSetup', noop)\n ];\n const contextFormFields = [\n ...contextBarFields,\n ...baseContextFormFields,\n requiredStringEnum('type', ['contextform']),\n defaultedFunction('initValue', constant$1('')),\n optionString('placeholder')\n ];\n const contextSliderFormFields = [\n ...contextBarFields,\n ...baseContextFormFields,\n requiredStringEnum('type', ['contextsliderform']),\n defaultedFunction('initValue', constant$1(0)),\n defaultedFunction('min', constant$1(0)),\n defaultedFunction('max', constant$1(100))\n ];\n const contextSizeInputFormFields = [\n ...contextBarFields,\n ...baseContextFormFields,\n requiredStringEnum('type', ['contextsizeinputform']),\n defaultedFunction('initValue', constant$1({\n width: '',\n height: ''\n }))\n ];\n const contextFormSchema = choose$1('type', {\n contextform: contextFormFields,\n contextsliderform: contextSliderFormFields,\n contextsizeinputform: contextSizeInputFormFields\n });\n const createContextForm = spec => asRaw('ContextForm', contextFormSchema, spec);\n\n const contextToolbarSchema = objOf([\n defaultedType('contexttoolbar'),\n requiredOf('items', oneOf([\n string,\n arrOfObj([\n optionString('name'),\n optionString('label'),\n requiredArrayOf('items', string)\n ])\n ]))\n ].concat(contextBarFields));\n const toolbarGroupBackToSpec = toolbarGroup => ({\n name: toolbarGroup.name.getOrUndefined(),\n label: toolbarGroup.label.getOrUndefined(),\n items: toolbarGroup.items\n });\n const contextToolbarToSpec = contextToolbar => ({\n ...contextToolbar,\n items: isString(contextToolbar.items) ? contextToolbar.items : map$2(contextToolbar.items, toolbarGroupBackToSpec)\n });\n const createContextToolbar = spec => asRaw('ContextToolbar', contextToolbarSchema, spec);\n\n const cardImageFields = [\n type,\n requiredString('src'),\n optionString('alt'),\n defaultedArrayOf('classes', [], string)\n ];\n const cardImageSchema = objOf(cardImageFields);\n\n const cardTextFields = [\n type,\n text,\n optionalName,\n defaultedArrayOf('classes', ['tox-collection__item-label'], string)\n ];\n const cardTextSchema = objOf(cardTextFields);\n\n const itemSchema$1 = valueThunk(() => choose$2('type', {\n cardimage: cardImageSchema,\n cardtext: cardTextSchema,\n cardcontainer: cardContainerSchema\n }));\n const cardContainerSchema = objOf([\n type,\n defaultedString('direction', 'horizontal'),\n defaultedString('align', 'left'),\n defaultedString('valign', 'middle'),\n requiredArrayOf('items', itemSchema$1)\n ]);\n\n const commonMenuItemFields = [\n enabled,\n optionalText,\n optionalRole,\n optionalShortcut,\n generatedValue('menuitem'),\n defaultedMeta,\n defaultedString('context', 'mode:design')\n ];\n\n const cardMenuItemSchema = objOf([\n type,\n optionalLabel,\n requiredArrayOf('items', itemSchema$1),\n onSetup,\n defaultedOnAction\n ].concat(commonMenuItemFields));\n const createCardMenuItem = spec => asRaw('cardmenuitem', cardMenuItemSchema, spec);\n\n const choiceMenuItemSchema = objOf([\n type,\n active,\n optionalIcon\n ].concat(commonMenuItemFields));\n const createChoiceMenuItem = spec => asRaw('choicemenuitem', choiceMenuItemSchema, spec);\n\n const baseFields = [\n type,\n requiredString('fancytype'),\n defaultedOnAction\n ];\n const insertTableFields = [defaulted('initData', {})].concat(baseFields);\n const colorSwatchFields = [\n optionFunction('select'),\n defaultedObjOf('initData', {}, [\n defaultedBoolean('allowCustomColors', true),\n defaultedString('storageKey', 'default'),\n optionArrayOf('colors', anyValue())\n ])\n ].concat(baseFields);\n const fancyMenuItemSchema = choose$1('fancytype', {\n inserttable: insertTableFields,\n colorswatch: colorSwatchFields\n });\n const createFancyMenuItem = spec => asRaw('fancymenuitem', fancyMenuItemSchema, spec);\n\n const menuItemSchema = objOf([\n type,\n onSetup,\n defaultedOnAction,\n optionalIcon\n ].concat(commonMenuItemFields));\n const createMenuItem = spec => asRaw('menuitem', menuItemSchema, spec);\n\n const nestedMenuItemSchema = objOf([\n type,\n getSubmenuItems,\n onSetup,\n optionalIcon\n ].concat(commonMenuItemFields));\n const createNestedMenuItem = spec => asRaw('nestedmenuitem', nestedMenuItemSchema, spec);\n\n const toggleMenuItemSchema = objOf([\n type,\n optionalIcon,\n active,\n onSetup,\n onAction\n ].concat(commonMenuItemFields));\n const createToggleMenuItem = spec => asRaw('togglemenuitem', toggleMenuItemSchema, spec);\n\n const detectSize = (comp, margin, selectorClass) => {\n const descendants$1 = descendants(comp.element, '.' + selectorClass);\n if (descendants$1.length > 0) {\n const columnLength = findIndex$1(descendants$1, c => {\n const thisTop = c.dom.getBoundingClientRect().top;\n const cTop = descendants$1[0].dom.getBoundingClientRect().top;\n return Math.abs(thisTop - cTop) > margin;\n }).getOr(descendants$1.length);\n return Optional.some({\n numColumns: columnLength,\n numRows: Math.ceil(descendants$1.length / columnLength)\n });\n } else {\n return Optional.none();\n }\n };\n\n const namedEvents = (name, handlers) => derive$1([config(name, handlers)]);\n const unnamedEvents = handlers => namedEvents(generate$6('unnamed-events'), handlers);\n const SimpleBehaviours = {\n namedEvents,\n unnamedEvents\n };\n\n const escape = text => text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n const item = disabled => Disabling.config({\n disabled,\n disableClass: 'tox-collection__item--state-disabled'\n });\n const button = disabled => Disabling.config({ disabled });\n const splitButton = disabled => Disabling.config({\n disabled,\n disableClass: 'tox-tbtn--disabled'\n });\n const toolbarButton = disabled => Disabling.config({\n disabled,\n disableClass: 'tox-tbtn--disabled',\n useNative: false\n });\n const DisablingConfigs = {\n item,\n button,\n splitButton,\n toolbarButton\n };\n\n const runWithApi = (info, comp) => {\n const api = info.getApi(comp);\n return f => {\n f(api);\n };\n };\n const onControlAttached = (info, editorOffCell) => runOnAttached(comp => {\n if (isFunction(info.onBeforeSetup)) {\n info.onBeforeSetup(comp);\n }\n const run = runWithApi(info, comp);\n run(api => {\n const onDestroy = info.onSetup(api);\n if (isFunction(onDestroy)) {\n editorOffCell.set(onDestroy);\n }\n });\n });\n const onControlDetached = (getApi, editorOffCell) => runOnDetached(comp => runWithApi(getApi, comp)(editorOffCell.get()));\n\n const UiStateChannel = 'silver.uistate';\n const messageSetDisabled = 'setDisabled';\n const messageSetEnabled = 'setEnabled';\n const messageInit = 'init';\n const messageSwitchMode = 'switchmode';\n const modeContextMessages = [\n messageSwitchMode,\n messageInit\n ];\n const broadcastEvents = (uiRefs, messageType) => {\n const outerContainer = uiRefs.mainUi.outerContainer;\n const motherships = [\n uiRefs.mainUi.mothership,\n ...uiRefs.uiMotherships\n ];\n if (messageType === messageSetDisabled) {\n each$1(motherships, m => {\n m.broadcastOn([dismissPopups()], { target: outerContainer.element });\n });\n }\n each$1(motherships, m => {\n m.broadcastOn([UiStateChannel], messageType);\n });\n };\n const setupEventsForUi = (editor, uiRefs) => {\n editor.on('init SwitchMode', event => {\n broadcastEvents(uiRefs, event.type);\n });\n editor.on('DisabledStateChange', event => {\n if (!event.isDefaultPrevented()) {\n const messageType = event.state ? messageSetDisabled : messageInit;\n broadcastEvents(uiRefs, messageType);\n if (!event.state) {\n editor.nodeChanged();\n }\n }\n });\n editor.on('NodeChange', e => {\n const messageType = editor.ui.isEnabled() ? e.type : messageSetDisabled;\n broadcastEvents(uiRefs, messageType);\n });\n if (isReadOnly(editor)) {\n editor.mode.set('readonly');\n }\n };\n const toggleOnReceive = getContext => Receiving.config({\n channels: {\n [UiStateChannel]: {\n onReceive: (comp, messageType) => {\n if (messageType === messageSetDisabled || messageType === messageSetEnabled) {\n Disabling.set(comp, messageType === messageSetDisabled);\n return;\n }\n const {contextType, shouldDisable} = getContext();\n if (contextType === 'mode' && !contains$2(modeContextMessages, messageType)) {\n return;\n }\n Disabling.set(comp, shouldDisable);\n }\n }\n }\n });\n\n const onMenuItemExecute = (info, itemResponse) => runOnExecute$1((comp, simulatedEvent) => {\n runWithApi(info, comp)(info.onAction);\n if (!info.triggersSubmenu && itemResponse === ItemResponse$1.CLOSE_ON_EXECUTE) {\n if (comp.getSystem().isConnected()) {\n emit(comp, sandboxClose());\n }\n simulatedEvent.stop();\n }\n });\n const menuItemEventOrder = {\n [execute$5()]: [\n 'disabling',\n 'alloy.base.behaviour',\n 'toggling',\n 'item-events'\n ]\n };\n\n const componentRenderPipeline = cat;\n const renderCommonItem = (spec, structure, itemResponse, providersBackstage) => {\n const editorOffCell = Cell(noop);\n return {\n type: 'item',\n dom: structure.dom,\n components: componentRenderPipeline(structure.optComponents),\n data: spec.data,\n eventOrder: menuItemEventOrder,\n hasSubmenu: spec.triggersSubmenu,\n itemBehaviours: derive$1([\n config('item-events', [\n onMenuItemExecute(spec, itemResponse),\n onControlAttached(spec, editorOffCell),\n onControlDetached(spec, editorOffCell)\n ]),\n DisablingConfigs.item(() => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)),\n Replacing.config({})\n ].concat(spec.itemBehaviours))\n };\n };\n const buildData = source => ({\n value: source.value,\n meta: {\n text: source.text.getOr(''),\n ...source.meta\n }\n });\n\n const convertText = source => {\n const isMac = global$6.os.isMacOS() || global$6.os.isiOS();\n const mac = {\n alt: '\\u2325',\n ctrl: '\\u2303',\n shift: '\\u21E7',\n meta: '\\u2318',\n access: '\\u2303\\u2325'\n };\n const other = {\n meta: 'Ctrl',\n access: 'Shift+Alt'\n };\n const replace = isMac ? mac : other;\n const shortcut = source.split('+');\n const updated = map$2(shortcut, segment => {\n const search = segment.toLowerCase().trim();\n return has$2(replace, search) ? replace[search] : segment;\n });\n return isMac ? updated.join('') : updated.join('+');\n };\n\n const renderIcon$2 = (name, icons, classes = [iconClass]) => render$3(name, {\n tag: 'div',\n classes\n }, icons);\n const renderText = text => ({\n dom: {\n tag: 'div',\n classes: [textClass]\n },\n components: [text$2(global$5.translate(text))]\n });\n const renderHtml = (html, classes) => ({\n dom: {\n tag: 'div',\n classes,\n innerHtml: html\n }\n });\n const renderStyledText = (style, text) => ({\n dom: {\n tag: 'div',\n classes: [textClass]\n },\n components: [{\n dom: {\n tag: style.tag,\n styles: style.styles\n },\n components: [text$2(global$5.translate(text))]\n }]\n });\n const renderShortcut = shortcut => ({\n dom: {\n tag: 'div',\n classes: [accessoryClass]\n },\n components: [text$2(convertText(shortcut))]\n });\n const renderCheckmark = icons => renderIcon$2('checkmark', icons, [checkmarkClass]);\n const renderSubmenuCaret = icons => renderIcon$2('chevron-right', icons, [caretClass]);\n const renderDownwardsCaret = icons => renderIcon$2('chevron-down', icons, [caretClass]);\n const renderContainer = (container, components) => {\n const directionClass = container.direction === 'vertical' ? containerColumnClass : containerRowClass;\n const alignClass = container.align === 'left' ? containerAlignLeftClass : containerAlignRightClass;\n const getValignClass = () => {\n switch (container.valign) {\n case 'top':\n return containerValignTopClass;\n case 'middle':\n return containerValignMiddleClass;\n case 'bottom':\n return containerValignBottomClass;\n }\n };\n return {\n dom: {\n tag: 'div',\n classes: [\n containerClass,\n directionClass,\n alignClass,\n getValignClass()\n ]\n },\n components\n };\n };\n const renderImage = (src, classes, alt) => ({\n dom: {\n tag: 'img',\n classes,\n attributes: {\n src,\n alt: alt.getOr('')\n }\n }\n });\n\n const renderColorStructure = (item, providerBackstage, fallbackIcon) => {\n const colorPickerCommand = 'custom';\n const removeColorCommand = 'remove';\n const itemValue = item.value;\n const iconSvg = item.iconContent.map(name => getOr(name, providerBackstage.icons, fallbackIcon));\n const attributes = item.ariaLabel.map(al => ({\n 'aria-label': providerBackstage.translate(al),\n 'data-mce-name': al\n })).getOr({});\n const getDom = () => {\n const common = colorClass;\n const icon = iconSvg.getOr('');\n const baseDom = {\n tag: 'div',\n attributes,\n classes: [common]\n };\n if (itemValue === colorPickerCommand) {\n return {\n ...baseDom,\n tag: 'button',\n classes: [\n ...baseDom.classes,\n 'tox-swatches__picker-btn'\n ],\n innerHtml: icon\n };\n } else if (itemValue === removeColorCommand) {\n return {\n ...baseDom,\n classes: [\n ...baseDom.classes,\n 'tox-swatch--remove'\n ],\n innerHtml: icon\n };\n } else if (isNonNullable(itemValue)) {\n return {\n ...baseDom,\n attributes: {\n ...baseDom.attributes,\n 'data-mce-color': itemValue\n },\n styles: { 'background-color': itemValue },\n innerHtml: icon\n };\n } else {\n return baseDom;\n }\n };\n return {\n dom: getDom(),\n optComponents: []\n };\n };\n const renderItemDomStructure = ariaLabel => {\n const domTitle = ariaLabel.map(label => ({\n attributes: {\n 'id': generate$6('menu-item'),\n 'aria-label': global$5.translate(label)\n }\n })).getOr({});\n return {\n tag: 'div',\n classes: [\n navClass,\n selectableClass\n ],\n ...domTitle\n };\n };\n const renderNormalItemStructure = (info, providersBackstage, renderIcons, fallbackIcon) => {\n const iconSpec = {\n tag: 'div',\n classes: [iconClass]\n };\n const renderIcon = iconName => render$3(iconName, iconSpec, providersBackstage.icons, fallbackIcon);\n const renderEmptyIcon = () => Optional.some({ dom: iconSpec });\n const leftIcon = renderIcons ? info.iconContent.map(renderIcon).orThunk(renderEmptyIcon) : Optional.none();\n const checkmark = info.checkMark;\n const textRender = Optional.from(info.meta).fold(() => renderText, meta => has$2(meta, 'style') ? curry(renderStyledText, meta.style) : renderText);\n const content = info.htmlContent.fold(() => info.textContent.map(textRender), html => Optional.some(renderHtml(html, [textClass])));\n const menuItem = {\n dom: renderItemDomStructure(info.ariaLabel),\n optComponents: [\n leftIcon,\n content,\n info.shortcutContent.map(renderShortcut),\n checkmark,\n info.caret\n ]\n };\n return menuItem;\n };\n const renderItemStructure = (info, providersBackstage, renderIcons, fallbackIcon = Optional.none()) => {\n if (info.presets === 'color') {\n return renderColorStructure(info, providersBackstage, fallbackIcon);\n } else {\n return renderNormalItemStructure(info, providersBackstage, renderIcons, fallbackIcon);\n }\n };\n\n const tooltipBehaviour = (meta, sharedBackstage, tooltipText) => get$h(meta, 'tooltipWorker').map(tooltipWorker => [Tooltipping.config({\n lazySink: sharedBackstage.getSink,\n tooltipDom: {\n tag: 'div',\n classes: ['tox-tooltip-worker-container']\n },\n tooltipComponents: [],\n anchor: comp => ({\n type: 'submenu',\n item: comp,\n overrides: { maxHeightFunction: expandable$1 }\n }),\n mode: 'follow-highlight',\n onShow: (component, _tooltip) => {\n tooltipWorker(elm => {\n Tooltipping.setComponents(component, [external$1({ element: SugarElement.fromDom(elm) })]);\n });\n }\n })]).getOrThunk(() => {\n return tooltipText.map(text => [Tooltipping.config({\n ...sharedBackstage.providers.tooltips.getConfig({ tooltipText: text }),\n mode: 'follow-highlight'\n })]).getOr([]);\n });\n const encodeText = text => global$8.DOM.encode(text);\n const replaceText = (text, matchText) => {\n const translated = global$5.translate(text);\n const encoded = encodeText(translated);\n if (matchText.length > 0) {\n const escapedMatchRegex = new RegExp(escape(matchText), 'gi');\n return encoded.replace(escapedMatchRegex, match => `${ match }`);\n } else {\n return encoded;\n }\n };\n const renderAutocompleteItem = (spec, matchText, useText, presets, onItemValueHandler, itemResponse, sharedBackstage, renderIcons = true) => {\n const structure = renderItemStructure({\n presets,\n textContent: Optional.none(),\n htmlContent: useText ? spec.text.map(text => replaceText(text, matchText)) : Optional.none(),\n ariaLabel: spec.text,\n iconContent: spec.icon,\n shortcutContent: Optional.none(),\n checkMark: Optional.none(),\n caret: Optional.none(),\n value: spec.value\n }, sharedBackstage.providers, renderIcons, spec.icon);\n const tooltipString = spec.text.filter(text => !useText && text !== '');\n return renderCommonItem({\n context: 'mode:design',\n data: buildData(spec),\n enabled: spec.enabled,\n getApi: constant$1({}),\n onAction: _api => onItemValueHandler(spec.value, spec.meta),\n onSetup: constant$1(noop),\n triggersSubmenu: false,\n itemBehaviours: tooltipBehaviour(spec, sharedBackstage, tooltipString)\n }, structure, itemResponse, sharedBackstage.providers);\n };\n\n const render$2 = (items, extras) => map$2(items, item => {\n switch (item.type) {\n case 'cardcontainer':\n return renderContainer(item, render$2(item.items, extras));\n case 'cardimage':\n return renderImage(item.src, item.classes, item.alt);\n case 'cardtext':\n const shouldHighlight = item.name.exists(name => contains$2(extras.cardText.highlightOn, name));\n const matchText = shouldHighlight ? Optional.from(extras.cardText.matchText).getOr('') : '';\n return renderHtml(replaceText(item.text, matchText), item.classes);\n }\n });\n const renderCardMenuItem = (spec, itemResponse, sharedBackstage, extras) => {\n const getApi = component => ({\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => {\n Disabling.set(component, !state);\n each$1(descendants(component.element, '*'), elm => {\n component.getSystem().getByDom(elm).each(comp => {\n if (comp.hasConfigured(Disabling)) {\n Disabling.set(comp, !state);\n }\n });\n });\n }\n });\n const structure = {\n dom: renderItemDomStructure(spec.label),\n optComponents: [Optional.some({\n dom: {\n tag: 'div',\n classes: [\n containerClass,\n containerRowClass\n ]\n },\n components: render$2(spec.items, extras)\n })]\n };\n return renderCommonItem({\n context: 'mode:design',\n data: buildData({\n text: Optional.none(),\n ...spec\n }),\n enabled: spec.enabled,\n getApi,\n onAction: spec.onAction,\n onSetup: spec.onSetup,\n triggersSubmenu: false,\n itemBehaviours: Optional.from(extras.itemBehaviours).getOr([])\n }, structure, itemResponse, sharedBackstage.providers);\n };\n\n const renderChoiceItem = (spec, useText, presets, onItemValueHandler, isSelected, itemResponse, providersBackstage, renderIcons = true) => {\n const getApi = component => ({\n setActive: state => {\n Toggling.set(component, state);\n },\n isActive: () => Toggling.isOn(component),\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state)\n });\n const structure = renderItemStructure({\n presets,\n textContent: useText ? spec.text : Optional.none(),\n htmlContent: Optional.none(),\n ariaLabel: spec.text,\n iconContent: spec.icon,\n shortcutContent: useText ? spec.shortcut : Optional.none(),\n checkMark: useText ? Optional.some(renderCheckmark(providersBackstage.icons)) : Optional.none(),\n caret: Optional.none(),\n value: spec.value\n }, providersBackstage, renderIcons);\n const optTooltipping = spec.text.filter(constant$1(!useText)).map(t => Tooltipping.config(providersBackstage.tooltips.getConfig({ tooltipText: providersBackstage.translate(t) })));\n return deepMerge(renderCommonItem({\n context: spec.context,\n data: buildData(spec),\n enabled: spec.enabled,\n getApi,\n onAction: _api => onItemValueHandler(spec.value),\n onSetup: api => {\n api.setActive(isSelected);\n return noop;\n },\n triggersSubmenu: false,\n itemBehaviours: [...optTooltipping.toArray()]\n }, structure, itemResponse, providersBackstage), {\n toggling: {\n toggleClass: tickedClass,\n toggleOnExecute: false,\n selected: spec.active,\n exclusive: true\n }\n });\n };\n\n const parts$f = generate$3(owner$2(), parts$h());\n\n const hexColour = value => ({ value: normalizeHex(value) });\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n const longformRegex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n const isHexString = hex => shorthandRegex.test(hex) || longformRegex.test(hex);\n const normalizeHex = hex => removeLeading(hex, '#').toUpperCase();\n const fromString$1 = hex => isHexString(hex) ? Optional.some({ value: normalizeHex(hex) }) : Optional.none();\n const getLongForm = hex => {\n const hexString = hex.value.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b);\n return { value: hexString };\n };\n const extractValues = hex => {\n const longForm = getLongForm(hex);\n const splitForm = longformRegex.exec(longForm.value);\n return splitForm === null ? [\n 'FFFFFF',\n 'FF',\n 'FF',\n 'FF'\n ] : splitForm;\n };\n const toHex = component => {\n const hex = component.toString(16);\n return (hex.length === 1 ? '0' + hex : hex).toUpperCase();\n };\n const fromRgba = rgbaColour => {\n const value = toHex(rgbaColour.red) + toHex(rgbaColour.green) + toHex(rgbaColour.blue);\n return hexColour(value);\n };\n\n const min = Math.min;\n const max = Math.max;\n const round$1 = Math.round;\n const rgbRegex = /^\\s*rgb\\s*\\(\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*\\)\\s*$/i;\n const rgbaRegex = /^\\s*rgba\\s*\\(\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*[,\\s]\\s*(\\d+)\\s*[,\\s]\\s*((?:\\d?\\.\\d+|\\d+)%?)\\s*\\)\\s*$/i;\n const rgbaColour = (red, green, blue, alpha) => ({\n red,\n green,\n blue,\n alpha\n });\n const isRgbaComponent = value => {\n const num = parseInt(value, 10);\n return num.toString() === value && num >= 0 && num <= 255;\n };\n const fromHsv = hsv => {\n let r;\n let g;\n let b;\n const hue = (hsv.hue || 0) % 360;\n let saturation = hsv.saturation / 100;\n let brightness = hsv.value / 100;\n saturation = max(0, min(saturation, 1));\n brightness = max(0, min(brightness, 1));\n if (saturation === 0) {\n r = g = b = round$1(255 * brightness);\n return rgbaColour(r, g, b, 1);\n }\n const side = hue / 60;\n const chroma = brightness * saturation;\n const x = chroma * (1 - Math.abs(side % 2 - 1));\n const match = brightness - chroma;\n switch (Math.floor(side)) {\n case 0:\n r = chroma;\n g = x;\n b = 0;\n break;\n case 1:\n r = x;\n g = chroma;\n b = 0;\n break;\n case 2:\n r = 0;\n g = chroma;\n b = x;\n break;\n case 3:\n r = 0;\n g = x;\n b = chroma;\n break;\n case 4:\n r = x;\n g = 0;\n b = chroma;\n break;\n case 5:\n r = chroma;\n g = 0;\n b = x;\n break;\n default:\n r = g = b = 0;\n }\n r = round$1(255 * (r + match));\n g = round$1(255 * (g + match));\n b = round$1(255 * (b + match));\n return rgbaColour(r, g, b, 1);\n };\n const fromHex = hexColour => {\n const result = extractValues(hexColour);\n const red = parseInt(result[1], 16);\n const green = parseInt(result[2], 16);\n const blue = parseInt(result[3], 16);\n return rgbaColour(red, green, blue, 1);\n };\n const fromStringValues = (red, green, blue, alpha) => {\n const r = parseInt(red, 10);\n const g = parseInt(green, 10);\n const b = parseInt(blue, 10);\n const a = parseFloat(alpha);\n return rgbaColour(r, g, b, a);\n };\n const fromString = rgbaString => {\n const rgbMatch = rgbRegex.exec(rgbaString);\n if (rgbMatch !== null) {\n return Optional.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], '1'));\n }\n const rgbaMatch = rgbaRegex.exec(rgbaString);\n if (rgbaMatch !== null) {\n return Optional.some(fromStringValues(rgbaMatch[1], rgbaMatch[2], rgbaMatch[3], rgbaMatch[4]));\n }\n return Optional.none();\n };\n const toString = rgba => `rgba(${ rgba.red },${ rgba.green },${ rgba.blue },${ rgba.alpha })`;\n const red = rgbaColour(255, 0, 0, 1);\n\n const fireSkinLoaded$1 = editor => {\n editor.dispatch('SkinLoaded');\n };\n const fireSkinLoadError$1 = (editor, error) => {\n editor.dispatch('SkinLoadError', error);\n };\n const fireResizeEditor = editor => {\n editor.dispatch('ResizeEditor');\n };\n const fireResizeContent = (editor, e) => {\n editor.dispatch('ResizeContent', e);\n };\n const fireScrollContent = (editor, e) => {\n editor.dispatch('ScrollContent', e);\n };\n const fireTextColorChange = (editor, data) => {\n editor.dispatch('TextColorChange', data);\n };\n const fireAfterProgressState = (editor, state) => {\n editor.dispatch('AfterProgressState', { state });\n };\n const fireResolveName = (editor, node) => editor.dispatch('ResolveName', {\n name: node.nodeName.toLowerCase(),\n target: node\n });\n const fireToggleToolbarDrawer = (editor, state) => {\n editor.dispatch('ToggleToolbarDrawer', { state });\n };\n const fireStylesTextUpdate = (editor, data) => {\n editor.dispatch('StylesTextUpdate', data);\n };\n const fireAlignTextUpdate = (editor, data) => {\n editor.dispatch('AlignTextUpdate', data);\n };\n const fireFontSizeTextUpdate = (editor, data) => {\n editor.dispatch('FontSizeTextUpdate', data);\n };\n const fireFontSizeInputTextUpdate = (editor, data) => {\n editor.dispatch('FontSizeInputTextUpdate', data);\n };\n const fireBlocksTextUpdate = (editor, data) => {\n editor.dispatch('BlocksTextUpdate', data);\n };\n const fireFontFamilyTextUpdate = (editor, data) => {\n editor.dispatch('FontFamilyTextUpdate', data);\n };\n const fireToggleSidebar = editor => {\n editor.dispatch('ToggleSidebar');\n };\n const fireToggleView = editor => {\n editor.dispatch('ToggleView');\n };\n const fireContextToolbarClose = editor => {\n editor.dispatch('ContextToolbarClose');\n };\n const fireContextFormSlideBack = editor => {\n editor.dispatch('ContextFormSlideBack');\n };\n\n const composeUnbinders = (f, g) => () => {\n f();\n g();\n };\n const onSetupEditableToggle = editor => onSetupEvent(editor, 'NodeChange', api => {\n api.setEnabled(editor.selection.isEditable());\n });\n const onSetupFormatToggle = (editor, name) => api => {\n const boundFormatChangeCallback = unbindable();\n const init = () => {\n api.setActive(editor.formatter.match(name));\n const binding = editor.formatter.formatChanged(name, api.setActive);\n boundFormatChangeCallback.set(binding);\n };\n editor.initialized ? init() : editor.once('init', init);\n return () => {\n editor.off('init', init);\n boundFormatChangeCallback.clear();\n };\n };\n const onSetupStateToggle = (editor, name) => api => {\n const unbindEditableToogle = onSetupEditableToggle(editor)(api);\n const unbindFormatToggle = onSetupFormatToggle(editor, name)(api);\n return () => {\n unbindEditableToogle();\n unbindFormatToggle();\n };\n };\n const onSetupEvent = (editor, event, f) => api => {\n const handleEvent = () => f(api);\n const init = () => {\n f(api);\n editor.on(event, handleEvent);\n };\n editor.initialized ? init() : editor.once('init', init);\n return () => {\n editor.off('init', init);\n editor.off(event, handleEvent);\n };\n };\n const onActionToggleFormat$1 = editor => rawItem => () => {\n editor.undoManager.transact(() => {\n editor.focus();\n editor.execCommand('mceToggleFormat', false, rawItem.format);\n });\n };\n const onActionExecCommand = (editor, command) => () => editor.execCommand(command);\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.LocalStorage');\n\n const cacheStorage = {};\n const ColorCache = (storageId, max = 10) => {\n const storageString = global$4.getItem(storageId);\n const localstorage = isString(storageString) ? JSON.parse(storageString) : [];\n const prune = list => {\n const diff = max - list.length;\n return diff < 0 ? list.slice(0, max) : list;\n };\n const cache = prune(localstorage);\n const add = key => {\n indexOf(cache, key).each(remove);\n cache.unshift(key);\n if (cache.length > max) {\n cache.pop();\n }\n global$4.setItem(storageId, JSON.stringify(cache));\n };\n const remove = idx => {\n cache.splice(idx, 1);\n };\n const state = () => cache.slice(0);\n return {\n add,\n state\n };\n };\n const getCacheForId = id => get$h(cacheStorage, id).getOrThunk(() => {\n const storageId = `tinymce-custom-colors-${ id }`;\n const currentData = global$4.getItem(storageId);\n if (isNullable(currentData)) {\n const legacyDefault = global$4.getItem('tinymce-custom-colors');\n global$4.setItem(storageId, isNonNullable(legacyDefault) ? legacyDefault : '[]');\n }\n const storage = ColorCache(storageId, 10);\n cacheStorage[id] = storage;\n return storage;\n });\n const getCurrentColors = id => map$2(getCacheForId(id).state(), color => ({\n type: 'choiceitem',\n text: color,\n icon: 'checkmark',\n value: color\n }));\n const addColor = (id, color) => {\n getCacheForId(id).add(color);\n };\n\n const hsvColour = (hue, saturation, value) => ({\n hue,\n saturation,\n value\n });\n const fromRgb = rgbaColour => {\n let h = 0;\n let s = 0;\n let v = 0;\n const r = rgbaColour.red / 255;\n const g = rgbaColour.green / 255;\n const b = rgbaColour.blue / 255;\n const minRGB = Math.min(r, Math.min(g, b));\n const maxRGB = Math.max(r, Math.max(g, b));\n if (minRGB === maxRGB) {\n v = minRGB;\n return hsvColour(0, 0, v * 100);\n }\n const d = r === minRGB ? g - b : b === minRGB ? r - g : b - r;\n h = r === minRGB ? 3 : b === minRGB ? 1 : 5;\n h = 60 * (h - d / (maxRGB - minRGB));\n s = (maxRGB - minRGB) / maxRGB;\n v = maxRGB;\n return hsvColour(Math.round(h), Math.round(s * 100), Math.round(v * 100));\n };\n\n const hexToHsv = hex => fromRgb(fromHex(hex));\n const hsvToHex = hsv => fromRgba(fromHsv(hsv));\n const anyToHex = color => fromString$1(color).orThunk(() => fromString(color).map(fromRgba)).getOrThunk(() => {\n const canvas = document.createElement('canvas');\n canvas.height = 1;\n canvas.width = 1;\n const canvasContext = canvas.getContext('2d');\n canvasContext.clearRect(0, 0, canvas.width, canvas.height);\n canvasContext.fillStyle = '#FFFFFF';\n canvasContext.fillStyle = color;\n canvasContext.fillRect(0, 0, 1, 1);\n const rgba = canvasContext.getImageData(0, 0, 1, 1).data;\n const r = rgba[0];\n const g = rgba[1];\n const b = rgba[2];\n const a = rgba[3];\n return fromRgba(rgbaColour(r, g, b, a));\n });\n\n const foregroundId = 'forecolor';\n const backgroundId = 'hilitecolor';\n const fallbackCols = 5;\n const mapColors = colorMap => mapColorsRaw(colorMap.map((color, index) => {\n if (index % 2 === 0) {\n return '#' + anyToHex(color).value;\n }\n return color;\n }));\n const mapColorsRaw = colorMap => {\n const colors = [];\n for (let i = 0; i < colorMap.length; i += 2) {\n colors.push({\n text: colorMap[i + 1],\n value: colorMap[i],\n icon: 'checkmark',\n type: 'choiceitem'\n });\n }\n return colors;\n };\n const option$1 = name => editor => editor.options.get(name);\n const fallbackColor = '#000000';\n const register$e = editor => {\n const registerOption = editor.options.register;\n const colorProcessor = value => {\n if (isArrayOf(value, isString)) {\n return {\n value: mapColors(value),\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be an array of strings.'\n };\n }\n };\n const colorProcessorRaw = value => {\n if (isArrayOf(value, isString)) {\n return {\n value: mapColorsRaw(value),\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be an array of strings.'\n };\n }\n };\n const colorColsProcessor = value => {\n if (isNumber(value) && value > 0) {\n return {\n value,\n valid: true\n };\n } else {\n return {\n valid: false,\n message: 'Must be a positive number.'\n };\n }\n };\n registerOption('color_map', {\n processor: colorProcessor,\n default: [\n '#BFEDD2',\n 'Light Green',\n '#FBEEB8',\n 'Light Yellow',\n '#F8CAC6',\n 'Light Red',\n '#ECCAFA',\n 'Light Purple',\n '#C2E0F4',\n 'Light Blue',\n '#2DC26B',\n 'Green',\n '#F1C40F',\n 'Yellow',\n '#E03E2D',\n 'Red',\n '#B96AD9',\n 'Purple',\n '#3598DB',\n 'Blue',\n '#169179',\n 'Dark Turquoise',\n '#E67E23',\n 'Orange',\n '#BA372A',\n 'Dark Red',\n '#843FA1',\n 'Dark Purple',\n '#236FA1',\n 'Dark Blue',\n '#ECF0F1',\n 'Light Gray',\n '#CED4D9',\n 'Medium Gray',\n '#95A5A6',\n 'Gray',\n '#7E8C8D',\n 'Dark Gray',\n '#34495E',\n 'Navy Blue',\n '#000000',\n 'Black',\n '#ffffff',\n 'White'\n ]\n });\n registerOption('color_map_raw', { processor: colorProcessorRaw });\n registerOption('color_map_background', { processor: colorProcessor });\n registerOption('color_map_foreground', { processor: colorProcessor });\n registerOption('color_cols', {\n processor: colorColsProcessor,\n default: calcCols(editor)\n });\n registerOption('color_cols_foreground', {\n processor: colorColsProcessor,\n default: defaultCols(editor, foregroundId)\n });\n registerOption('color_cols_background', {\n processor: colorColsProcessor,\n default: defaultCols(editor, backgroundId)\n });\n registerOption('custom_colors', {\n processor: 'boolean',\n default: true\n });\n registerOption('color_default_foreground', {\n processor: 'string',\n default: fallbackColor\n });\n registerOption('color_default_background', {\n processor: 'string',\n default: fallbackColor\n });\n };\n const getColors$2 = (editor, id) => {\n if (id === foregroundId && editor.options.isSet('color_map_foreground')) {\n return option$1('color_map_foreground')(editor);\n } else if (id === backgroundId && editor.options.isSet('color_map_background')) {\n return option$1('color_map_background')(editor);\n } else if (editor.options.isSet('color_map_raw')) {\n return option$1('color_map_raw')(editor);\n } else {\n return option$1('color_map')(editor);\n }\n };\n const calcCols = (editor, id = 'default') => Math.max(fallbackCols, Math.ceil(Math.sqrt(getColors$2(editor, id).length)));\n const defaultCols = (editor, id) => {\n const defaultCols = option$1('color_cols')(editor);\n const calculatedCols = calcCols(editor, id);\n if (defaultCols === calcCols(editor)) {\n return calculatedCols;\n } else {\n return defaultCols;\n }\n };\n const getColorCols$1 = (editor, id = 'default') => {\n const getCols = () => {\n if (id === foregroundId) {\n return option$1('color_cols_foreground')(editor);\n } else if (id === backgroundId) {\n return option$1('color_cols_background')(editor);\n } else {\n return option$1('color_cols')(editor);\n }\n };\n return Math.round(getCols());\n };\n const hasCustomColors$1 = option$1('custom_colors');\n const getDefaultForegroundColor = option$1('color_default_foreground');\n const getDefaultBackgroundColor = option$1('color_default_background');\n\n const defaultBackgroundColor = 'rgba(0, 0, 0, 0)';\n const isValidBackgroundColor = value => fromString(value).exists(c => c.alpha !== 0);\n const getClosestCssBackgroundColorValue = scope => {\n return closest$4(scope, node => {\n if (isElement$1(node)) {\n const color = get$f(node, 'background-color');\n return someIf(isValidBackgroundColor(color), color);\n } else {\n return Optional.none();\n }\n }).getOr(defaultBackgroundColor);\n };\n const getCurrentColor = (editor, format) => {\n const node = SugarElement.fromDom(editor.selection.getStart());\n const cssRgbValue = format === 'hilitecolor' ? getClosestCssBackgroundColorValue(node) : get$f(node, 'color');\n return fromString(cssRgbValue).map(rgba => '#' + fromRgba(rgba).value);\n };\n const applyFormat = (editor, format, value) => {\n editor.undoManager.transact(() => {\n editor.focus();\n editor.formatter.apply(format, { value });\n editor.nodeChanged();\n });\n };\n const removeFormat = (editor, format) => {\n editor.undoManager.transact(() => {\n editor.focus();\n editor.formatter.remove(format, { value: null }, undefined, true);\n editor.nodeChanged();\n });\n };\n const registerCommands = editor => {\n editor.addCommand('mceApplyTextcolor', (format, value) => {\n applyFormat(editor, format, value);\n });\n editor.addCommand('mceRemoveTextcolor', format => {\n removeFormat(editor, format);\n });\n };\n const getAdditionalColors = hasCustom => {\n const type = 'choiceitem';\n const remove = {\n type,\n text: 'Remove color',\n icon: 'color-swatch-remove-color',\n value: 'remove'\n };\n const custom = {\n type,\n text: 'Custom color',\n icon: 'color-picker',\n value: 'custom'\n };\n return hasCustom ? [\n remove,\n custom\n ] : [remove];\n };\n const applyColor = (editor, format, value, onChoice) => {\n if (value === 'custom') {\n const dialog = colorPickerDialog(editor);\n dialog(colorOpt => {\n colorOpt.each(color => {\n addColor(format, color);\n editor.execCommand('mceApplyTextcolor', format, color);\n onChoice(color);\n });\n }, getCurrentColor(editor, format).getOr(fallbackColor));\n } else if (value === 'remove') {\n onChoice('');\n editor.execCommand('mceRemoveTextcolor', format);\n } else {\n onChoice(value);\n editor.execCommand('mceApplyTextcolor', format, value);\n }\n };\n const getColors$1 = (colors, id, hasCustom) => colors.concat(getCurrentColors(id).concat(getAdditionalColors(hasCustom)));\n const getFetch$1 = (colors, id, hasCustom) => callback => {\n callback(getColors$1(colors, id, hasCustom));\n };\n const setIconColor = (splitButtonApi, name, newColor) => {\n const id = name === 'forecolor' ? 'tox-icon-text-color__color' : 'tox-icon-highlight-bg-color__color';\n splitButtonApi.setIconFill(id, newColor);\n };\n const setTooltip = (buttonApi, tooltip) => {\n buttonApi.setTooltip(tooltip);\n };\n const select$1 = (editor, format) => value => {\n const optCurrentHex = getCurrentColor(editor, format);\n return is$1(optCurrentHex, value.toUpperCase());\n };\n const getToolTipText = (editor, format, lastColor) => {\n if (isEmpty(lastColor)) {\n return format === 'forecolor' ? 'Text color' : 'Background color';\n }\n const tooltipPrefix = format === 'forecolor' ? 'Text color {0}' : 'Background color {0}';\n const colors = getColors$1(getColors$2(editor, format), format, false);\n const colorText = find$5(colors, c => c.value === lastColor).getOr({ text: '' }).text;\n return editor.translate([\n tooltipPrefix,\n editor.translate(colorText)\n ]);\n };\n const registerTextColorButton = (editor, name, format, lastColor) => {\n editor.ui.registry.addSplitButton(name, {\n tooltip: getToolTipText(editor, format, lastColor.get()),\n presets: 'color',\n icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',\n select: select$1(editor, format),\n columns: getColorCols$1(editor, format),\n fetch: getFetch$1(getColors$2(editor, format), format, hasCustomColors$1(editor)),\n onAction: _splitButtonApi => {\n applyColor(editor, format, lastColor.get(), noop);\n },\n onItemAction: (_splitButtonApi, value) => {\n applyColor(editor, format, value, newColor => {\n lastColor.set(newColor);\n fireTextColorChange(editor, {\n name,\n color: newColor\n });\n });\n },\n onSetup: splitButtonApi => {\n setIconColor(splitButtonApi, name, lastColor.get());\n const handler = e => {\n if (e.name === name) {\n setIconColor(splitButtonApi, e.name, e.color);\n setTooltip(splitButtonApi, getToolTipText(editor, format, e.color));\n }\n };\n editor.on('TextColorChange', handler);\n return composeUnbinders(onSetupEditableToggle(editor)(splitButtonApi), () => {\n editor.off('TextColorChange', handler);\n });\n }\n });\n };\n const registerTextColorMenuItem = (editor, name, format, text, lastColor) => {\n editor.ui.registry.addNestedMenuItem(name, {\n text,\n icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',\n onSetup: api => {\n setTooltip(api, getToolTipText(editor, format, lastColor.get()));\n setIconColor(api, name, lastColor.get());\n return onSetupEditableToggle(editor)(api);\n },\n getSubmenuItems: () => [{\n type: 'fancymenuitem',\n fancytype: 'colorswatch',\n select: select$1(editor, format),\n initData: { storageKey: format },\n onAction: data => {\n applyColor(editor, format, data.value, newColor => {\n lastColor.set(newColor);\n fireTextColorChange(editor, {\n name,\n color: newColor\n });\n });\n }\n }]\n });\n };\n const colorPickerDialog = editor => (callback, value) => {\n let isValid = false;\n const onSubmit = api => {\n const data = api.getData();\n const hex = data.colorpicker;\n if (isValid) {\n callback(Optional.from(hex));\n api.close();\n } else {\n editor.windowManager.alert(editor.translate([\n 'Invalid hex color code: {0}',\n hex\n ]));\n }\n };\n const onAction = (_api, details) => {\n if (details.name === 'hex-valid') {\n isValid = details.value;\n }\n };\n const initialData = { colorpicker: value };\n editor.windowManager.open({\n title: 'Color Picker',\n size: 'normal',\n body: {\n type: 'panel',\n items: [{\n type: 'colorpicker',\n name: 'colorpicker',\n label: 'Color'\n }]\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData,\n onAction,\n onSubmit,\n onClose: noop,\n onCancel: () => {\n callback(Optional.none());\n }\n });\n };\n const register$d = editor => {\n registerCommands(editor);\n const fallbackColorForeground = getDefaultForegroundColor(editor);\n const fallbackColorBackground = getDefaultBackgroundColor(editor);\n const lastForeColor = Cell(fallbackColorForeground);\n const lastBackColor = Cell(fallbackColorBackground);\n registerTextColorButton(editor, 'forecolor', 'forecolor', lastForeColor);\n registerTextColorButton(editor, 'backcolor', 'hilitecolor', lastBackColor);\n registerTextColorMenuItem(editor, 'forecolor', 'forecolor', 'Text color', lastForeColor);\n registerTextColorMenuItem(editor, 'backcolor', 'hilitecolor', 'Background color', lastBackColor);\n };\n\n const createPartialChoiceMenu = (value, items, onItemValueHandler, columns, presets, itemResponse, select, providersBackstage) => {\n const hasIcons = menuHasIcons(items);\n const presetItemTypes = presets !== 'color' ? 'normal' : 'color';\n const alloyItems = createChoiceItems(items, onItemValueHandler, columns, presetItemTypes, itemResponse, select, providersBackstage);\n const menuLayout = { menuType: presets };\n return createPartialMenuWithAlloyItems(value, hasIcons, alloyItems, columns, menuLayout);\n };\n const createChoiceItems = (items, onItemValueHandler, columns, itemPresets, itemResponse, select, providersBackstage) => cat(map$2(items, item => {\n if (item.type === 'choiceitem') {\n return createChoiceMenuItem(item).fold(handleError, d => Optional.some(renderChoiceItem(d, columns === 1, itemPresets, onItemValueHandler, select(d.value), itemResponse, providersBackstage, menuHasIcons(items))));\n } else {\n return Optional.none();\n }\n }));\n\n const deriveMenuMovement = (columns, presets) => {\n const menuMarkers = markers(presets);\n if (columns === 1) {\n return {\n mode: 'menu',\n moveOnTab: true\n };\n } else if (columns === 'auto') {\n return {\n mode: 'grid',\n selector: '.' + menuMarkers.item,\n initSize: {\n numColumns: 1,\n numRows: 1\n }\n };\n } else {\n const rowClass = presets === 'color' ? 'tox-swatches__row' : 'tox-collection__group';\n return {\n mode: 'matrix',\n rowSelector: '.' + rowClass,\n previousSelector: menu => {\n return presets === 'color' ? descendant(menu.element, '[aria-checked=true]') : Optional.none();\n }\n };\n }\n };\n const deriveCollectionMovement = (columns, presets) => {\n if (columns === 1) {\n return {\n mode: 'menu',\n moveOnTab: false,\n selector: '.tox-collection__item'\n };\n } else if (columns === 'auto') {\n return {\n mode: 'flatgrid',\n selector: '.' + 'tox-collection__item',\n initSize: {\n numColumns: 1,\n numRows: 1\n }\n };\n } else {\n return {\n mode: 'matrix',\n selectors: {\n row: presets === 'color' ? '.tox-swatches__row' : '.tox-collection__group',\n cell: presets === 'color' ? `.${ colorClass }` : `.${ selectableClass }`\n }\n };\n }\n };\n\n const renderColorSwatchItem = (spec, backstage) => {\n const items = getColorItems(spec, backstage);\n const columns = backstage.colorinput.getColorCols(spec.initData.storageKey);\n const presets = 'color';\n const menuSpec = createPartialChoiceMenu(generate$6('menu-value'), items, value => {\n spec.onAction({ value });\n }, columns, presets, ItemResponse$1.CLOSE_ON_EXECUTE, spec.select.getOr(never), backstage.shared.providers);\n const widgetSpec = {\n ...menuSpec,\n markers: markers(presets),\n movement: deriveMenuMovement(columns, presets),\n showMenuRole: false\n };\n return {\n type: 'widget',\n data: { value: generate$6('widget-id') },\n dom: {\n tag: 'div',\n classes: ['tox-fancymenuitem']\n },\n autofocus: true,\n components: [parts$f.widget(Menu.sketch(widgetSpec))]\n };\n };\n const getColorItems = (spec, backstage) => {\n const useCustomColors = spec.initData.allowCustomColors && backstage.colorinput.hasCustomColors();\n return spec.initData.colors.fold(() => getColors$1(backstage.colorinput.getColors(spec.initData.storageKey), spec.initData.storageKey, useCustomColors), colors => colors.concat(getAdditionalColors(useCustomColors)));\n };\n\n const cellOverEvent = generate$6('cell-over');\n const cellExecuteEvent = generate$6('cell-execute');\n const makeAnnouncementText = backstage => (row, col) => backstage.shared.providers.translate([\n '{0} columns, {1} rows',\n col,\n row\n ]);\n const makeCell = (row, col, label) => {\n const emitCellOver = c => emitWith(c, cellOverEvent, {\n row,\n col\n });\n const emitExecute = c => emitWith(c, cellExecuteEvent, {\n row,\n col\n });\n const onClick = (c, se) => {\n se.stop();\n emitExecute(c);\n };\n return build$1({\n dom: {\n tag: 'div',\n attributes: {\n role: 'button',\n ['aria-label']: label\n }\n },\n behaviours: derive$1([\n config('insert-table-picker-cell', [\n run$1(mouseover(), Focusing.focus),\n run$1(execute$5(), emitExecute),\n run$1(click(), onClick),\n run$1(tap(), onClick)\n ]),\n Toggling.config({\n toggleClass: 'tox-insert-table-picker__selected',\n toggleOnExecute: false\n }),\n Focusing.config({ onFocus: emitCellOver })\n ])\n });\n };\n const makeCells = (getCellLabel, numRows, numCols) => {\n const cells = [];\n for (let i = 0; i < numRows; i++) {\n const row = [];\n for (let j = 0; j < numCols; j++) {\n const label = getCellLabel(i + 1, j + 1);\n row.push(makeCell(i, j, label));\n }\n cells.push(row);\n }\n return cells;\n };\n const selectCells = (cells, selectedRow, selectedColumn, numRows, numColumns) => {\n for (let i = 0; i < numRows; i++) {\n for (let j = 0; j < numColumns; j++) {\n Toggling.set(cells[i][j], i <= selectedRow && j <= selectedColumn);\n }\n }\n };\n const makeComponents = cells => bind$3(cells, cellRow => map$2(cellRow, premade));\n const makeLabelText = (row, col) => text$2(`${ col }x${ row }`);\n const renderInsertTableMenuItem = (spec, backstage) => {\n const numRows = 10;\n const numColumns = 10;\n const getCellLabel = makeAnnouncementText(backstage);\n const cells = makeCells(getCellLabel, numRows, numColumns);\n const emptyLabelText = makeLabelText(0, 0);\n const memLabel = record({\n dom: {\n tag: 'span',\n classes: ['tox-insert-table-picker__label']\n },\n components: [emptyLabelText],\n behaviours: derive$1([Replacing.config({})])\n });\n return {\n type: 'widget',\n data: { value: generate$6('widget-id') },\n dom: {\n tag: 'div',\n classes: ['tox-fancymenuitem']\n },\n autofocus: true,\n components: [parts$f.widget({\n dom: {\n tag: 'div',\n classes: ['tox-insert-table-picker']\n },\n components: makeComponents(cells).concat(memLabel.asSpec()),\n behaviours: derive$1([\n config('insert-table-picker', [\n runOnAttached(c => {\n Replacing.set(memLabel.get(c), [emptyLabelText]);\n }),\n runWithTarget(cellOverEvent, (c, t, e) => {\n const {row, col} = e.event;\n selectCells(cells, row, col, numRows, numColumns);\n Replacing.set(memLabel.get(c), [makeLabelText(row + 1, col + 1)]);\n }),\n runWithTarget(cellExecuteEvent, (c, _, e) => {\n const {row, col} = e.event;\n emit(c, sandboxClose());\n spec.onAction({\n numRows: row + 1,\n numColumns: col + 1\n });\n })\n ]),\n Keying.config({\n initSize: {\n numRows,\n numColumns\n },\n mode: 'flatgrid',\n selector: '[role=\"button\"]'\n })\n ])\n })]\n };\n };\n\n const fancyMenuItems = {\n inserttable: renderInsertTableMenuItem,\n colorswatch: renderColorSwatchItem\n };\n const renderFancyMenuItem = (spec, backstage) => get$h(fancyMenuItems, spec.fancytype).map(render => render(spec, backstage));\n\n const renderNestedItem = (spec, itemResponse, providersBackstage, renderIcons = true, downwardsCaret = false) => {\n const caret = downwardsCaret ? renderDownwardsCaret(providersBackstage.icons) : renderSubmenuCaret(providersBackstage.icons);\n const getApi = component => ({\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state),\n setIconFill: (id, value) => {\n descendant(component.element, `svg path[class=\"${ id }\"], rect[class=\"${ id }\"]`).each(underlinePath => {\n set$9(underlinePath, 'fill', value);\n });\n },\n setTooltip: tooltip => {\n const translatedTooltip = providersBackstage.translate(tooltip);\n set$9(component.element, 'aria-label', translatedTooltip);\n }\n });\n const structure = renderItemStructure({\n presets: 'normal',\n iconContent: spec.icon,\n textContent: spec.text,\n htmlContent: Optional.none(),\n ariaLabel: spec.text,\n caret: Optional.some(caret),\n checkMark: Optional.none(),\n shortcutContent: spec.shortcut\n }, providersBackstage, renderIcons);\n return renderCommonItem({\n context: spec.context,\n data: buildData(spec),\n getApi,\n enabled: spec.enabled,\n onAction: noop,\n onSetup: spec.onSetup,\n triggersSubmenu: true,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage);\n };\n\n const renderNormalItem = (spec, itemResponse, providersBackstage, renderIcons = true) => {\n const getApi = component => ({\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state)\n });\n const structure = renderItemStructure({\n presets: 'normal',\n iconContent: spec.icon,\n textContent: spec.text,\n htmlContent: Optional.none(),\n ariaLabel: spec.text,\n caret: Optional.none(),\n checkMark: Optional.none(),\n shortcutContent: spec.shortcut\n }, providersBackstage, renderIcons);\n return renderCommonItem({\n context: spec.context,\n data: buildData(spec),\n getApi,\n enabled: spec.enabled,\n onAction: spec.onAction,\n onSetup: spec.onSetup,\n triggersSubmenu: false,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage);\n };\n\n const renderSeparatorItem = spec => ({\n type: 'separator',\n dom: {\n tag: 'div',\n classes: [\n selectableClass,\n groupHeadingClass\n ]\n },\n components: spec.text.map(text$2).toArray()\n });\n\n const renderToggleMenuItem = (spec, itemResponse, providersBackstage, renderIcons = true) => {\n const getApi = component => ({\n setActive: state => {\n Toggling.set(component, state);\n },\n isActive: () => Toggling.isOn(component),\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state)\n });\n const structure = renderItemStructure({\n iconContent: spec.icon,\n textContent: spec.text,\n htmlContent: Optional.none(),\n ariaLabel: spec.text,\n checkMark: Optional.some(renderCheckmark(providersBackstage.icons)),\n caret: Optional.none(),\n shortcutContent: spec.shortcut,\n presets: 'normal',\n meta: spec.meta\n }, providersBackstage, renderIcons);\n return deepMerge(renderCommonItem({\n context: spec.context,\n data: buildData(spec),\n enabled: spec.enabled,\n getApi,\n onAction: spec.onAction,\n onSetup: spec.onSetup,\n triggersSubmenu: false,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage), {\n toggling: {\n toggleClass: tickedClass,\n toggleOnExecute: false,\n selected: spec.active\n },\n role: spec.role.getOrUndefined()\n });\n };\n\n const autocomplete = renderAutocompleteItem;\n const separator$3 = renderSeparatorItem;\n const normal = renderNormalItem;\n const nested = renderNestedItem;\n const toggle$1 = renderToggleMenuItem;\n const fancy = renderFancyMenuItem;\n const card = renderCardMenuItem;\n\n const getCoupled = (component, coupleConfig, coupleState, name) => coupleState.getOrCreate(component, coupleConfig, name);\n const getExistingCoupled = (component, coupleConfig, coupleState, name) => coupleState.getExisting(component, coupleConfig, name);\n\n var CouplingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getCoupled: getCoupled,\n getExistingCoupled: getExistingCoupled\n });\n\n var CouplingSchema = [requiredOf('others', setOf(Result.value, anyValue()))];\n\n const init$9 = () => {\n const coupled = {};\n const lookupCoupled = (coupleConfig, coupledName) => {\n const available = keys(coupleConfig.others);\n if (available.length === 0) {\n throw new Error('Cannot find any known coupled components');\n } else {\n return get$h(coupled, coupledName);\n }\n };\n const getOrCreate = (component, coupleConfig, name) => {\n return lookupCoupled(coupleConfig, name).getOrThunk(() => {\n const builder = get$h(coupleConfig.others, name).getOrDie('No information found for coupled component: ' + name);\n const spec = builder(component);\n const built = component.getSystem().build(spec);\n coupled[name] = built;\n return built;\n });\n };\n const getExisting = (component, coupleConfig, name) => {\n return lookupCoupled(coupleConfig, name).orThunk(() => {\n get$h(coupleConfig.others, name).getOrDie('No information found for coupled component: ' + name);\n return Optional.none();\n });\n };\n const readState = constant$1({});\n return nu$7({\n readState,\n getExisting,\n getOrCreate\n });\n };\n\n var CouplingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$9\n });\n\n const Coupling = create$4({\n fields: CouplingSchema,\n name: 'coupling',\n apis: CouplingApis,\n state: CouplingState\n });\n\n const nu$3 = baseFn => {\n let data = Optional.none();\n let callbacks = [];\n const map = f => nu$3(nCallback => {\n get(data => {\n nCallback(f(data));\n });\n });\n const get = nCallback => {\n if (isReady()) {\n call(nCallback);\n } else {\n callbacks.push(nCallback);\n }\n };\n const set = x => {\n if (!isReady()) {\n data = Optional.some(x);\n run(callbacks);\n callbacks = [];\n }\n };\n const isReady = () => data.isSome();\n const run = cbs => {\n each$1(cbs, call);\n };\n const call = cb => {\n data.each(x => {\n setTimeout(() => {\n cb(x);\n }, 0);\n });\n };\n baseFn(set);\n return {\n get,\n map,\n isReady\n };\n };\n const pure$1 = a => nu$3(callback => {\n callback(a);\n });\n const LazyValue = {\n nu: nu$3,\n pure: pure$1\n };\n\n const errorReporter = err => {\n setTimeout(() => {\n throw err;\n }, 0);\n };\n const make$5 = run => {\n const get = callback => {\n run().then(callback, errorReporter);\n };\n const map = fab => {\n return make$5(() => run().then(fab));\n };\n const bind = aFutureB => {\n return make$5(() => run().then(v => aFutureB(v).toPromise()));\n };\n const anonBind = futureB => {\n return make$5(() => run().then(() => futureB.toPromise()));\n };\n const toLazy = () => {\n return LazyValue.nu(get);\n };\n const toCached = () => {\n let cache = null;\n return make$5(() => {\n if (cache === null) {\n cache = run();\n }\n return cache;\n });\n };\n const toPromise = run;\n return {\n map,\n bind,\n anonBind,\n toLazy,\n toCached,\n toPromise,\n get\n };\n };\n const nu$2 = baseFn => {\n return make$5(() => new Promise(baseFn));\n };\n const pure = a => {\n return make$5(() => Promise.resolve(a));\n };\n const Future = {\n nu: nu$2,\n pure\n };\n\n const suffix = constant$1('sink');\n const partType$1 = constant$1(optional({\n name: suffix(),\n overrides: constant$1({\n dom: { tag: 'div' },\n behaviours: derive$1([Positioning.config({ useFixed: always })]),\n events: derive$2([\n cutter(keydown()),\n cutter(mousedown()),\n cutter(click())\n ])\n })\n }));\n\n const getAnchor = (detail, component) => {\n const hotspot = detail.getHotspot(component).getOr(component);\n const type = 'hotspot';\n const overrides = detail.getAnchorOverrides();\n return detail.layouts.fold(() => ({\n type,\n hotspot,\n overrides\n }), layouts => ({\n type,\n hotspot,\n overrides,\n layouts\n }));\n };\n const fetch = (detail, mapFetch, component) => {\n const fetcher = detail.fetch;\n return fetcher(component).map(mapFetch);\n };\n const openF = (detail, mapFetch, anchor, component, sandbox, externals, highlightOnOpen) => {\n const futureData = fetch(detail, mapFetch, component);\n const getLazySink = getSink(component, detail);\n return futureData.map(tdata => tdata.bind(data => {\n const primaryMenu = data.menus[data.primary];\n Optional.from(primaryMenu).each(menu => {\n detail.listRole.each(listRole => {\n menu.role = listRole;\n });\n });\n return Optional.from(tieredMenu.sketch({\n ...externals.menu(),\n uid: generate$5(''),\n data,\n highlightOnOpen,\n onOpenMenu: (tmenu, menu) => {\n const sink = getLazySink().getOrDie();\n Positioning.position(sink, menu, { anchor });\n Sandboxing.decloak(sandbox);\n },\n onOpenSubmenu: (tmenu, item, submenu) => {\n const sink = getLazySink().getOrDie();\n Positioning.position(sink, submenu, {\n anchor: {\n type: 'submenu',\n item\n }\n });\n Sandboxing.decloak(sandbox);\n },\n onRepositionMenu: (tmenu, primaryMenu, submenuTriggers) => {\n const sink = getLazySink().getOrDie();\n Positioning.position(sink, primaryMenu, { anchor });\n each$1(submenuTriggers, st => {\n Positioning.position(sink, st.triggeredMenu, {\n anchor: {\n type: 'submenu',\n item: st.triggeringItem\n }\n });\n });\n },\n onEscape: () => {\n Focusing.focus(component);\n Sandboxing.close(sandbox);\n return Optional.some(true);\n }\n }));\n }));\n };\n const open = (detail, mapFetch, hotspot, sandbox, externals, onOpenSync, highlightOnOpen) => {\n const anchor = getAnchor(detail, hotspot);\n const processed = openF(detail, mapFetch, anchor, hotspot, sandbox, externals, highlightOnOpen);\n return processed.map(tdata => {\n tdata.fold(() => {\n if (Sandboxing.isOpen(sandbox)) {\n Sandboxing.close(sandbox);\n }\n }, data => {\n Sandboxing.cloak(sandbox);\n Sandboxing.open(sandbox, data);\n onOpenSync(sandbox);\n });\n return sandbox;\n });\n };\n const close = (detail, mapFetch, component, sandbox, _externals, _onOpenSync, _highlightOnOpen) => {\n Sandboxing.close(sandbox);\n return Future.pure(sandbox);\n };\n const togglePopup = (detail, mapFetch, hotspot, externals, onOpenSync, highlightOnOpen) => {\n const sandbox = Coupling.getCoupled(hotspot, 'sandbox');\n const showing = Sandboxing.isOpen(sandbox);\n const action = showing ? close : open;\n return action(detail, mapFetch, hotspot, sandbox, externals, onOpenSync, highlightOnOpen);\n };\n const matchWidth = (hotspot, container, useMinWidth) => {\n const menu = Composing.getCurrent(container).getOr(container);\n const buttonWidth = get$d(hotspot.element);\n if (useMinWidth) {\n set$8(menu.element, 'min-width', buttonWidth + 'px');\n } else {\n set$7(menu.element, buttonWidth);\n }\n };\n const getSink = (anyInSystem, sinkDetail) => anyInSystem.getSystem().getByUid(sinkDetail.uid + '-' + suffix()).map(internalSink => () => Result.value(internalSink)).getOrThunk(() => sinkDetail.lazySink.fold(() => () => Result.error(new Error('No internal sink is specified, nor could an external sink be found')), lazySinkFn => () => lazySinkFn(anyInSystem)));\n const doRepositionMenus = sandbox => {\n Sandboxing.getState(sandbox).each(tmenu => {\n tieredMenu.repositionMenus(tmenu);\n });\n };\n const makeSandbox$1 = (detail, hotspot, extras) => {\n const ariaControls = manager();\n const onOpen = (component, menu) => {\n const anchor = getAnchor(detail, hotspot);\n ariaControls.link(hotspot.element);\n if (detail.matchWidth) {\n matchWidth(anchor.hotspot, menu, detail.useMinWidth);\n }\n detail.onOpen(anchor, component, menu);\n if (extras !== undefined && extras.onOpen !== undefined) {\n extras.onOpen(component, menu);\n }\n };\n const onClose = (component, menu) => {\n ariaControls.unlink(hotspot.element);\n lazySink().getOr(menu).element.dom.dispatchEvent(new window.FocusEvent('focusout'));\n if (extras !== undefined && extras.onClose !== undefined) {\n extras.onClose(component, menu);\n }\n };\n const lazySink = getSink(hotspot, detail);\n return {\n dom: {\n tag: 'div',\n classes: detail.sandboxClasses,\n attributes: { id: ariaControls.id }\n },\n behaviours: SketchBehaviours.augment(detail.sandboxBehaviours, [\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: hotspot\n }\n }),\n Sandboxing.config({\n onOpen,\n onClose,\n isPartOf: (container, data, queryElem) => {\n return isPartOf$1(data, queryElem) || isPartOf$1(hotspot, queryElem);\n },\n getAttachPoint: () => {\n return lazySink().getOrDie();\n }\n }),\n Composing.config({\n find: sandbox => {\n return Sandboxing.getState(sandbox).bind(menu => Composing.getCurrent(menu));\n }\n }),\n Receiving.config({\n channels: {\n ...receivingChannel$1({ isExtraPart: never }),\n ...receivingChannel({ doReposition: doRepositionMenus })\n }\n })\n ])\n };\n };\n const repositionMenus = comp => {\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n doRepositionMenus(sandbox);\n };\n\n const sandboxFields = () => [\n defaulted('sandboxClasses', []),\n SketchBehaviours.field('sandboxBehaviours', [\n Composing,\n Receiving,\n Sandboxing,\n Representing\n ])\n ];\n\n const schema$k = constant$1([\n required$1('dom'),\n required$1('fetch'),\n onHandler('onOpen'),\n onKeyboardHandler('onExecute'),\n defaulted('getHotspot', Optional.some),\n defaulted('getAnchorOverrides', constant$1({})),\n schema$y(),\n field('dropdownBehaviours', [\n Toggling,\n Coupling,\n Keying,\n Focusing\n ]),\n required$1('toggleClass'),\n defaulted('eventOrder', {}),\n option$3('lazySink'),\n defaulted('matchWidth', false),\n defaulted('useMinWidth', false),\n option$3('role'),\n option$3('listRole')\n ].concat(sandboxFields()));\n const parts$e = constant$1([\n external({\n schema: [\n tieredMenuMarkers(),\n defaulted('fakeFocus', false)\n ],\n name: 'menu',\n defaults: detail => {\n return { onExecute: detail.onExecute };\n }\n }),\n partType$1()\n ]);\n\n const factory$k = (detail, components, _spec, externals) => {\n const lookupAttr = attr => get$h(detail.dom, 'attributes').bind(attrs => get$h(attrs, attr));\n const switchToMenu = sandbox => {\n Sandboxing.getState(sandbox).each(tmenu => {\n tieredMenu.highlightPrimary(tmenu);\n });\n };\n const togglePopup$1 = (dropdownComp, onOpenSync, highlightOnOpen) => {\n return togglePopup(detail, identity, dropdownComp, externals, onOpenSync, highlightOnOpen);\n };\n const action = component => {\n const onOpenSync = switchToMenu;\n togglePopup$1(component, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n };\n const apis = {\n expand: comp => {\n if (!Toggling.isOn(comp)) {\n togglePopup$1(comp, noop, HighlightOnOpen.HighlightNone).get(noop);\n }\n },\n open: comp => {\n if (!Toggling.isOn(comp)) {\n togglePopup$1(comp, noop, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n }\n },\n refetch: comp => {\n const optSandbox = Coupling.getExistingCoupled(comp, 'sandbox');\n return optSandbox.fold(() => {\n return togglePopup$1(comp, noop, HighlightOnOpen.HighlightMenuAndItem).map(noop);\n }, sandboxComp => {\n return open(detail, identity, comp, sandboxComp, externals, noop, HighlightOnOpen.HighlightMenuAndItem).map(noop);\n });\n },\n isOpen: Toggling.isOn,\n close: comp => {\n if (Toggling.isOn(comp)) {\n togglePopup$1(comp, noop, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n }\n },\n repositionMenus: comp => {\n if (Toggling.isOn(comp)) {\n repositionMenus(comp);\n }\n }\n };\n const triggerExecute = (comp, _se) => {\n emitExecute(comp);\n return Optional.some(true);\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.dropdownBehaviours, [\n Toggling.config({\n toggleClass: detail.toggleClass,\n aria: { mode: 'expanded' }\n }),\n Coupling.config({\n others: {\n sandbox: hotspot => {\n return makeSandbox$1(detail, hotspot, {\n onOpen: () => Toggling.on(hotspot),\n onClose: () => Toggling.off(hotspot)\n });\n }\n }\n }),\n Keying.config({\n mode: 'special',\n onSpace: triggerExecute,\n onEnter: triggerExecute,\n onDown: (comp, _se) => {\n if (Dropdown.isOpen(comp)) {\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n switchToMenu(sandbox);\n } else {\n Dropdown.open(comp);\n }\n return Optional.some(true);\n },\n onEscape: (comp, _se) => {\n if (Dropdown.isOpen(comp)) {\n Dropdown.close(comp);\n return Optional.some(true);\n } else {\n return Optional.none();\n }\n }\n }),\n Focusing.config({})\n ]),\n events: events$9(Optional.some(action)),\n eventOrder: {\n ...detail.eventOrder,\n [execute$5()]: [\n 'disabling',\n 'toggling',\n 'alloy.base.behaviour'\n ]\n },\n apis,\n domModification: {\n attributes: {\n 'aria-haspopup': detail.listRole.getOr('true'),\n ...detail.role.fold(() => ({}), role => ({ role })),\n ...detail.dom.tag === 'button' ? { type: lookupAttr('type').getOr('button') } : {}\n }\n }\n };\n };\n const Dropdown = composite({\n name: 'Dropdown',\n configFields: schema$k(),\n partFields: parts$e(),\n factory: factory$k,\n apis: {\n open: (apis, comp) => apis.open(comp),\n refetch: (apis, comp) => apis.refetch(comp),\n expand: (apis, comp) => apis.expand(comp),\n close: (apis, comp) => apis.close(comp),\n isOpen: (apis, comp) => apis.isOpen(comp),\n repositionMenus: (apis, comp) => apis.repositionMenus(comp)\n }\n });\n\n const identifyMenuLayout = searchMode => {\n switch (searchMode.searchMode) {\n case 'no-search': {\n return { menuType: 'normal' };\n }\n default: {\n return {\n menuType: 'searchable',\n searchMode\n };\n }\n }\n };\n const handleRefetchTrigger = originalSandboxComp => {\n const dropdown = Representing.getValue(originalSandboxComp);\n const optSearcherState = findWithinSandbox(originalSandboxComp).map(saveState);\n Dropdown.refetch(dropdown).get(() => {\n const newSandboxComp = Coupling.getCoupled(dropdown, 'sandbox');\n optSearcherState.each(searcherState => findWithinSandbox(newSandboxComp).each(inputComp => restoreState(inputComp, searcherState)));\n });\n };\n const handleRedirectToMenuItem = (sandboxComp, se) => {\n getActiveMenuItemFrom(sandboxComp).each(activeItem => {\n retargetAndDispatchWith(sandboxComp, activeItem.element, se.event.eventType, se.event.interactionEvent);\n });\n };\n const getActiveMenuItemFrom = sandboxComp => {\n return Sandboxing.getState(sandboxComp).bind(Highlighting.getHighlighted).bind(Highlighting.getHighlighted);\n };\n const getSearchResults = activeMenuComp => {\n return has(activeMenuComp.element, searchResultsClass) ? Optional.some(activeMenuComp.element) : descendant(activeMenuComp.element, '.' + searchResultsClass);\n };\n const updateAriaOnHighlight = (tmenuComp, menuComp, itemComp) => {\n findWithinMenu(tmenuComp).each(inputComp => {\n setActiveDescendant(inputComp, itemComp);\n const optActiveResults = getSearchResults(menuComp);\n optActiveResults.each(resultsElem => {\n getOpt(resultsElem, 'id').each(controlledId => set$9(inputComp.element, 'aria-controls', controlledId));\n });\n });\n set$9(itemComp.element, 'aria-selected', 'true');\n };\n const updateAriaOnDehighlight = (tmenuComp, menuComp, itemComp) => {\n set$9(itemComp.element, 'aria-selected', 'false');\n };\n const focusSearchField = tmenuComp => {\n findWithinMenu(tmenuComp).each(searcherComp => Focusing.focus(searcherComp));\n };\n const getSearchPattern = dropdownComp => {\n const optSandboxComp = Coupling.getExistingCoupled(dropdownComp, 'sandbox');\n return optSandboxComp.bind(findWithinSandbox).map(saveState).map(state => state.fetchPattern).getOr('');\n };\n\n var FocusMode;\n (function (FocusMode) {\n FocusMode[FocusMode['ContentFocus'] = 0] = 'ContentFocus';\n FocusMode[FocusMode['UiFocus'] = 1] = 'UiFocus';\n }(FocusMode || (FocusMode = {})));\n const createMenuItemFromBridge = (item, itemResponse, backstage, menuHasIcons, isHorizontalMenu) => {\n const providersBackstage = backstage.shared.providers;\n const parseForHorizontalMenu = menuitem => !isHorizontalMenu ? menuitem : {\n ...menuitem,\n shortcut: Optional.none(),\n icon: menuitem.text.isSome() ? Optional.none() : menuitem.icon\n };\n switch (item.type) {\n case 'menuitem':\n return createMenuItem(item).fold(handleError, d => Optional.some(normal(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons)));\n case 'nestedmenuitem':\n return createNestedMenuItem(item).fold(handleError, d => Optional.some(nested(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons, isHorizontalMenu)));\n case 'togglemenuitem':\n return createToggleMenuItem(item).fold(handleError, d => Optional.some(toggle$1(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons)));\n case 'separator':\n return createSeparatorMenuItem(item).fold(handleError, d => Optional.some(separator$3(d)));\n case 'fancymenuitem':\n return createFancyMenuItem(item).fold(handleError, d => fancy(d, backstage));\n default: {\n console.error('Unknown item in general menu', item);\n return Optional.none();\n }\n }\n };\n const createAutocompleteItems = (items, matchText, onItemValueHandler, columns, itemResponse, sharedBackstage, highlightOn) => {\n const renderText = columns === 1;\n const renderIcons = !renderText || menuHasIcons(items);\n return cat(map$2(items, item => {\n switch (item.type) {\n case 'separator':\n return createSeparatorItem(item).fold(handleError, d => Optional.some(separator$3(d)));\n case 'cardmenuitem':\n return createCardMenuItem(item).fold(handleError, d => Optional.some(card({\n ...d,\n onAction: api => {\n d.onAction(api);\n onItemValueHandler(d.value, d.meta);\n }\n }, itemResponse, sharedBackstage, {\n itemBehaviours: tooltipBehaviour(d.meta, sharedBackstage, Optional.none()),\n cardText: {\n matchText,\n highlightOn\n }\n })));\n case 'autocompleteitem':\n default:\n return createAutocompleterItem(item).fold(handleError, d => Optional.some(autocomplete(d, matchText, renderText, 'normal', onItemValueHandler, itemResponse, sharedBackstage, renderIcons)));\n }\n }));\n };\n const createPartialMenu = (value, items, itemResponse, backstage, isHorizontalMenu, searchMode) => {\n const hasIcons = menuHasIcons(items);\n const alloyItems = cat(map$2(items, item => {\n const itemHasIcon = i => isHorizontalMenu ? !has$2(i, 'text') : hasIcons;\n const createItem = i => createMenuItemFromBridge(i, itemResponse, backstage, itemHasIcon(i), isHorizontalMenu);\n if (item.type === 'nestedmenuitem' && item.getSubmenuItems().length <= 0) {\n return createItem({\n ...item,\n enabled: false\n });\n } else {\n return createItem(item);\n }\n }));\n const menuLayout = identifyMenuLayout(searchMode);\n const createPartial = isHorizontalMenu ? createHorizontalPartialMenuWithAlloyItems : createPartialMenuWithAlloyItems;\n return createPartial(value, hasIcons, alloyItems, 1, menuLayout);\n };\n const createTieredDataFrom = partialMenu => tieredMenu.singleData(partialMenu.value, partialMenu);\n const createInlineMenuFrom = (partialMenu, columns, focusMode, presets) => {\n const movement = deriveMenuMovement(columns, presets);\n const menuMarkers = markers(presets);\n return {\n data: createTieredDataFrom({\n ...partialMenu,\n movement,\n menuBehaviours: SimpleBehaviours.unnamedEvents(columns !== 'auto' ? [] : [runOnAttached((comp, _se) => {\n detectSize(comp, 4, menuMarkers.item).each(({numColumns, numRows}) => {\n Keying.setGridSize(comp, numRows, numColumns);\n });\n })])\n }),\n menu: {\n markers: markers(presets),\n fakeFocus: focusMode === FocusMode.ContentFocus\n }\n };\n };\n\n const rangeToSimRange = r => SimRange.create(SugarElement.fromDom(r.startContainer), r.startOffset, SugarElement.fromDom(r.endContainer), r.endOffset);\n const register$c = (editor, sharedBackstage) => {\n const autocompleterId = generate$6('autocompleter');\n const processingAction = Cell(false);\n const activeState = Cell(false);\n const activeRange = value$4();\n const autocompleter = build$1(InlineView.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-autocompleter'],\n attributes: { id: autocompleterId }\n },\n components: [],\n fireDismissalEventInstead: {},\n inlineBehaviours: derive$1([config('dismissAutocompleter', [\n run$1(dismissRequested(), () => cancelIfNecessary()),\n run$1(highlight$1(), (_, se) => {\n getOpt(se.event.target, 'id').each(id => set$9(SugarElement.fromDom(editor.getBody()), 'aria-activedescendant', id));\n })\n ])]),\n lazySink: sharedBackstage.getSink\n }));\n const isMenuOpen = () => InlineView.isOpen(autocompleter);\n const isActive = activeState.get;\n const hideIfNecessary = () => {\n if (isMenuOpen()) {\n InlineView.hide(autocompleter);\n editor.dom.remove(autocompleterId, false);\n const editorBody = SugarElement.fromDom(editor.getBody());\n getOpt(editorBody, 'aria-owns').filter(ariaOwnsAttr => ariaOwnsAttr === autocompleterId).each(() => {\n remove$8(editorBody, 'aria-owns');\n remove$8(editorBody, 'aria-activedescendant');\n });\n }\n };\n const getMenu = () => InlineView.getContent(autocompleter).bind(tmenu => {\n return get$i(tmenu.components(), 0);\n });\n const cancelIfNecessary = () => editor.execCommand('mceAutocompleterClose');\n const getCombinedItems = matches => {\n const columns = findMap(matches, m => Optional.from(m.columns)).getOr(1);\n return bind$3(matches, match => {\n const choices = match.items;\n return createAutocompleteItems(choices, match.matchText, (itemValue, itemMeta) => {\n const autocompleterApi = {\n hide: () => cancelIfNecessary(),\n reload: fetchOptions => {\n hideIfNecessary();\n editor.execCommand('mceAutocompleterReload', false, { fetchOptions });\n }\n };\n editor.execCommand('mceAutocompleterRefreshActiveRange');\n activeRange.get().each(range => {\n processingAction.set(true);\n match.onAction(autocompleterApi, range, itemValue, itemMeta);\n processingAction.set(false);\n });\n }, columns, ItemResponse$1.BUBBLE_TO_SANDBOX, sharedBackstage, match.highlightOn);\n });\n };\n const display = (lookupData, items) => {\n const columns = findMap(lookupData, ld => Optional.from(ld.columns)).getOr(1);\n InlineView.showMenuAt(autocompleter, {\n anchor: {\n type: 'selection',\n getSelection: () => activeRange.get().map(rangeToSimRange),\n root: SugarElement.fromDom(editor.getBody())\n }\n }, createInlineMenuFrom(createPartialMenuWithAlloyItems('autocompleter-value', true, items, columns, { menuType: 'normal' }), columns, FocusMode.ContentFocus, 'normal'));\n getMenu().each(Highlighting.highlightFirst);\n };\n const updateDisplay = lookupData => {\n const combinedItems = getCombinedItems(lookupData);\n if (combinedItems.length > 0) {\n display(lookupData, combinedItems);\n set$9(SugarElement.fromDom(editor.getBody()), 'aria-owns', autocompleterId);\n if (!editor.inline) {\n cloneAutocompleterToEditorDoc();\n }\n } else {\n hideIfNecessary();\n }\n };\n const cloneAutocompleterToEditorDoc = () => {\n if (editor.dom.get(autocompleterId)) {\n editor.dom.remove(autocompleterId, false);\n }\n const docElm = editor.getDoc().documentElement;\n const selection = editor.selection.getNode();\n const newElm = deep(autocompleter.element);\n setAll(newElm, {\n border: '0',\n clip: 'rect(0 0 0 0)',\n height: '1px',\n margin: '-1px',\n overflow: 'hidden',\n padding: '0',\n position: 'absolute',\n width: '1px',\n top: `${ selection.offsetTop }px`,\n left: `${ selection.offsetLeft }px`\n });\n editor.dom.add(docElm, newElm.dom);\n descendant(newElm, '[role=\"menu\"]').each(child => {\n remove$7(child, 'position');\n remove$7(child, 'max-height');\n });\n };\n editor.on('AutocompleterStart', ({lookupData}) => {\n activeState.set(true);\n processingAction.set(false);\n updateDisplay(lookupData);\n });\n editor.on('AutocompleterUpdate', ({lookupData}) => updateDisplay(lookupData));\n editor.on('AutocompleterUpdateActiveRange', ({range}) => activeRange.set(range));\n editor.on('AutocompleterEnd', () => {\n hideIfNecessary();\n activeState.set(false);\n processingAction.set(false);\n activeRange.clear();\n });\n const autocompleterUiApi = {\n cancelIfNecessary,\n isMenuOpen,\n isActive,\n isProcessingAction: processingAction.get,\n getMenu\n };\n AutocompleterEditorEvents.setup(autocompleterUiApi, editor);\n };\n const Autocompleter = { register: register$c };\n\n const closest = (scope, selector, isRoot) => closest$1(scope, selector, isRoot).isSome();\n\n const DelayedFunction = (fun, delay) => {\n let ref = null;\n const schedule = (...args) => {\n ref = setTimeout(() => {\n fun.apply(null, args);\n ref = null;\n }, delay);\n };\n const cancel = () => {\n if (ref !== null) {\n clearTimeout(ref);\n ref = null;\n }\n };\n return {\n cancel,\n schedule\n };\n };\n\n const SIGNIFICANT_MOVE = 5;\n const LONGPRESS_DELAY = 400;\n const getTouch = event => {\n const raw = event.raw;\n if (raw.touches === undefined || raw.touches.length !== 1) {\n return Optional.none();\n }\n return Optional.some(raw.touches[0]);\n };\n const isFarEnough = (touch, data) => {\n const distX = Math.abs(touch.clientX - data.x);\n const distY = Math.abs(touch.clientY - data.y);\n return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE;\n };\n const monitor = settings => {\n const startData = value$4();\n const longpressFired = Cell(false);\n const longpress$1 = DelayedFunction(event => {\n settings.triggerEvent(longpress(), event);\n longpressFired.set(true);\n }, LONGPRESS_DELAY);\n const handleTouchstart = event => {\n getTouch(event).each(touch => {\n longpress$1.cancel();\n const data = {\n x: touch.clientX,\n y: touch.clientY,\n target: event.target\n };\n longpress$1.schedule(event);\n longpressFired.set(false);\n startData.set(data);\n });\n return Optional.none();\n };\n const handleTouchmove = event => {\n longpress$1.cancel();\n getTouch(event).each(touch => {\n startData.on(data => {\n if (isFarEnough(touch, data)) {\n startData.clear();\n }\n });\n });\n return Optional.none();\n };\n const handleTouchend = event => {\n longpress$1.cancel();\n const isSame = data => eq(data.target, event.target);\n return startData.get().filter(isSame).map(_data => {\n if (longpressFired.get()) {\n event.prevent();\n return false;\n } else {\n return settings.triggerEvent(tap(), event);\n }\n });\n };\n const handlers = wrapAll([\n {\n key: touchstart(),\n value: handleTouchstart\n },\n {\n key: touchmove(),\n value: handleTouchmove\n },\n {\n key: touchend(),\n value: handleTouchend\n }\n ]);\n const fireIfReady = (event, type) => get$h(handlers, type).bind(handler => handler(event));\n return { fireIfReady };\n };\n\n const isDangerous = event => {\n const keyEv = event.raw;\n return keyEv.which === BACKSPACE[0] && !contains$2([\n 'input',\n 'textarea'\n ], name$3(event.target)) && !closest(event.target, '[contenteditable=\"true\"]');\n };\n const setup$d = (container, rawSettings) => {\n const settings = {\n stopBackspace: true,\n ...rawSettings\n };\n const pointerEvents = [\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'gesturestart',\n 'mousedown',\n 'mouseup',\n 'mouseover',\n 'mousemove',\n 'mouseout',\n 'click'\n ];\n const tapEvent = monitor(settings);\n const simpleEvents = map$2(pointerEvents.concat([\n 'selectstart',\n 'input',\n 'contextmenu',\n 'change',\n 'transitionend',\n 'transitioncancel',\n 'drag',\n 'dragstart',\n 'dragend',\n 'dragenter',\n 'dragleave',\n 'dragover',\n 'drop',\n 'keyup'\n ]), type => bind(container, type, event => {\n tapEvent.fireIfReady(event, type).each(tapStopped => {\n if (tapStopped) {\n event.kill();\n }\n });\n const stopped = settings.triggerEvent(type, event);\n if (stopped) {\n event.kill();\n }\n }));\n const pasteTimeout = value$4();\n const onPaste = bind(container, 'paste', event => {\n tapEvent.fireIfReady(event, 'paste').each(tapStopped => {\n if (tapStopped) {\n event.kill();\n }\n });\n const stopped = settings.triggerEvent('paste', event);\n if (stopped) {\n event.kill();\n }\n pasteTimeout.set(setTimeout(() => {\n settings.triggerEvent(postPaste(), event);\n }, 0));\n });\n const onKeydown = bind(container, 'keydown', event => {\n const stopped = settings.triggerEvent('keydown', event);\n if (stopped) {\n event.kill();\n } else if (settings.stopBackspace && isDangerous(event)) {\n event.prevent();\n }\n });\n const onFocusIn = bind(container, 'focusin', event => {\n const stopped = settings.triggerEvent('focusin', event);\n if (stopped) {\n event.kill();\n }\n });\n const focusoutTimeout = value$4();\n const onFocusOut = bind(container, 'focusout', event => {\n const stopped = settings.triggerEvent('focusout', event);\n if (stopped) {\n event.kill();\n }\n focusoutTimeout.set(setTimeout(() => {\n settings.triggerEvent(postBlur(), event);\n }, 0));\n });\n const unbind = () => {\n each$1(simpleEvents, e => {\n e.unbind();\n });\n onKeydown.unbind();\n onFocusIn.unbind();\n onFocusOut.unbind();\n onPaste.unbind();\n pasteTimeout.on(clearTimeout);\n focusoutTimeout.on(clearTimeout);\n };\n return { unbind };\n };\n\n const derive = (rawEvent, rawTarget) => {\n const source = get$h(rawEvent, 'target').getOr(rawTarget);\n return Cell(source);\n };\n\n const fromSource = (event, source) => {\n const stopper = Cell(false);\n const cutter = Cell(false);\n const stop = () => {\n stopper.set(true);\n };\n const cut = () => {\n cutter.set(true);\n };\n return {\n stop,\n cut,\n isStopped: stopper.get,\n isCut: cutter.get,\n event,\n setSource: source.set,\n getSource: source.get\n };\n };\n const fromExternal = event => {\n const stopper = Cell(false);\n const stop = () => {\n stopper.set(true);\n };\n return {\n stop,\n cut: noop,\n isStopped: stopper.get,\n isCut: never,\n event,\n setSource: die('Cannot set source of a broadcasted event'),\n getSource: die('Cannot get source of a broadcasted event')\n };\n };\n\n const adt$1 = Adt.generate([\n { stopped: [] },\n { resume: ['element'] },\n { complete: [] }\n ]);\n const doTriggerHandler = (lookup, eventType, rawEvent, target, source, logger) => {\n const handler = lookup(eventType, target);\n const simulatedEvent = fromSource(rawEvent, source);\n return handler.fold(() => {\n logger.logEventNoHandlers(eventType, target);\n return adt$1.complete();\n }, handlerInfo => {\n const descHandler = handlerInfo.descHandler;\n const eventHandler = getCurried(descHandler);\n eventHandler(simulatedEvent);\n if (simulatedEvent.isStopped()) {\n logger.logEventStopped(eventType, handlerInfo.element, descHandler.purpose);\n return adt$1.stopped();\n } else if (simulatedEvent.isCut()) {\n logger.logEventCut(eventType, handlerInfo.element, descHandler.purpose);\n return adt$1.complete();\n } else {\n return parent(handlerInfo.element).fold(() => {\n logger.logNoParent(eventType, handlerInfo.element, descHandler.purpose);\n return adt$1.complete();\n }, parent => {\n logger.logEventResponse(eventType, handlerInfo.element, descHandler.purpose);\n return adt$1.resume(parent);\n });\n }\n });\n };\n const doTriggerOnUntilStopped = (lookup, eventType, rawEvent, rawTarget, source, logger) => doTriggerHandler(lookup, eventType, rawEvent, rawTarget, source, logger).fold(always, parent => doTriggerOnUntilStopped(lookup, eventType, rawEvent, parent, source, logger), never);\n const triggerHandler = (lookup, eventType, rawEvent, target, logger) => {\n const source = derive(rawEvent, target);\n return doTriggerHandler(lookup, eventType, rawEvent, target, source, logger);\n };\n const broadcast = (listeners, rawEvent, _logger) => {\n const simulatedEvent = fromExternal(rawEvent);\n each$1(listeners, listener => {\n const descHandler = listener.descHandler;\n const handler = getCurried(descHandler);\n handler(simulatedEvent);\n });\n return simulatedEvent.isStopped();\n };\n const triggerUntilStopped = (lookup, eventType, rawEvent, logger) => triggerOnUntilStopped(lookup, eventType, rawEvent, rawEvent.target, logger);\n const triggerOnUntilStopped = (lookup, eventType, rawEvent, rawTarget, logger) => {\n const source = derive(rawEvent, rawTarget);\n return doTriggerOnUntilStopped(lookup, eventType, rawEvent, rawTarget, source, logger);\n };\n\n const eventHandler = (element, descHandler) => ({\n element,\n descHandler\n });\n const broadcastHandler = (id, handler) => ({\n id,\n descHandler: handler\n });\n const EventRegistry = () => {\n const registry = {};\n const registerId = (extraArgs, id, events) => {\n each(events, (v, k) => {\n const handlers = registry[k] !== undefined ? registry[k] : {};\n handlers[id] = curryArgs(v, extraArgs);\n registry[k] = handlers;\n });\n };\n const findHandler = (handlers, elem) => read(elem).bind(id => get$h(handlers, id)).map(descHandler => eventHandler(elem, descHandler));\n const filterByType = type => get$h(registry, type).map(handlers => mapToArray(handlers, (f, id) => broadcastHandler(id, f))).getOr([]);\n const find = (isAboveRoot, type, target) => get$h(registry, type).bind(handlers => closest$4(target, elem => findHandler(handlers, elem), isAboveRoot));\n const unregisterId = id => {\n each(registry, (handlersById, _eventName) => {\n if (has$2(handlersById, id)) {\n delete handlersById[id];\n }\n });\n };\n return {\n registerId,\n unregisterId,\n filterByType,\n find\n };\n };\n\n const Registry = () => {\n const events = EventRegistry();\n const components = {};\n const readOrTag = component => {\n const elem = component.element;\n return read(elem).getOrThunk(() => write('uid-', component.element));\n };\n const failOnDuplicate = (component, tagId) => {\n const conflict = components[tagId];\n if (conflict === component) {\n unregister(component);\n } else {\n throw new Error('The tagId \"' + tagId + '\" is already used by: ' + element(conflict.element) + '\\nCannot use it for: ' + element(component.element) + '\\n' + 'The conflicting element is' + (inBody(conflict.element) ? ' ' : ' not ') + 'already in the DOM');\n }\n };\n const register = component => {\n const tagId = readOrTag(component);\n if (hasNonNullableKey(components, tagId)) {\n failOnDuplicate(component, tagId);\n }\n const extraArgs = [component];\n events.registerId(extraArgs, tagId, component.events);\n components[tagId] = component;\n };\n const unregister = component => {\n read(component.element).each(tagId => {\n delete components[tagId];\n events.unregisterId(tagId);\n });\n };\n const filter = type => events.filterByType(type);\n const find = (isAboveRoot, type, target) => events.find(isAboveRoot, type, target);\n const getById = id => get$h(components, id);\n return {\n find,\n filter,\n register,\n unregister,\n getById\n };\n };\n\n const factory$j = detail => {\n const {attributes, ...domWithoutAttributes} = detail.dom;\n return {\n uid: detail.uid,\n dom: {\n tag: 'div',\n attributes: {\n role: 'presentation',\n ...attributes\n },\n ...domWithoutAttributes\n },\n components: detail.components,\n behaviours: get$4(detail.containerBehaviours),\n events: detail.events,\n domModification: detail.domModification,\n eventOrder: detail.eventOrder\n };\n };\n const Container = single({\n name: 'Container',\n factory: factory$j,\n configFields: [\n defaulted('components', []),\n field('containerBehaviours', []),\n defaulted('events', {}),\n defaulted('domModification', {}),\n defaulted('eventOrder', {})\n ]\n });\n\n const takeover = root => {\n const isAboveRoot = el => parent(root.element).fold(always, parent => eq(el, parent));\n const registry = Registry();\n const lookup = (eventName, target) => registry.find(isAboveRoot, eventName, target);\n const domEvents = setup$d(root.element, {\n triggerEvent: (eventName, event) => {\n return monitorEvent(eventName, event.target, logger => triggerUntilStopped(lookup, eventName, event, logger));\n }\n });\n const systemApi = {\n debugInfo: constant$1('real'),\n triggerEvent: (eventName, target, data) => {\n monitorEvent(eventName, target, logger => triggerOnUntilStopped(lookup, eventName, data, target, logger));\n },\n triggerFocus: (target, originator) => {\n read(target).fold(() => {\n focus$3(target);\n }, _alloyId => {\n monitorEvent(focus$4(), target, logger => {\n triggerHandler(lookup, focus$4(), {\n originator,\n kill: noop,\n prevent: noop,\n target\n }, target, logger);\n return false;\n });\n });\n },\n triggerEscape: (comp, simulatedEvent) => {\n systemApi.triggerEvent('keydown', comp.element, simulatedEvent.event);\n },\n getByUid: uid => {\n return getByUid(uid);\n },\n getByDom: elem => {\n return getByDom(elem);\n },\n build: build$1,\n buildOrPatch: buildOrPatch,\n addToGui: c => {\n add(c);\n },\n removeFromGui: c => {\n remove(c);\n },\n addToWorld: c => {\n addToWorld(c);\n },\n removeFromWorld: c => {\n removeFromWorld(c);\n },\n broadcast: message => {\n broadcast$1(message);\n },\n broadcastOn: (channels, message) => {\n broadcastOn(channels, message);\n },\n broadcastEvent: (eventName, event) => {\n broadcastEvent(eventName, event);\n },\n isConnected: always\n };\n const addToWorld = component => {\n component.connect(systemApi);\n if (!isText(component.element)) {\n registry.register(component);\n each$1(component.components(), addToWorld);\n systemApi.triggerEvent(systemInit(), component.element, { target: component.element });\n }\n };\n const removeFromWorld = component => {\n if (!isText(component.element)) {\n each$1(component.components(), removeFromWorld);\n registry.unregister(component);\n }\n component.disconnect();\n };\n const add = component => {\n attach(root, component);\n };\n const remove = component => {\n detach(component);\n };\n const destroy = () => {\n domEvents.unbind();\n remove$6(root.element);\n };\n const broadcastData = data => {\n const receivers = registry.filter(receive());\n each$1(receivers, receiver => {\n const descHandler = receiver.descHandler;\n const handler = getCurried(descHandler);\n handler(data);\n });\n };\n const broadcast$1 = message => {\n broadcastData({\n universal: true,\n data: message\n });\n };\n const broadcastOn = (channels, message) => {\n broadcastData({\n universal: false,\n channels,\n data: message\n });\n };\n const broadcastEvent = (eventName, event) => {\n const listeners = registry.filter(eventName);\n return broadcast(listeners, event);\n };\n const getByUid = uid => registry.getById(uid).fold(() => Result.error(new Error('Could not find component with uid: \"' + uid + '\" in system.')), Result.value);\n const getByDom = elem => {\n const uid = read(elem).getOr('not found');\n return getByUid(uid);\n };\n addToWorld(root);\n return {\n root,\n element: root.element,\n destroy,\n add,\n remove,\n getByUid,\n getByDom,\n addToWorld,\n removeFromWorld,\n broadcast: broadcast$1,\n broadcastOn,\n broadcastEvent\n };\n };\n\n const renderBar = (spec, backstage) => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-bar',\n 'tox-form__controls-h-stack'\n ]\n },\n components: map$2(spec.items, backstage.interpreter)\n });\n\n const schema$j = constant$1([\n defaulted('prefix', 'form-field'),\n field('fieldBehaviours', [\n Composing,\n Representing\n ])\n ]);\n const parts$d = constant$1([\n optional({\n schema: [required$1('dom')],\n name: 'label'\n }),\n optional({\n factory: {\n sketch: spec => {\n return {\n uid: spec.uid,\n dom: {\n tag: 'span',\n styles: { display: 'none' },\n attributes: { 'aria-hidden': 'true' },\n innerHtml: spec.text\n }\n };\n }\n },\n schema: [required$1('text')],\n name: 'aria-descriptor'\n }),\n required({\n factory: {\n sketch: spec => {\n const excludeFactory = exclude(spec, ['factory']);\n return spec.factory.sketch(excludeFactory);\n }\n },\n schema: [required$1('factory')],\n name: 'field'\n })\n ]);\n\n const factory$i = (detail, components, _spec, _externals) => {\n const behaviours = augment(detail.fieldBehaviours, [\n Composing.config({\n find: container => {\n return getPart(container, detail, 'field');\n }\n }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: field => {\n return Composing.getCurrent(field).bind(Representing.getValue);\n },\n setValue: (field, value) => {\n Composing.getCurrent(field).each(current => {\n Representing.setValue(current, value);\n });\n }\n }\n })\n ]);\n const events = derive$2([runOnAttached((component, _simulatedEvent) => {\n const ps = getParts(component, detail, [\n 'label',\n 'field',\n 'aria-descriptor'\n ]);\n ps.field().each(field => {\n const id = generate$6(detail.prefix);\n ps.label().each(label => {\n set$9(label.element, 'for', id);\n set$9(field.element, 'id', id);\n });\n ps['aria-descriptor']().each(descriptor => {\n const descriptorId = generate$6(detail.prefix);\n set$9(descriptor.element, 'id', descriptorId);\n set$9(field.element, 'aria-describedby', descriptorId);\n });\n });\n })]);\n const apis = {\n getField: container => getPart(container, detail, 'field'),\n getLabel: container => getPart(container, detail, 'label')\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours,\n events,\n apis\n };\n };\n const FormField = composite({\n name: 'FormField',\n configFields: schema$j(),\n partFields: parts$d(),\n factory: factory$i,\n apis: {\n getField: (apis, comp) => apis.getField(comp),\n getLabel: (apis, comp) => apis.getLabel(comp)\n }\n });\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.html.Entities');\n\n const renderFormFieldWith = (pLabel, pField, extraClasses, extraBehaviours) => {\n const spec = renderFormFieldSpecWith(pLabel, pField, extraClasses, extraBehaviours);\n return FormField.sketch(spec);\n };\n const renderFormField = (pLabel, pField) => renderFormFieldWith(pLabel, pField, [], []);\n const renderFormFieldSpecWith = (pLabel, pField, extraClasses, extraBehaviours) => ({\n dom: renderFormFieldDomWith(extraClasses),\n components: pLabel.toArray().concat([pField]),\n fieldBehaviours: derive$1(extraBehaviours)\n });\n const renderFormFieldDom = () => renderFormFieldDomWith([]);\n const renderFormFieldDomWith = extraClasses => ({\n tag: 'div',\n classes: ['tox-form__group'].concat(extraClasses)\n });\n const renderLabel$3 = (label, providersBackstage) => FormField.parts.label({\n dom: {\n tag: 'label',\n classes: ['tox-label']\n },\n components: [text$2(providersBackstage.translate(label))]\n });\n\n const formChangeEvent = generate$6('form-component-change');\n const formInputEvent = generate$6('form-component-input');\n const formCloseEvent = generate$6('form-close');\n const formCancelEvent = generate$6('form-cancel');\n const formActionEvent = generate$6('form-action');\n const formSubmitEvent = generate$6('form-submit');\n const formBlockEvent = generate$6('form-block');\n const formUnblockEvent = generate$6('form-unblock');\n const formTabChangeEvent = generate$6('form-tabchange');\n const formResizeEvent = generate$6('form-resize');\n\n const renderCollection = (spec, providersBackstage, initialData) => {\n const pLabel = spec.label.map(label => renderLabel$3(label, providersBackstage));\n const icons = providersBackstage.icons();\n const getIcon = icon => {\n var _a;\n return (_a = icons[icon]) !== null && _a !== void 0 ? _a : icon;\n };\n const runOnItem = f => (comp, se) => {\n closest$1(se.event.target, '[data-collection-item-value]').each(target => {\n f(comp, se, target, get$g(target, 'data-collection-item-value'));\n });\n };\n const setContents = (comp, items) => {\n const disabled = providersBackstage.checkUiComponentContext('mode:design').shouldDisable || providersBackstage.isDisabled();\n const disabledClass = disabled ? ' tox-collection__item--state-disabled' : '';\n const htmlLines = map$2(items, item => {\n const itemText = global$5.translate(item.text);\n const textContent = spec.columns === 1 ? `
    ${ itemText }
    ` : '';\n const iconContent = `
    ${ getIcon(item.icon) }
    `;\n const mapItemName = {\n '_': ' ',\n ' - ': ' ',\n '-': ' '\n };\n const ariaLabel = itemText.replace(/\\_| \\- |\\-/g, match => mapItemName[match]);\n return `
    ${ iconContent }${ textContent }
    `;\n });\n const chunks = spec.columns !== 'auto' && spec.columns > 1 ? chunk$1(htmlLines, spec.columns) : [htmlLines];\n const html = map$2(chunks, ch => `
    ${ ch.join('') }
    `);\n set$6(comp.element, html.join(''));\n };\n const onClick = runOnItem((comp, se, tgt, itemValue) => {\n se.stop();\n if (!(providersBackstage.checkUiComponentContext('mode:design').shouldDisable || providersBackstage.isDisabled())) {\n emitWith(comp, formActionEvent, {\n name: spec.name,\n value: itemValue\n });\n }\n });\n const collectionEvents = [\n run$1(mouseover(), runOnItem((comp, se, tgt) => {\n focus$3(tgt, true);\n })),\n run$1(click(), onClick),\n run$1(tap(), onClick),\n run$1(focusin(), runOnItem((comp, se, tgt) => {\n descendant(comp.element, '.' + activeClass).each(currentActive => {\n remove$3(currentActive, activeClass);\n });\n add$2(tgt, activeClass);\n })),\n run$1(focusout(), runOnItem(comp => {\n descendant(comp.element, '.' + activeClass).each(currentActive => {\n remove$3(currentActive, activeClass);\n blur$1(currentActive);\n });\n })),\n runOnExecute$1(runOnItem((comp, se, tgt, itemValue) => {\n emitWith(comp, formActionEvent, {\n name: spec.name,\n value: itemValue\n });\n }))\n ];\n const iterCollectionItems = (comp, applyAttributes) => map$2(descendants(comp.element, '.tox-collection__item'), applyAttributes);\n const pField = FormField.parts.field({\n dom: {\n tag: 'div',\n classes: ['tox-collection'].concat(spec.columns !== 1 ? ['tox-collection--grid'] : ['tox-collection--list'])\n },\n components: [],\n factory: { sketch: identity },\n behaviours: derive$1([\n Disabling.config({\n disabled: () => providersBackstage.checkUiComponentContext(spec.context).shouldDisable,\n onDisabled: comp => {\n iterCollectionItems(comp, childElm => {\n add$2(childElm, 'tox-collection__item--state-disabled');\n set$9(childElm, 'aria-disabled', true);\n });\n },\n onEnabled: comp => {\n iterCollectionItems(comp, childElm => {\n remove$3(childElm, 'tox-collection__item--state-disabled');\n remove$8(childElm, 'aria-disabled');\n });\n }\n }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)),\n Replacing.config({}),\n Tooltipping.config({\n ...providersBackstage.tooltips.getConfig({\n tooltipText: '',\n onShow: comp => {\n descendant(comp.element, '.' + activeClass + '[data-mce-tooltip]').each(current => {\n getOpt(current, 'data-mce-tooltip').each(text => {\n Tooltipping.setComponents(comp, providersBackstage.tooltips.getComponents({ tooltipText: text }));\n });\n });\n }\n }),\n mode: 'children-keyboard-focus',\n anchor: comp => ({\n type: 'node',\n node: descendant(comp.element, '.' + activeClass).orThunk(() => first$1('.tox-collection__item')),\n root: comp.element,\n layouts: {\n onLtr: constant$1([\n south$2,\n north$2,\n southeast$2,\n northeast$2,\n southwest$2,\n northwest$2\n ]),\n onRtl: constant$1([\n south$2,\n north$2,\n southeast$2,\n northeast$2,\n southwest$2,\n northwest$2\n ])\n },\n bubble: nu$5(0, -2, {})\n })\n }),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: initialData.getOr([])\n },\n onSetValue: (comp, items) => {\n setContents(comp, items);\n if (spec.columns === 'auto') {\n detectSize(comp, 5, 'tox-collection__item').each(({numRows, numColumns}) => {\n Keying.setGridSize(comp, numRows, numColumns);\n });\n }\n emit(comp, formResizeEvent);\n }\n }),\n Tabstopping.config({}),\n Keying.config(deriveCollectionMovement(spec.columns, 'normal')),\n config('collection-events', collectionEvents)\n ]),\n eventOrder: {\n [execute$5()]: [\n 'disabling',\n 'alloy.base.behaviour',\n 'collection-events'\n ],\n [focusin()]: [\n 'collection-events',\n 'tooltipping'\n ]\n }\n });\n const extraClasses = ['tox-form__group--collection'];\n return renderFormFieldWith(pLabel, pField, extraClasses, []);\n };\n\n const ariaElements = [\n 'input',\n 'textarea'\n ];\n const isAriaElement = elem => {\n const name = name$3(elem);\n return contains$2(ariaElements, name);\n };\n const markValid = (component, invalidConfig) => {\n const elem = invalidConfig.getRoot(component).getOr(component.element);\n remove$3(elem, invalidConfig.invalidClass);\n invalidConfig.notify.each(notifyInfo => {\n if (isAriaElement(component.element)) {\n set$9(component.element, 'aria-invalid', false);\n }\n notifyInfo.getContainer(component).each(container => {\n set$6(container, notifyInfo.validHtml);\n });\n notifyInfo.onValid(component);\n });\n };\n const markInvalid = (component, invalidConfig, invalidState, text) => {\n const elem = invalidConfig.getRoot(component).getOr(component.element);\n add$2(elem, invalidConfig.invalidClass);\n invalidConfig.notify.each(notifyInfo => {\n if (isAriaElement(component.element)) {\n set$9(component.element, 'aria-invalid', true);\n }\n notifyInfo.getContainer(component).each(container => {\n set$6(container, text);\n });\n notifyInfo.onInvalid(component, text);\n });\n };\n const query = (component, invalidConfig, _invalidState) => invalidConfig.validator.fold(() => Future.pure(Result.value(true)), validatorInfo => validatorInfo.validate(component));\n const run = (component, invalidConfig, invalidState) => {\n invalidConfig.notify.each(notifyInfo => {\n notifyInfo.onValidate(component);\n });\n return query(component, invalidConfig).map(valid => {\n if (component.getSystem().isConnected()) {\n return valid.fold(err => {\n markInvalid(component, invalidConfig, invalidState, err);\n return Result.error(err);\n }, v => {\n markValid(component, invalidConfig);\n return Result.value(v);\n });\n } else {\n return Result.error('No longer in system');\n }\n });\n };\n const isInvalid = (component, invalidConfig) => {\n const elem = invalidConfig.getRoot(component).getOr(component.element);\n return has(elem, invalidConfig.invalidClass);\n };\n\n var InvalidateApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n markValid: markValid,\n markInvalid: markInvalid,\n query: query,\n run: run,\n isInvalid: isInvalid\n });\n\n const events$7 = (invalidConfig, invalidState) => invalidConfig.validator.map(validatorInfo => derive$2([run$1(validatorInfo.onEvent, component => {\n run(component, invalidConfig, invalidState).get(identity);\n })].concat(validatorInfo.validateOnLoad ? [runOnAttached(component => {\n run(component, invalidConfig, invalidState).get(noop);\n })] : []))).getOr({});\n\n var ActiveInvalidate = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$7\n });\n\n var InvalidateSchema = [\n required$1('invalidClass'),\n defaulted('getRoot', Optional.none),\n optionObjOf('notify', [\n defaulted('aria', 'alert'),\n defaulted('getContainer', Optional.none),\n defaulted('validHtml', ''),\n onHandler('onValid'),\n onHandler('onInvalid'),\n onHandler('onValidate')\n ]),\n optionObjOf('validator', [\n required$1('validate'),\n defaulted('onEvent', 'input'),\n defaulted('validateOnLoad', true)\n ])\n ];\n\n const Invalidating = create$4({\n fields: InvalidateSchema,\n name: 'invalidating',\n active: ActiveInvalidate,\n apis: InvalidateApis,\n extra: {\n validation: validator => {\n return component => {\n const v = Representing.getValue(component);\n return Future.pure(validator(v));\n };\n }\n }\n });\n\n const exhibit$1 = () => nu$8({\n styles: {\n '-webkit-user-select': 'none',\n 'user-select': 'none',\n '-ms-user-select': 'none',\n '-moz-user-select': '-moz-none'\n },\n attributes: { unselectable: 'on' }\n });\n const events$6 = () => derive$2([abort(selectstart(), always)]);\n\n var ActiveUnselecting = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$6,\n exhibit: exhibit$1\n });\n\n const Unselecting = create$4({\n fields: [],\n name: 'unselecting',\n active: ActiveUnselecting\n });\n\n const renderPanelButton = (spec, sharedBackstage) => Dropdown.sketch({\n dom: spec.dom,\n components: spec.components,\n toggleClass: 'mce-active',\n dropdownBehaviours: derive$1([\n DisablingConfigs.button(() => sharedBackstage.providers.isDisabled() || sharedBackstage.providers.checkUiComponentContext(spec.context).shouldDisable),\n toggleOnReceive(() => sharedBackstage.providers.checkUiComponentContext(spec.context)),\n Unselecting.config({}),\n Tabstopping.config({})\n ]),\n layouts: spec.layouts,\n sandboxClasses: ['tox-dialog__popups'],\n lazySink: sharedBackstage.getSink,\n fetch: comp => Future.nu(callback => spec.fetch(callback)).map(items => Optional.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$6('menu-value'), items, value => {\n spec.onItemAction(comp, value);\n }, spec.columns, spec.presets, ItemResponse$1.CLOSE_ON_EXECUTE, never, sharedBackstage.providers), { movement: deriveMenuMovement(spec.columns, spec.presets) })))),\n parts: { menu: part(false, 1, spec.presets) }\n });\n\n const colorInputChangeEvent = generate$6('color-input-change');\n const colorSwatchChangeEvent = generate$6('color-swatch-change');\n const colorPickerCancelEvent = generate$6('color-picker-cancel');\n const renderColorInput = (spec, sharedBackstage, colorInputBackstage, initialData) => {\n const pField = FormField.parts.field({\n factory: Input,\n inputClasses: ['tox-textfield'],\n data: initialData,\n onSetValue: c => Invalidating.run(c).get(noop),\n inputBehaviours: derive$1([\n Disabling.config({ disabled: () => sharedBackstage.providers.isDisabled() || sharedBackstage.providers.checkUiComponentContext(spec.context).shouldDisable }),\n toggleOnReceive(() => sharedBackstage.providers.checkUiComponentContext(spec.context)),\n Tabstopping.config({}),\n Invalidating.config({\n invalidClass: 'tox-textbox-field-invalid',\n getRoot: comp => parentElement(comp.element),\n notify: {\n onValid: comp => {\n const val = Representing.getValue(comp);\n emitWith(comp, colorInputChangeEvent, { color: val });\n }\n },\n validator: {\n validateOnLoad: false,\n validate: input => {\n const inputValue = Representing.getValue(input);\n if (inputValue.length === 0) {\n return Future.pure(Result.value(true));\n } else {\n const span = SugarElement.fromTag('span');\n set$8(span, 'background-color', inputValue);\n const res = getRaw(span, 'background-color').fold(() => Result.error('blah'), _ => Result.value(inputValue));\n return Future.pure(res);\n }\n }\n }\n })\n ]),\n selectOnFocus: false\n });\n const pLabel = spec.label.map(label => renderLabel$3(label, sharedBackstage.providers));\n const emitSwatchChange = (colorBit, value) => {\n emitWith(colorBit, colorSwatchChangeEvent, { value });\n };\n const onItemAction = (comp, value) => {\n memColorButton.getOpt(comp).each(colorBit => {\n if (value === 'custom') {\n colorInputBackstage.colorPicker(valueOpt => {\n valueOpt.fold(() => emit(colorBit, colorPickerCancelEvent), value => {\n emitSwatchChange(colorBit, value);\n addColor(spec.storageKey, value);\n });\n }, '#ffffff');\n } else if (value === 'remove') {\n emitSwatchChange(colorBit, '');\n } else {\n emitSwatchChange(colorBit, value);\n }\n });\n };\n const memColorButton = record(renderPanelButton({\n dom: {\n tag: 'span',\n attributes: { 'aria-label': sharedBackstage.providers.translate('Color swatch') }\n },\n layouts: {\n onRtl: () => [\n southwest$2,\n southeast$2,\n south$2\n ],\n onLtr: () => [\n southeast$2,\n southwest$2,\n south$2\n ]\n },\n components: [],\n fetch: getFetch$1(colorInputBackstage.getColors(spec.storageKey), spec.storageKey, colorInputBackstage.hasCustomColors()),\n columns: colorInputBackstage.getColorCols(spec.storageKey),\n presets: 'color',\n onItemAction,\n context: spec.context\n }, sharedBackstage));\n return FormField.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: pLabel.toArray().concat([{\n dom: {\n tag: 'div',\n classes: ['tox-color-input']\n },\n components: [\n pField,\n memColorButton.asSpec()\n ]\n }]),\n fieldBehaviours: derive$1([config('form-field-events', [\n run$1(colorInputChangeEvent, (comp, se) => {\n memColorButton.getOpt(comp).each(colorButton => {\n set$8(colorButton.element, 'background-color', se.event.color);\n });\n emitWith(comp, formChangeEvent, { name: spec.name });\n }),\n run$1(colorSwatchChangeEvent, (comp, se) => {\n FormField.getField(comp).each(field => {\n Representing.setValue(field, se.event.value);\n Composing.getCurrent(comp).each(Focusing.focus);\n });\n }),\n run$1(colorPickerCancelEvent, (comp, _se) => {\n FormField.getField(comp).each(_field => {\n Composing.getCurrent(comp).each(Focusing.focus);\n });\n })\n ])])\n });\n };\n\n const labelPart = optional({\n schema: [required$1('dom')],\n name: 'label'\n });\n const edgePart = name => optional({\n name: '' + name + '-edge',\n overrides: detail => {\n const action = detail.model.manager.edgeActions[name];\n return action.fold(() => ({}), a => ({\n events: derive$2([\n runActionExtra(touchstart(), (comp, se, d) => a(comp, d), [detail]),\n runActionExtra(mousedown(), (comp, se, d) => a(comp, d), [detail]),\n runActionExtra(mousemove(), (comp, se, det) => {\n if (det.mouseIsDown.get()) {\n a(comp, det);\n }\n }, [detail])\n ])\n }));\n }\n });\n const tlEdgePart = edgePart('top-left');\n const tedgePart = edgePart('top');\n const trEdgePart = edgePart('top-right');\n const redgePart = edgePart('right');\n const brEdgePart = edgePart('bottom-right');\n const bedgePart = edgePart('bottom');\n const blEdgePart = edgePart('bottom-left');\n const ledgePart = edgePart('left');\n const thumbPart = required({\n name: 'thumb',\n defaults: constant$1({ dom: { styles: { position: 'absolute' } } }),\n overrides: detail => {\n return {\n events: derive$2([\n redirectToPart(touchstart(), detail, 'spectrum'),\n redirectToPart(touchmove(), detail, 'spectrum'),\n redirectToPart(touchend(), detail, 'spectrum'),\n redirectToPart(mousedown(), detail, 'spectrum'),\n redirectToPart(mousemove(), detail, 'spectrum'),\n redirectToPart(mouseup(), detail, 'spectrum')\n ])\n };\n }\n });\n const isShift = event => isShift$1(event.event);\n const spectrumPart = required({\n schema: [customField('mouseIsDown', () => Cell(false))],\n name: 'spectrum',\n overrides: detail => {\n const modelDetail = detail.model;\n const model = modelDetail.manager;\n const setValueFrom = (component, simulatedEvent) => model.getValueFromEvent(simulatedEvent).map(value => model.setValueFrom(component, detail, value));\n return {\n behaviours: derive$1([\n Keying.config({\n mode: 'special',\n onLeft: (spectrum, event) => model.onLeft(spectrum, detail, isShift(event)),\n onRight: (spectrum, event) => model.onRight(spectrum, detail, isShift(event)),\n onUp: (spectrum, event) => model.onUp(spectrum, detail, isShift(event)),\n onDown: (spectrum, event) => model.onDown(spectrum, detail, isShift(event))\n }),\n Tabstopping.config({}),\n Focusing.config({})\n ]),\n events: derive$2([\n run$1(touchstart(), setValueFrom),\n run$1(touchmove(), setValueFrom),\n run$1(mousedown(), setValueFrom),\n run$1(mousemove(), (spectrum, se) => {\n if (detail.mouseIsDown.get()) {\n setValueFrom(spectrum, se);\n }\n })\n ])\n };\n }\n });\n var SliderParts = [\n labelPart,\n ledgePart,\n redgePart,\n tedgePart,\n bedgePart,\n tlEdgePart,\n trEdgePart,\n blEdgePart,\n brEdgePart,\n thumbPart,\n spectrumPart\n ];\n\n const _sliderChangeEvent = 'slider.change.value';\n const sliderChangeEvent = constant$1(_sliderChangeEvent);\n const isTouchEvent$2 = evt => evt.type.indexOf('touch') !== -1;\n const getEventSource = simulatedEvent => {\n const evt = simulatedEvent.event.raw;\n if (isTouchEvent$2(evt)) {\n const touchEvent = evt;\n return touchEvent.touches !== undefined && touchEvent.touches.length === 1 ? Optional.some(touchEvent.touches[0]).map(t => SugarPosition(t.clientX, t.clientY)) : Optional.none();\n } else {\n const mouseEvent = evt;\n return mouseEvent.clientX !== undefined ? Optional.some(mouseEvent).map(me => SugarPosition(me.clientX, me.clientY)) : Optional.none();\n }\n };\n\n const t = 'top', r = 'right', b = 'bottom', l = 'left';\n const minX = detail => detail.model.minX;\n const minY = detail => detail.model.minY;\n const min1X = detail => detail.model.minX - 1;\n const min1Y = detail => detail.model.minY - 1;\n const maxX = detail => detail.model.maxX;\n const maxY = detail => detail.model.maxY;\n const max1X = detail => detail.model.maxX + 1;\n const max1Y = detail => detail.model.maxY + 1;\n const range = (detail, max, min) => max(detail) - min(detail);\n const xRange = detail => range(detail, maxX, minX);\n const yRange = detail => range(detail, maxY, minY);\n const halfX = detail => xRange(detail) / 2;\n const halfY = detail => yRange(detail) / 2;\n const step = (detail, useMultiplier) => useMultiplier ? detail.stepSize * detail.speedMultiplier : detail.stepSize;\n const snap = detail => detail.snapToGrid;\n const snapStart = detail => detail.snapStart;\n const rounded = detail => detail.rounded;\n const hasEdge = (detail, edgeName) => detail[edgeName + '-edge'] !== undefined;\n const hasLEdge = detail => hasEdge(detail, l);\n const hasREdge = detail => hasEdge(detail, r);\n const hasTEdge = detail => hasEdge(detail, t);\n const hasBEdge = detail => hasEdge(detail, b);\n const currentValue = detail => detail.model.value.get();\n\n const xyValue = (x, y) => ({\n x,\n y\n });\n const fireSliderChange$3 = (component, value) => {\n emitWith(component, sliderChangeEvent(), { value });\n };\n const setToTLEdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(min1X(detail), min1Y(detail)));\n };\n const setToTEdge = (edge, detail) => {\n fireSliderChange$3(edge, min1Y(detail));\n };\n const setToTEdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(halfX(detail), min1Y(detail)));\n };\n const setToTREdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(max1X(detail), min1Y(detail)));\n };\n const setToREdge = (edge, detail) => {\n fireSliderChange$3(edge, max1X(detail));\n };\n const setToREdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(max1X(detail), halfY(detail)));\n };\n const setToBREdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(max1X(detail), max1Y(detail)));\n };\n const setToBEdge = (edge, detail) => {\n fireSliderChange$3(edge, max1Y(detail));\n };\n const setToBEdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(halfX(detail), max1Y(detail)));\n };\n const setToBLEdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(min1X(detail), max1Y(detail)));\n };\n const setToLEdge = (edge, detail) => {\n fireSliderChange$3(edge, min1X(detail));\n };\n const setToLEdgeXY = (edge, detail) => {\n fireSliderChange$3(edge, xyValue(min1X(detail), halfY(detail)));\n };\n\n const reduceBy = (value, min, max, step) => {\n if (value < min) {\n return value;\n } else if (value > max) {\n return max;\n } else if (value === min) {\n return min - 1;\n } else {\n return Math.max(min, value - step);\n }\n };\n const increaseBy = (value, min, max, step) => {\n if (value > max) {\n return value;\n } else if (value < min) {\n return min;\n } else if (value === max) {\n return max + 1;\n } else {\n return Math.min(max, value + step);\n }\n };\n const capValue = (value, min, max) => Math.max(min, Math.min(max, value));\n const snapValueOf = (value, min, max, step, snapStart) => snapStart.fold(() => {\n const initValue = value - min;\n const extraValue = Math.round(initValue / step) * step;\n return capValue(min + extraValue, min - 1, max + 1);\n }, start => {\n const remainder = (value - start) % step;\n const adjustment = Math.round(remainder / step);\n const rawSteps = Math.floor((value - start) / step);\n const maxSteps = Math.floor((max - start) / step);\n const numSteps = Math.min(maxSteps, rawSteps + adjustment);\n const r = start + numSteps * step;\n return Math.max(start, r);\n });\n const findOffsetOf = (value, min, max) => Math.min(max, Math.max(value, min)) - min;\n const findValueOf = args => {\n const {min, max, range, value, step, snap, snapStart, rounded, hasMinEdge, hasMaxEdge, minBound, maxBound, screenRange} = args;\n const capMin = hasMinEdge ? min - 1 : min;\n const capMax = hasMaxEdge ? max + 1 : max;\n if (value < minBound) {\n return capMin;\n } else if (value > maxBound) {\n return capMax;\n } else {\n const offset = findOffsetOf(value, minBound, maxBound);\n const newValue = capValue(offset / screenRange * range + min, capMin, capMax);\n if (snap && newValue >= min && newValue <= max) {\n return snapValueOf(newValue, min, max, step, snapStart);\n } else if (rounded) {\n return Math.round(newValue);\n } else {\n return newValue;\n }\n }\n };\n const findOffsetOfValue$2 = args => {\n const {min, max, range, value, hasMinEdge, hasMaxEdge, maxBound, maxOffset, centerMinEdge, centerMaxEdge} = args;\n if (value < min) {\n return hasMinEdge ? 0 : centerMinEdge;\n } else if (value > max) {\n return hasMaxEdge ? maxBound : centerMaxEdge;\n } else {\n return (value - min) / range * maxOffset;\n }\n };\n\n const top = 'top', right = 'right', bottom = 'bottom', left = 'left', width = 'width', height = 'height';\n const getBounds = component => component.element.dom.getBoundingClientRect();\n const getBoundsProperty = (bounds, property) => bounds[property];\n const getMinXBounds = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, left);\n };\n const getMaxXBounds = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, right);\n };\n const getMinYBounds = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, top);\n };\n const getMaxYBounds = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, bottom);\n };\n const getXScreenRange = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, width);\n };\n const getYScreenRange = component => {\n const bounds = getBounds(component);\n return getBoundsProperty(bounds, height);\n };\n const getCenterOffsetOf = (componentMinEdge, componentMaxEdge, spectrumMinEdge) => (componentMinEdge + componentMaxEdge) / 2 - spectrumMinEdge;\n const getXCenterOffSetOf = (component, spectrum) => {\n const componentBounds = getBounds(component);\n const spectrumBounds = getBounds(spectrum);\n const componentMinEdge = getBoundsProperty(componentBounds, left);\n const componentMaxEdge = getBoundsProperty(componentBounds, right);\n const spectrumMinEdge = getBoundsProperty(spectrumBounds, left);\n return getCenterOffsetOf(componentMinEdge, componentMaxEdge, spectrumMinEdge);\n };\n const getYCenterOffSetOf = (component, spectrum) => {\n const componentBounds = getBounds(component);\n const spectrumBounds = getBounds(spectrum);\n const componentMinEdge = getBoundsProperty(componentBounds, top);\n const componentMaxEdge = getBoundsProperty(componentBounds, bottom);\n const spectrumMinEdge = getBoundsProperty(spectrumBounds, top);\n return getCenterOffsetOf(componentMinEdge, componentMaxEdge, spectrumMinEdge);\n };\n\n const fireSliderChange$2 = (spectrum, value) => {\n emitWith(spectrum, sliderChangeEvent(), { value });\n };\n const findValueOfOffset$1 = (spectrum, detail, left) => {\n const args = {\n min: minX(detail),\n max: maxX(detail),\n range: xRange(detail),\n value: left,\n step: step(detail),\n snap: snap(detail),\n snapStart: snapStart(detail),\n rounded: rounded(detail),\n hasMinEdge: hasLEdge(detail),\n hasMaxEdge: hasREdge(detail),\n minBound: getMinXBounds(spectrum),\n maxBound: getMaxXBounds(spectrum),\n screenRange: getXScreenRange(spectrum)\n };\n return findValueOf(args);\n };\n const setValueFrom$2 = (spectrum, detail, value) => {\n const xValue = findValueOfOffset$1(spectrum, detail, value);\n const sliderVal = xValue;\n fireSliderChange$2(spectrum, sliderVal);\n return xValue;\n };\n const setToMin$2 = (spectrum, detail) => {\n const min = minX(detail);\n fireSliderChange$2(spectrum, min);\n };\n const setToMax$2 = (spectrum, detail) => {\n const max = maxX(detail);\n fireSliderChange$2(spectrum, max);\n };\n const moveBy$2 = (direction, spectrum, detail, useMultiplier) => {\n const f = direction > 0 ? increaseBy : reduceBy;\n const xValue = f(currentValue(detail), minX(detail), maxX(detail), step(detail, useMultiplier));\n fireSliderChange$2(spectrum, xValue);\n return Optional.some(xValue);\n };\n const handleMovement$2 = direction => (spectrum, detail, useMultiplier) => moveBy$2(direction, spectrum, detail, useMultiplier).map(always);\n const getValueFromEvent$2 = simulatedEvent => {\n const pos = getEventSource(simulatedEvent);\n return pos.map(p => p.left);\n };\n const findOffsetOfValue$1 = (spectrum, detail, value, minEdge, maxEdge) => {\n const minOffset = 0;\n const maxOffset = getXScreenRange(spectrum);\n const centerMinEdge = minEdge.bind(edge => Optional.some(getXCenterOffSetOf(edge, spectrum))).getOr(minOffset);\n const centerMaxEdge = maxEdge.bind(edge => Optional.some(getXCenterOffSetOf(edge, spectrum))).getOr(maxOffset);\n const args = {\n min: minX(detail),\n max: maxX(detail),\n range: xRange(detail),\n value,\n hasMinEdge: hasLEdge(detail),\n hasMaxEdge: hasREdge(detail),\n minBound: getMinXBounds(spectrum),\n minOffset,\n maxBound: getMaxXBounds(spectrum),\n maxOffset,\n centerMinEdge,\n centerMaxEdge\n };\n return findOffsetOfValue$2(args);\n };\n const findPositionOfValue$1 = (slider, spectrum, value, minEdge, maxEdge, detail) => {\n const offset = findOffsetOfValue$1(spectrum, detail, value, minEdge, maxEdge);\n return getMinXBounds(spectrum) - getMinXBounds(slider) + offset;\n };\n const setPositionFromValue$2 = (slider, thumb, detail, edges) => {\n const value = currentValue(detail);\n const pos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value, edges.getLeftEdge(slider), edges.getRightEdge(slider), detail);\n const thumbRadius = get$d(thumb.element) / 2;\n set$8(thumb.element, 'left', pos - thumbRadius + 'px');\n };\n const onLeft$2 = handleMovement$2(-1);\n const onRight$2 = handleMovement$2(1);\n const onUp$2 = Optional.none;\n const onDown$2 = Optional.none;\n const edgeActions$2 = {\n 'top-left': Optional.none(),\n 'top': Optional.none(),\n 'top-right': Optional.none(),\n 'right': Optional.some(setToREdge),\n 'bottom-right': Optional.none(),\n 'bottom': Optional.none(),\n 'bottom-left': Optional.none(),\n 'left': Optional.some(setToLEdge)\n };\n\n var HorizontalModel = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setValueFrom: setValueFrom$2,\n setToMin: setToMin$2,\n setToMax: setToMax$2,\n findValueOfOffset: findValueOfOffset$1,\n getValueFromEvent: getValueFromEvent$2,\n findPositionOfValue: findPositionOfValue$1,\n setPositionFromValue: setPositionFromValue$2,\n onLeft: onLeft$2,\n onRight: onRight$2,\n onUp: onUp$2,\n onDown: onDown$2,\n edgeActions: edgeActions$2\n });\n\n const fireSliderChange$1 = (spectrum, value) => {\n emitWith(spectrum, sliderChangeEvent(), { value });\n };\n const findValueOfOffset = (spectrum, detail, top) => {\n const args = {\n min: minY(detail),\n max: maxY(detail),\n range: yRange(detail),\n value: top,\n step: step(detail),\n snap: snap(detail),\n snapStart: snapStart(detail),\n rounded: rounded(detail),\n hasMinEdge: hasTEdge(detail),\n hasMaxEdge: hasBEdge(detail),\n minBound: getMinYBounds(spectrum),\n maxBound: getMaxYBounds(spectrum),\n screenRange: getYScreenRange(spectrum)\n };\n return findValueOf(args);\n };\n const setValueFrom$1 = (spectrum, detail, value) => {\n const yValue = findValueOfOffset(spectrum, detail, value);\n const sliderVal = yValue;\n fireSliderChange$1(spectrum, sliderVal);\n return yValue;\n };\n const setToMin$1 = (spectrum, detail) => {\n const min = minY(detail);\n fireSliderChange$1(spectrum, min);\n };\n const setToMax$1 = (spectrum, detail) => {\n const max = maxY(detail);\n fireSliderChange$1(spectrum, max);\n };\n const moveBy$1 = (direction, spectrum, detail, useMultiplier) => {\n const f = direction > 0 ? increaseBy : reduceBy;\n const yValue = f(currentValue(detail), minY(detail), maxY(detail), step(detail, useMultiplier));\n fireSliderChange$1(spectrum, yValue);\n return Optional.some(yValue);\n };\n const handleMovement$1 = direction => (spectrum, detail, useMultiplier) => moveBy$1(direction, spectrum, detail, useMultiplier).map(always);\n const getValueFromEvent$1 = simulatedEvent => {\n const pos = getEventSource(simulatedEvent);\n return pos.map(p => {\n return p.top;\n });\n };\n const findOffsetOfValue = (spectrum, detail, value, minEdge, maxEdge) => {\n const minOffset = 0;\n const maxOffset = getYScreenRange(spectrum);\n const centerMinEdge = minEdge.bind(edge => Optional.some(getYCenterOffSetOf(edge, spectrum))).getOr(minOffset);\n const centerMaxEdge = maxEdge.bind(edge => Optional.some(getYCenterOffSetOf(edge, spectrum))).getOr(maxOffset);\n const args = {\n min: minY(detail),\n max: maxY(detail),\n range: yRange(detail),\n value,\n hasMinEdge: hasTEdge(detail),\n hasMaxEdge: hasBEdge(detail),\n minBound: getMinYBounds(spectrum),\n minOffset,\n maxBound: getMaxYBounds(spectrum),\n maxOffset,\n centerMinEdge,\n centerMaxEdge\n };\n return findOffsetOfValue$2(args);\n };\n const findPositionOfValue = (slider, spectrum, value, minEdge, maxEdge, detail) => {\n const offset = findOffsetOfValue(spectrum, detail, value, minEdge, maxEdge);\n return getMinYBounds(spectrum) - getMinYBounds(slider) + offset;\n };\n const setPositionFromValue$1 = (slider, thumb, detail, edges) => {\n const value = currentValue(detail);\n const pos = findPositionOfValue(slider, edges.getSpectrum(slider), value, edges.getTopEdge(slider), edges.getBottomEdge(slider), detail);\n const thumbRadius = get$e(thumb.element) / 2;\n set$8(thumb.element, 'top', pos - thumbRadius + 'px');\n };\n const onLeft$1 = Optional.none;\n const onRight$1 = Optional.none;\n const onUp$1 = handleMovement$1(-1);\n const onDown$1 = handleMovement$1(1);\n const edgeActions$1 = {\n 'top-left': Optional.none(),\n 'top': Optional.some(setToTEdge),\n 'top-right': Optional.none(),\n 'right': Optional.none(),\n 'bottom-right': Optional.none(),\n 'bottom': Optional.some(setToBEdge),\n 'bottom-left': Optional.none(),\n 'left': Optional.none()\n };\n\n var VerticalModel = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setValueFrom: setValueFrom$1,\n setToMin: setToMin$1,\n setToMax: setToMax$1,\n findValueOfOffset: findValueOfOffset,\n getValueFromEvent: getValueFromEvent$1,\n findPositionOfValue: findPositionOfValue,\n setPositionFromValue: setPositionFromValue$1,\n onLeft: onLeft$1,\n onRight: onRight$1,\n onUp: onUp$1,\n onDown: onDown$1,\n edgeActions: edgeActions$1\n });\n\n const fireSliderChange = (spectrum, value) => {\n emitWith(spectrum, sliderChangeEvent(), { value });\n };\n const sliderValue = (x, y) => ({\n x,\n y\n });\n const setValueFrom = (spectrum, detail, value) => {\n const xValue = findValueOfOffset$1(spectrum, detail, value.left);\n const yValue = findValueOfOffset(spectrum, detail, value.top);\n const val = sliderValue(xValue, yValue);\n fireSliderChange(spectrum, val);\n return val;\n };\n const moveBy = (direction, isVerticalMovement, spectrum, detail, useMultiplier) => {\n const f = direction > 0 ? increaseBy : reduceBy;\n const xValue = isVerticalMovement ? currentValue(detail).x : f(currentValue(detail).x, minX(detail), maxX(detail), step(detail, useMultiplier));\n const yValue = !isVerticalMovement ? currentValue(detail).y : f(currentValue(detail).y, minY(detail), maxY(detail), step(detail, useMultiplier));\n fireSliderChange(spectrum, sliderValue(xValue, yValue));\n return Optional.some(xValue);\n };\n const handleMovement = (direction, isVerticalMovement) => (spectrum, detail, useMultiplier) => moveBy(direction, isVerticalMovement, spectrum, detail, useMultiplier).map(always);\n const setToMin = (spectrum, detail) => {\n const mX = minX(detail);\n const mY = minY(detail);\n fireSliderChange(spectrum, sliderValue(mX, mY));\n };\n const setToMax = (spectrum, detail) => {\n const mX = maxX(detail);\n const mY = maxY(detail);\n fireSliderChange(spectrum, sliderValue(mX, mY));\n };\n const getValueFromEvent = simulatedEvent => getEventSource(simulatedEvent);\n const setPositionFromValue = (slider, thumb, detail, edges) => {\n const value = currentValue(detail);\n const xPos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value.x, edges.getLeftEdge(slider), edges.getRightEdge(slider), detail);\n const yPos = findPositionOfValue(slider, edges.getSpectrum(slider), value.y, edges.getTopEdge(slider), edges.getBottomEdge(slider), detail);\n const thumbXRadius = get$d(thumb.element) / 2;\n const thumbYRadius = get$e(thumb.element) / 2;\n set$8(thumb.element, 'left', xPos - thumbXRadius + 'px');\n set$8(thumb.element, 'top', yPos - thumbYRadius + 'px');\n };\n const onLeft = handleMovement(-1, false);\n const onRight = handleMovement(1, false);\n const onUp = handleMovement(-1, true);\n const onDown = handleMovement(1, true);\n const edgeActions = {\n 'top-left': Optional.some(setToTLEdgeXY),\n 'top': Optional.some(setToTEdgeXY),\n 'top-right': Optional.some(setToTREdgeXY),\n 'right': Optional.some(setToREdgeXY),\n 'bottom-right': Optional.some(setToBREdgeXY),\n 'bottom': Optional.some(setToBEdgeXY),\n 'bottom-left': Optional.some(setToBLEdgeXY),\n 'left': Optional.some(setToLEdgeXY)\n };\n\n var TwoDModel = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setValueFrom: setValueFrom,\n setToMin: setToMin,\n setToMax: setToMax,\n getValueFromEvent: getValueFromEvent,\n setPositionFromValue: setPositionFromValue,\n onLeft: onLeft,\n onRight: onRight,\n onUp: onUp,\n onDown: onDown,\n edgeActions: edgeActions\n });\n\n const SliderSchema = [\n defaulted('stepSize', 1),\n defaulted('speedMultiplier', 10),\n defaulted('onChange', noop),\n defaulted('onChoose', noop),\n defaulted('onInit', noop),\n defaulted('onDragStart', noop),\n defaulted('onDragEnd', noop),\n defaulted('snapToGrid', false),\n defaulted('rounded', true),\n option$3('snapStart'),\n requiredOf('model', choose$1('mode', {\n x: [\n defaulted('minX', 0),\n defaulted('maxX', 100),\n customField('value', spec => Cell(spec.mode.minX)),\n required$1('getInitialValue'),\n output$1('manager', HorizontalModel)\n ],\n y: [\n defaulted('minY', 0),\n defaulted('maxY', 100),\n customField('value', spec => Cell(spec.mode.minY)),\n required$1('getInitialValue'),\n output$1('manager', VerticalModel)\n ],\n xy: [\n defaulted('minX', 0),\n defaulted('maxX', 100),\n defaulted('minY', 0),\n defaulted('maxY', 100),\n customField('value', spec => Cell({\n x: spec.mode.minX,\n y: spec.mode.minY\n })),\n required$1('getInitialValue'),\n output$1('manager', TwoDModel)\n ]\n })),\n field('sliderBehaviours', [\n Keying,\n Representing\n ]),\n customField('mouseIsDown', () => Cell(false))\n ];\n\n const sketch$2 = (detail, components, _spec, _externals) => {\n const getThumb = component => getPartOrDie(component, detail, 'thumb');\n const getSpectrum = component => getPartOrDie(component, detail, 'spectrum');\n const getLeftEdge = component => getPart(component, detail, 'left-edge');\n const getRightEdge = component => getPart(component, detail, 'right-edge');\n const getTopEdge = component => getPart(component, detail, 'top-edge');\n const getBottomEdge = component => getPart(component, detail, 'bottom-edge');\n const modelDetail = detail.model;\n const model = modelDetail.manager;\n const refresh = (slider, thumb) => {\n model.setPositionFromValue(slider, thumb, detail, {\n getLeftEdge,\n getRightEdge,\n getTopEdge,\n getBottomEdge,\n getSpectrum\n });\n };\n const setValue = (slider, newValue) => {\n modelDetail.value.set(newValue);\n const thumb = getThumb(slider);\n refresh(slider, thumb);\n };\n const changeValue = (slider, newValue) => {\n setValue(slider, newValue);\n const thumb = getThumb(slider);\n detail.onChange(slider, thumb, newValue);\n return Optional.some(true);\n };\n const resetToMin = slider => {\n model.setToMin(slider, detail);\n };\n const resetToMax = slider => {\n model.setToMax(slider, detail);\n };\n const choose = slider => {\n const fireOnChoose = () => {\n getPart(slider, detail, 'thumb').each(thumb => {\n const value = modelDetail.value.get();\n detail.onChoose(slider, thumb, value);\n });\n };\n const wasDown = detail.mouseIsDown.get();\n detail.mouseIsDown.set(false);\n if (wasDown) {\n fireOnChoose();\n }\n };\n const onDragStart = (slider, simulatedEvent) => {\n simulatedEvent.stop();\n detail.mouseIsDown.set(true);\n detail.onDragStart(slider, getThumb(slider));\n };\n const onDragEnd = (slider, simulatedEvent) => {\n simulatedEvent.stop();\n detail.onDragEnd(slider, getThumb(slider));\n choose(slider);\n };\n const focusWidget = component => {\n getPart(component, detail, 'spectrum').map(Keying.focusIn);\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.sliderBehaviours, [\n Keying.config({\n mode: 'special',\n focusIn: focusWidget\n }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: _ => {\n return modelDetail.value.get();\n },\n setValue\n }\n }),\n Receiving.config({ channels: { [mouseReleased()]: { onReceive: choose } } })\n ]),\n events: derive$2([\n run$1(sliderChangeEvent(), (slider, simulatedEvent) => {\n changeValue(slider, simulatedEvent.event.value);\n }),\n runOnAttached((slider, _simulatedEvent) => {\n const getInitial = modelDetail.getInitialValue();\n modelDetail.value.set(getInitial);\n const thumb = getThumb(slider);\n refresh(slider, thumb);\n const spectrum = getSpectrum(slider);\n detail.onInit(slider, thumb, spectrum, modelDetail.value.get());\n }),\n run$1(touchstart(), onDragStart),\n run$1(touchend(), onDragEnd),\n run$1(mousedown(), (component, event) => {\n focusWidget(component);\n onDragStart(component, event);\n }),\n run$1(mouseup(), onDragEnd)\n ]),\n apis: {\n resetToMin,\n resetToMax,\n setValue,\n refresh\n },\n domModification: { styles: { position: 'relative' } }\n };\n };\n\n const Slider = composite({\n name: 'Slider',\n configFields: SliderSchema,\n partFields: SliderParts,\n factory: sketch$2,\n apis: {\n setValue: (apis, slider, value) => {\n apis.setValue(slider, value);\n },\n resetToMin: (apis, slider) => {\n apis.resetToMin(slider);\n },\n resetToMax: (apis, slider) => {\n apis.resetToMax(slider);\n },\n refresh: (apis, slider) => {\n apis.refresh(slider);\n }\n }\n });\n\n const fieldsUpdate = generate$6('rgb-hex-update');\n const sliderUpdate = generate$6('slider-update');\n const paletteUpdate = generate$6('palette-update');\n\n const sliderFactory = (translate, getClass) => {\n const spectrum = Slider.parts.spectrum({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider-spectrum')],\n attributes: { role: 'presentation' }\n }\n });\n const thumb = Slider.parts.thumb({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider-thumb')],\n attributes: { role: 'presentation' }\n }\n });\n return Slider.sketch({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider')],\n attributes: {\n 'role': 'slider',\n 'aria-valuemin': 0,\n 'aria-valuemax': 360,\n 'aria-valuenow': 120\n }\n },\n rounded: false,\n model: {\n mode: 'y',\n getInitialValue: constant$1(0)\n },\n components: [\n spectrum,\n thumb\n ],\n sliderBehaviours: derive$1([Focusing.config({})]),\n onChange: (slider, _thumb, value) => {\n set$9(slider.element, 'aria-valuenow', Math.floor(360 - value * 3.6));\n emitWith(slider, sliderUpdate, { value });\n }\n });\n };\n\n const owner$1 = 'form';\n const schema$i = [field('formBehaviours', [Representing])];\n const getPartName$1 = name => '';\n const sketch$1 = fSpec => {\n const parts = (() => {\n const record = [];\n const field = (name, config) => {\n record.push(name);\n return generateOne$1(owner$1, getPartName$1(name), config);\n };\n return {\n field,\n record: constant$1(record)\n };\n })();\n const spec = fSpec(parts);\n const partNames = parts.record();\n const fieldParts = map$2(partNames, n => required({\n name: n,\n pname: getPartName$1(n)\n }));\n return composite$1(owner$1, schema$i, fieldParts, make$4, spec);\n };\n const toResult = (o, e) => o.fold(() => Result.error(e), Result.value);\n const make$4 = (detail, components) => ({\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.formBehaviours, [Representing.config({\n store: {\n mode: 'manual',\n getValue: form => {\n const resPs = getAllParts(form, detail);\n return map$1(resPs, (resPThunk, pName) => resPThunk().bind(v => {\n const opt = Composing.getCurrent(v);\n return toResult(opt, new Error(`Cannot find a current component to extract the value from for form part '${ pName }': ` + element(v.element)));\n }).map(Representing.getValue));\n },\n setValue: (form, values) => {\n each(values, (newValue, key) => {\n getPart(form, detail, key).each(wrapper => {\n Composing.getCurrent(wrapper).each(field => {\n Representing.setValue(field, newValue);\n });\n });\n });\n }\n }\n })]),\n apis: {\n getField: (form, key) => {\n return getPart(form, detail, key).bind(Composing.getCurrent);\n }\n }\n });\n const Form = {\n getField: makeApi((apis, component, key) => apis.getField(component, key)),\n sketch: sketch$1\n };\n\n const validInput = generate$6('valid-input');\n const invalidInput = generate$6('invalid-input');\n const validatingInput = generate$6('validating-input');\n const translatePrefix = 'colorcustom.rgb.';\n const uninitiatedTooltipApi = {\n isEnabled: always,\n setEnabled: noop,\n immediatelyShow: noop,\n immediatelyHide: noop\n };\n const rgbFormFactory = (translate, getClass, onValidHexx, onInvalidHexx, tooltipGetConfig, makeIcon) => {\n const setTooltipEnabled = (enabled, tooltipApi) => {\n const api = tooltipApi.get();\n if (enabled === api.isEnabled()) {\n return;\n }\n api.setEnabled(enabled);\n if (enabled) {\n api.immediatelyShow();\n } else {\n api.immediatelyHide();\n }\n };\n const invalidation = (label, isValid, tooltipApi) => Invalidating.config({\n invalidClass: getClass('invalid'),\n notify: {\n onValidate: comp => {\n emitWith(comp, validatingInput, { type: label });\n },\n onValid: comp => {\n setTooltipEnabled(false, tooltipApi);\n emitWith(comp, validInput, {\n type: label,\n value: Representing.getValue(comp)\n });\n },\n onInvalid: comp => {\n setTooltipEnabled(true, tooltipApi);\n emitWith(comp, invalidInput, {\n type: label,\n value: Representing.getValue(comp)\n });\n }\n },\n validator: {\n validate: comp => {\n const value = Representing.getValue(comp);\n const res = isValid(value) ? Result.value(true) : Result.error(translate('aria.input.invalid'));\n return Future.pure(res);\n },\n validateOnLoad: false\n }\n });\n const renderTextField = (isValid, name, label, description, data) => {\n const tooltipApi = Cell(uninitiatedTooltipApi);\n const helptext = translate(translatePrefix + 'range');\n const pLabel = FormField.parts.label({\n dom: { tag: 'label' },\n components: [text$2(label)]\n });\n const pField = FormField.parts.field({\n data,\n factory: Input,\n inputAttributes: {\n 'type': 'text',\n 'aria-label': description,\n ...name === 'hex' ? { 'aria-live': 'polite' } : {}\n },\n inputClasses: [getClass('textfield')],\n inputBehaviours: derive$1([\n invalidation(name, isValid, tooltipApi),\n Tabstopping.config({}),\n Tooltipping.config({\n ...tooltipGetConfig({\n tooltipText: '',\n onSetup: comp => {\n tooltipApi.set({\n isEnabled: () => {\n return Tooltipping.isEnabled(comp);\n },\n setEnabled: enabled => {\n return Tooltipping.setEnabled(comp, enabled);\n },\n immediatelyShow: () => {\n return Tooltipping.immediateOpenClose(comp, true);\n },\n immediatelyHide: () => {\n return Tooltipping.immediateOpenClose(comp, false);\n }\n });\n Tooltipping.setEnabled(comp, false);\n },\n onShow: (component, _tooltip) => {\n Tooltipping.setComponents(component, [{\n dom: {\n tag: 'p',\n classes: [getClass('rgb-warning-note')]\n },\n components: [text$2(translate(name === 'hex' ? 'colorcustom.rgb.invalidHex' : 'colorcustom.rgb.invalid'))]\n }]);\n }\n })\n })\n ]),\n onSetValue: input => {\n if (Invalidating.isInvalid(input)) {\n const run = Invalidating.run(input);\n run.get(noop);\n }\n }\n });\n const errorId = generate$6('aria-invalid');\n const memInvalidIcon = record(makeIcon('invalid', Optional.some(errorId), 'warning'));\n const memStatus = record({\n dom: {\n tag: 'div',\n classes: [getClass('invalid-icon')]\n },\n components: [memInvalidIcon.asSpec()]\n });\n const comps = [\n pLabel,\n pField,\n memStatus.asSpec()\n ];\n const concats = name !== 'hex' ? [FormField.parts['aria-descriptor']({ text: helptext })] : [];\n const components = comps.concat(concats);\n return {\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' },\n classes: [getClass('rgb-container')]\n },\n components\n };\n };\n const copyRgbToHex = (form, rgba) => {\n const hex = fromRgba(rgba);\n Form.getField(form, 'hex').each(hexField => {\n if (!Focusing.isFocused(hexField)) {\n Representing.setValue(form, { hex: hex.value });\n }\n });\n return hex;\n };\n const copyRgbToForm = (form, rgb) => {\n const red = rgb.red;\n const green = rgb.green;\n const blue = rgb.blue;\n Representing.setValue(form, {\n red,\n green,\n blue\n });\n };\n const memPreview = record({\n dom: {\n tag: 'div',\n classes: [getClass('rgba-preview')],\n styles: { 'background-color': 'white' },\n attributes: { role: 'presentation' }\n }\n });\n const updatePreview = (anyInSystem, hex) => {\n memPreview.getOpt(anyInSystem).each(preview => {\n set$8(preview.element, 'background-color', '#' + hex.value);\n });\n };\n const factory = () => {\n const state = {\n red: Cell(Optional.some(255)),\n green: Cell(Optional.some(255)),\n blue: Cell(Optional.some(255)),\n hex: Cell(Optional.some('ffffff'))\n };\n const copyHexToRgb = (form, hex) => {\n const rgb = fromHex(hex);\n copyRgbToForm(form, rgb);\n setValueRgb(rgb);\n };\n const get = prop => state[prop].get();\n const set = (prop, value) => {\n state[prop].set(value);\n };\n const getValueRgb = () => get('red').bind(red => get('green').bind(green => get('blue').map(blue => rgbaColour(red, green, blue, 1))));\n const setValueRgb = rgb => {\n const red = rgb.red;\n const green = rgb.green;\n const blue = rgb.blue;\n set('red', Optional.some(red));\n set('green', Optional.some(green));\n set('blue', Optional.some(blue));\n };\n const onInvalidInput = (form, simulatedEvent) => {\n const data = simulatedEvent.event;\n if (data.type !== 'hex') {\n set(data.type, Optional.none());\n } else {\n onInvalidHexx(form);\n }\n };\n const onValidHex = (form, value) => {\n onValidHexx(form);\n const hex = hexColour(value);\n set('hex', Optional.some(hex.value));\n const rgb = fromHex(hex);\n copyRgbToForm(form, rgb);\n setValueRgb(rgb);\n emitWith(form, fieldsUpdate, { hex });\n updatePreview(form, hex);\n };\n const onValidRgb = (form, prop, value) => {\n const val = parseInt(value, 10);\n set(prop, Optional.some(val));\n getValueRgb().each(rgb => {\n const hex = copyRgbToHex(form, rgb);\n emitWith(form, fieldsUpdate, { hex });\n updatePreview(form, hex);\n });\n };\n const isHexInputEvent = data => data.type === 'hex';\n const onValidInput = (form, simulatedEvent) => {\n const data = simulatedEvent.event;\n if (isHexInputEvent(data)) {\n onValidHex(form, data.value);\n } else {\n onValidRgb(form, data.type, data.value);\n }\n };\n const formPartStrings = key => ({\n label: translate(translatePrefix + key + '.label'),\n description: translate(translatePrefix + key + '.description')\n });\n const redStrings = formPartStrings('red');\n const greenStrings = formPartStrings('green');\n const blueStrings = formPartStrings('blue');\n const hexStrings = formPartStrings('hex');\n return deepMerge(Form.sketch(parts => ({\n dom: {\n tag: 'form',\n classes: [getClass('rgb-form')],\n attributes: { 'aria-label': translate('aria.color.picker') }\n },\n components: [\n parts.field('red', FormField.sketch(renderTextField(isRgbaComponent, 'red', redStrings.label, redStrings.description, 255))),\n parts.field('green', FormField.sketch(renderTextField(isRgbaComponent, 'green', greenStrings.label, greenStrings.description, 255))),\n parts.field('blue', FormField.sketch(renderTextField(isRgbaComponent, 'blue', blueStrings.label, blueStrings.description, 255))),\n parts.field('hex', FormField.sketch(renderTextField(isHexString, 'hex', hexStrings.label, hexStrings.description, 'ffffff'))),\n memPreview.asSpec()\n ],\n formBehaviours: derive$1([\n Invalidating.config({ invalidClass: getClass('form-invalid') }),\n config('rgb-form-events', [\n run$1(validInput, onValidInput),\n run$1(invalidInput, onInvalidInput),\n run$1(validatingInput, onInvalidInput)\n ])\n ])\n })), {\n apis: {\n updateHex: (form, hex) => {\n Representing.setValue(form, { hex: hex.value });\n copyHexToRgb(form, hex);\n updatePreview(form, hex);\n }\n }\n });\n };\n const rgbFormSketcher = single({\n factory,\n name: 'RgbForm',\n configFields: [],\n apis: {\n updateHex: (apis, form, hex) => {\n apis.updateHex(form, hex);\n }\n },\n extraApis: {}\n });\n return rgbFormSketcher;\n };\n\n const paletteFactory = (translate, getClass) => {\n const spectrumPart = Slider.parts.spectrum({\n dom: {\n tag: 'canvas',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette-spectrum')]\n }\n });\n const thumbPart = Slider.parts.thumb({\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette-thumb')],\n innerHtml: `
    `\n }\n });\n const setColour = (canvas, rgba) => {\n const {width, height} = canvas;\n const ctx = canvas.getContext('2d');\n if (ctx === null) {\n return;\n }\n ctx.fillStyle = rgba;\n ctx.fillRect(0, 0, width, height);\n const grdWhite = ctx.createLinearGradient(0, 0, width, 0);\n grdWhite.addColorStop(0, 'rgba(255,255,255,1)');\n grdWhite.addColorStop(1, 'rgba(255,255,255,0)');\n ctx.fillStyle = grdWhite;\n ctx.fillRect(0, 0, width, height);\n const grdBlack = ctx.createLinearGradient(0, 0, 0, height);\n grdBlack.addColorStop(0, 'rgba(0,0,0,0)');\n grdBlack.addColorStop(1, 'rgba(0,0,0,1)');\n ctx.fillStyle = grdBlack;\n ctx.fillRect(0, 0, width, height);\n };\n const setPaletteHue = (slider, hue) => {\n const canvas = slider.components()[0].element.dom;\n const hsv = hsvColour(hue, 100, 100);\n const rgba = fromHsv(hsv);\n setColour(canvas, toString(rgba));\n };\n const setPaletteThumb = (slider, hex) => {\n const hsv = fromRgb(fromHex(hex));\n Slider.setValue(slider, {\n x: hsv.saturation,\n y: 100 - hsv.value\n });\n set$9(slider.element, 'aria-valuetext', translate([\n 'Saturation {0}%, Brightness {1}%',\n hsv.saturation,\n hsv.value\n ]));\n };\n const factory = _detail => {\n const getInitialValue = constant$1({\n x: 0,\n y: 0\n });\n const onChange = (slider, _thumb, value) => {\n if (!isNumber(value)) {\n set$9(slider.element, 'aria-valuetext', translate([\n 'Saturation {0}%, Brightness {1}%',\n Math.floor(value.x),\n Math.floor(100 - value.y)\n ]));\n }\n emitWith(slider, paletteUpdate, { value });\n };\n const onInit = (_slider, _thumb, spectrum, _value) => {\n setColour(spectrum.element.dom, toString(red));\n };\n const sliderBehaviours = derive$1([\n Composing.config({ find: Optional.some }),\n Focusing.config({})\n ]);\n return Slider.sketch({\n dom: {\n tag: 'div',\n attributes: {\n 'role': 'slider',\n 'aria-valuetext': translate([\n 'Saturation {0}%, Brightness {1}%',\n 0,\n 0\n ])\n },\n classes: [getClass('sv-palette')]\n },\n model: {\n mode: 'xy',\n getInitialValue\n },\n rounded: false,\n components: [\n spectrumPart,\n thumbPart\n ],\n onChange,\n onInit,\n sliderBehaviours\n });\n };\n const saturationBrightnessPaletteSketcher = single({\n factory,\n name: 'SaturationBrightnessPalette',\n configFields: [],\n apis: {\n setHue: (_apis, slider, hue) => {\n setPaletteHue(slider, hue);\n },\n setThumb: (_apis, slider, hex) => {\n setPaletteThumb(slider, hex);\n }\n },\n extraApis: {}\n });\n return saturationBrightnessPaletteSketcher;\n };\n\n const makeFactory = (translate, getClass, tooltipConfig, makeIcon) => {\n const factory = detail => {\n const rgbForm = rgbFormFactory(translate, getClass, detail.onValidHex, detail.onInvalidHex, tooltipConfig, makeIcon);\n const sbPalette = paletteFactory(translate, getClass);\n const hueSliderToDegrees = hue => (100 - hue) / 100 * 360;\n const hueDegreesToSlider = hue => 100 - hue / 360 * 100;\n const state = {\n paletteRgba: Cell(red),\n paletteHue: Cell(0)\n };\n const memSlider = record(sliderFactory(translate, getClass));\n const memPalette = record(sbPalette.sketch({}));\n const memRgb = record(rgbForm.sketch({}));\n const updatePalette = (anyInSystem, _hex, hue) => {\n memPalette.getOpt(anyInSystem).each(palette => {\n sbPalette.setHue(palette, hue);\n });\n };\n const updateFields = (anyInSystem, hex) => {\n memRgb.getOpt(anyInSystem).each(form => {\n rgbForm.updateHex(form, hex);\n });\n };\n const updateSlider = (anyInSystem, _hex, hue) => {\n memSlider.getOpt(anyInSystem).each(slider => {\n Slider.setValue(slider, hueDegreesToSlider(hue));\n });\n };\n const updatePaletteThumb = (anyInSystem, hex) => {\n memPalette.getOpt(anyInSystem).each(palette => {\n sbPalette.setThumb(palette, hex);\n });\n };\n const updateState = (hex, hue) => {\n const rgba = fromHex(hex);\n state.paletteRgba.set(rgba);\n state.paletteHue.set(hue);\n };\n const runUpdates = (anyInSystem, hex, hue, updates) => {\n updateState(hex, hue);\n each$1(updates, update => {\n update(anyInSystem, hex, hue);\n });\n };\n const onPaletteUpdate = () => {\n const updates = [updateFields];\n return (form, simulatedEvent) => {\n const value = simulatedEvent.event.value;\n const oldHue = state.paletteHue.get();\n const newHsv = hsvColour(oldHue, value.x, 100 - value.y);\n const newHex = hsvToHex(newHsv);\n runUpdates(form, newHex, oldHue, updates);\n };\n };\n const onSliderUpdate = () => {\n const updates = [\n updatePalette,\n updateFields\n ];\n return (form, simulatedEvent) => {\n const hue = hueSliderToDegrees(simulatedEvent.event.value);\n const oldRgb = state.paletteRgba.get();\n const oldHsv = fromRgb(oldRgb);\n const newHsv = hsvColour(hue, oldHsv.saturation, oldHsv.value);\n const newHex = hsvToHex(newHsv);\n runUpdates(form, newHex, hue, updates);\n };\n };\n const onFieldsUpdate = () => {\n const updates = [\n updatePalette,\n updateSlider,\n updatePaletteThumb\n ];\n return (form, simulatedEvent) => {\n const hex = simulatedEvent.event.hex;\n const hsv = hexToHsv(hex);\n runUpdates(form, hex, hsv.hue, updates);\n };\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: [\n memPalette.asSpec(),\n memSlider.asSpec(),\n memRgb.asSpec()\n ],\n behaviours: derive$1([\n config('colour-picker-events', [\n run$1(fieldsUpdate, onFieldsUpdate()),\n run$1(paletteUpdate, onPaletteUpdate()),\n run$1(sliderUpdate, onSliderUpdate())\n ]),\n Composing.config({ find: comp => memRgb.getOpt(comp) }),\n Keying.config({ mode: 'acyclic' })\n ])\n };\n };\n const colourPickerSketcher = single({\n name: 'ColourPicker',\n configFields: [\n required$1('dom'),\n defaulted('onValidHex', noop),\n defaulted('onInvalidHex', noop)\n ],\n factory\n });\n return colourPickerSketcher;\n };\n\n const self = () => Composing.config({ find: Optional.some });\n const memento$1 = mem => Composing.config({ find: mem.getOpt });\n const childAt = index => Composing.config({ find: comp => child$2(comp.element, index).bind(element => comp.getSystem().getByDom(element).toOptional()) });\n const ComposingConfigs = {\n self,\n memento: memento$1,\n childAt\n };\n\n const processors = objOf([\n defaulted('preprocess', identity),\n defaulted('postprocess', identity)\n ]);\n const memento = (mem, rawProcessors) => {\n const ps = asRawOrDie$1('RepresentingConfigs.memento processors', processors, rawProcessors);\n return Representing.config({\n store: {\n mode: 'manual',\n getValue: comp => {\n const other = mem.get(comp);\n const rawValue = Representing.getValue(other);\n return ps.postprocess(rawValue);\n },\n setValue: (comp, rawValue) => {\n const newValue = ps.preprocess(rawValue);\n const other = mem.get(comp);\n Representing.setValue(other, newValue);\n }\n }\n });\n };\n const withComp = (optInitialValue, getter, setter) => Representing.config({\n store: {\n mode: 'manual',\n ...optInitialValue.map(initialValue => ({ initialValue })).getOr({}),\n getValue: getter,\n setValue: setter\n }\n });\n const withElement = (initialValue, getter, setter) => withComp(initialValue, c => getter(c.element), (c, v) => setter(c.element, v));\n const domHtml = optInitialValue => withElement(optInitialValue, get$8, set$6);\n const memory = initialValue => Representing.config({\n store: {\n mode: 'memory',\n initialValue\n }\n });\n\n const english = {\n 'colorcustom.rgb.red.label': 'R',\n 'colorcustom.rgb.red.description': 'Red channel',\n 'colorcustom.rgb.green.label': 'G',\n 'colorcustom.rgb.green.description': 'Green channel',\n 'colorcustom.rgb.blue.label': 'B',\n 'colorcustom.rgb.blue.description': 'Blue channel',\n 'colorcustom.rgb.hex.label': '#',\n 'colorcustom.rgb.hex.description': 'Hex color code',\n 'colorcustom.rgb.range': 'Range 0 to 255',\n 'colorcustom.rgb.invalid': 'Numbers only, 0 to 255',\n 'colorcustom.rgb.invalidHex': 'Hexadecimal only, 000000 to FFFFFF',\n 'aria.color.picker': 'Color Picker',\n 'aria.input.invalid': 'Invalid input'\n };\n const translate$1 = providerBackstage => key => {\n if (isString(key)) {\n return providerBackstage.translate(english[key]);\n } else {\n return providerBackstage.translate(key);\n }\n };\n const renderColorPicker = (_spec, providerBackstage, initialData) => {\n const getClass = key => 'tox-' + key;\n const renderIcon = (name, errId, icon = name, label = name) => render$3(icon, {\n tag: 'div',\n classes: [\n 'tox-icon',\n 'tox-control-wrap__status-icon-' + name\n ],\n attributes: {\n 'title': providerBackstage.translate(label),\n 'aria-live': 'polite',\n ...errId.fold(() => ({}), id => ({ id }))\n }\n }, providerBackstage.icons);\n const colourPickerFactory = makeFactory(translate$1(providerBackstage), getClass, providerBackstage.tooltips.getConfig, renderIcon);\n const onValidHex = form => {\n emitWith(form, formActionEvent, {\n name: 'hex-valid',\n value: true\n });\n };\n const onInvalidHex = form => {\n emitWith(form, formActionEvent, {\n name: 'hex-valid',\n value: false\n });\n };\n const memPicker = record(colourPickerFactory.sketch({\n dom: {\n tag: 'div',\n classes: [getClass('color-picker-container')],\n attributes: { role: 'presentation' }\n },\n onValidHex,\n onInvalidHex\n }));\n return {\n dom: { tag: 'div' },\n components: [memPicker.asSpec()],\n behaviours: derive$1([\n withComp(initialData, comp => {\n const picker = memPicker.get(comp);\n const optRgbForm = Composing.getCurrent(picker);\n const optHex = optRgbForm.bind(rgbForm => {\n const formValues = Representing.getValue(rgbForm);\n return formValues.hex;\n });\n return optHex.map(hex => '#' + removeLeading(hex, '#')).getOr('');\n }, (comp, newValue) => {\n const pattern = /^#([a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?)/;\n const valOpt = Optional.from(pattern.exec(newValue)).bind(matches => get$i(matches, 1));\n const picker = memPicker.get(comp);\n const optRgbForm = Composing.getCurrent(picker);\n optRgbForm.fold(() => {\n console.log('Can not find form');\n }, rgbForm => {\n Representing.setValue(rgbForm, { hex: valOpt.getOr('') });\n Form.getField(rgbForm, 'hex').each(hexField => {\n emit(hexField, input());\n });\n });\n }),\n ComposingConfigs.self()\n ])\n };\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Resource');\n\n const isOldCustomEditor = spec => has$2(spec, 'init');\n const renderCustomEditor = spec => {\n const editorApi = value$4();\n const memReplaced = record({ dom: { tag: spec.tag } });\n const initialValue = value$4();\n const focusBehaviour = !isOldCustomEditor(spec) && spec.onFocus.isSome() ? [\n Focusing.config({\n onFocus: comp => {\n spec.onFocus.each(onFocusFn => {\n onFocusFn(comp.element.dom);\n });\n }\n }),\n Tabstopping.config({})\n ] : [];\n return {\n dom: {\n tag: 'div',\n classes: ['tox-custom-editor']\n },\n behaviours: derive$1([\n config('custom-editor-events', [runOnAttached(component => {\n memReplaced.getOpt(component).each(ta => {\n (isOldCustomEditor(spec) ? spec.init(ta.element.dom) : global$2.load(spec.scriptId, spec.scriptUrl).then(init => init(ta.element.dom, spec.settings))).then(ea => {\n initialValue.on(cvalue => {\n ea.setValue(cvalue);\n });\n initialValue.clear();\n editorApi.set(ea);\n });\n });\n })]),\n withComp(Optional.none(), () => editorApi.get().fold(() => initialValue.get().getOr(''), ed => ed.getValue()), (_component, value) => {\n editorApi.get().fold(() => initialValue.set(value), ed => ed.setValue(value));\n }),\n ComposingConfigs.self()\n ].concat(focusBehaviour)),\n components: [memReplaced.asSpec()]\n };\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const browseFilesEvent = generate$6('browse.files.event');\n const filterByExtension = (files, providersBackstage) => {\n const allowedImageFileTypes = global$1.explode(providersBackstage.getOption('images_file_types'));\n const isFileInAllowedTypes = file => exists(allowedImageFileTypes, type => endsWith(file.name.toLowerCase(), `.${ type.toLowerCase() }`));\n return filter$2(from(files), isFileInAllowedTypes);\n };\n const renderDropZone = (spec, providersBackstage, initialData) => {\n const stopper = (_, se) => {\n se.stop();\n };\n const sequence = actions => (comp, se) => {\n each$1(actions, a => {\n a(comp, se);\n });\n };\n const onDrop = (comp, se) => {\n var _a;\n if (!Disabling.isDisabled(comp)) {\n const transferEvent = se.event.raw;\n emitWith(comp, browseFilesEvent, { files: (_a = transferEvent.dataTransfer) === null || _a === void 0 ? void 0 : _a.files });\n }\n };\n const onSelect = (component, simulatedEvent) => {\n const input = simulatedEvent.event.raw.target;\n emitWith(component, browseFilesEvent, { files: input.files });\n };\n const handleFiles = (component, files) => {\n if (files) {\n Representing.setValue(component, filterByExtension(files, providersBackstage));\n emitWith(component, formChangeEvent, { name: spec.name });\n }\n };\n const memInput = record({\n dom: {\n tag: 'input',\n attributes: {\n type: 'file',\n accept: 'image/*'\n },\n styles: { display: 'none' }\n },\n behaviours: derive$1([config('input-file-events', [\n cutter(click()),\n cutter(tap())\n ])])\n });\n const pLabel = spec.label.map(label => renderLabel$3(label, providersBackstage));\n const pField = FormField.parts.field({\n factory: Button,\n dom: {\n tag: 'button',\n styles: { position: 'relative' },\n classes: [\n 'tox-button',\n 'tox-button--secondary'\n ]\n },\n components: [\n text$2(providersBackstage.translate('Browse for an image')),\n memInput.asSpec()\n ],\n action: comp => {\n const inputComp = memInput.get(comp);\n inputComp.element.dom.click();\n },\n buttonBehaviours: derive$1([\n ComposingConfigs.self(),\n memory(initialData.getOr([])),\n Tabstopping.config({}),\n DisablingConfigs.button(() => providersBackstage.checkUiComponentContext(spec.context).shouldDisable),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context))\n ])\n });\n const wrapper = {\n dom: {\n tag: 'div',\n classes: ['tox-dropzone-container']\n },\n behaviours: derive$1([\n Disabling.config({ disabled: () => providersBackstage.checkUiComponentContext(spec.context).shouldDisable }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)),\n Toggling.config({\n toggleClass: 'dragenter',\n toggleOnExecute: false\n }),\n config('dropzone-events', [\n run$1('dragenter', sequence([\n stopper,\n Toggling.toggle\n ])),\n run$1('dragleave', sequence([\n stopper,\n Toggling.toggle\n ])),\n run$1('dragover', stopper),\n run$1('drop', sequence([\n stopper,\n onDrop\n ])),\n run$1(change(), onSelect)\n ])\n ]),\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-dropzone'],\n styles: {}\n },\n components: [\n {\n dom: { tag: 'p' },\n components: [text$2(providersBackstage.translate('Drop an image here'))]\n },\n pField\n ]\n }]\n };\n return renderFormFieldWith(pLabel, wrapper, ['tox-form__group--stretched'], [config('handle-files', [run$1(browseFilesEvent, (comp, se) => {\n FormField.getField(comp).each(field => {\n handleFiles(field, se.event.files);\n });\n })])]);\n };\n\n const renderGrid = (spec, backstage) => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-form__grid',\n `tox-form__grid--${ spec.columns }col`\n ]\n },\n components: map$2(spec.items, backstage.interpreter)\n });\n\n const adaptable = (fn, rate) => {\n let timer = null;\n let args = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n args = null;\n }\n };\n const throttle = (...newArgs) => {\n args = newArgs;\n if (isNull(timer)) {\n timer = setTimeout(() => {\n const tempArgs = args;\n timer = null;\n args = null;\n fn.apply(null, tempArgs);\n }, rate);\n }\n };\n return {\n cancel,\n throttle\n };\n };\n const first = (fn, rate) => {\n let timer = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const throttle = (...args) => {\n if (isNull(timer)) {\n timer = setTimeout(() => {\n timer = null;\n fn.apply(null, args);\n }, rate);\n }\n };\n return {\n cancel,\n throttle\n };\n };\n const last = (fn, rate) => {\n let timer = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const throttle = (...args) => {\n cancel();\n timer = setTimeout(() => {\n timer = null;\n fn.apply(null, args);\n }, rate);\n };\n return {\n cancel,\n throttle\n };\n };\n\n const beforeObject = generate$6('alloy-fake-before-tabstop');\n const afterObject = generate$6('alloy-fake-after-tabstop');\n const craftWithClasses = classes => {\n return {\n dom: {\n tag: 'div',\n styles: {\n width: '1px',\n height: '1px',\n outline: 'none'\n },\n attributes: { tabindex: '0' },\n classes\n },\n behaviours: derive$1([\n Focusing.config({ ignore: true }),\n Tabstopping.config({})\n ])\n };\n };\n const craft = (containerClasses, spec) => {\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-navobj',\n ...containerClasses.getOr([])\n ]\n },\n components: [\n craftWithClasses([beforeObject]),\n spec,\n craftWithClasses([afterObject])\n ],\n behaviours: derive$1([ComposingConfigs.childAt(1)])\n };\n };\n const triggerTab = (placeholder, shiftKey) => {\n emitWith(placeholder, keydown(), {\n raw: {\n which: 9,\n shiftKey\n }\n });\n };\n const onFocus = (container, targetComp) => {\n const target = targetComp.element;\n if (has(target, beforeObject)) {\n triggerTab(container, true);\n } else if (has(target, afterObject)) {\n triggerTab(container, false);\n }\n };\n const isPseudoStop = element => {\n return closest(element, [\n '.' + beforeObject,\n '.' + afterObject\n ].join(','), never);\n };\n\n const dialogChannel = generate$6('update-dialog');\n const titleChannel = generate$6('update-title');\n const bodyChannel = generate$6('update-body');\n const footerChannel = generate$6('update-footer');\n const bodySendMessageChannel = generate$6('body-send-message');\n const dialogFocusShiftedChannel = generate$6('dialog-focus-shifted');\n\n const browser = detect$1().browser;\n const isSafari = browser.isSafari();\n const isFirefox = browser.isFirefox();\n const isSafariOrFirefox = isSafari || isFirefox;\n const isChromium = browser.isChromium();\n const isElementScrollAtBottom = ({scrollTop, scrollHeight, clientHeight}) => Math.ceil(scrollTop) + clientHeight >= scrollHeight;\n const scrollToY = (win, y) => win.scrollTo(0, y === 'bottom' ? 99999999 : y);\n const getScrollingElement = (doc, html) => {\n const body = doc.body;\n return Optional.from(!/^ 1)) ? body : doc.documentElement);\n };\n const writeValue = (iframeElement, html, fallbackFn) => {\n const iframe = iframeElement.dom;\n Optional.from(iframe.contentDocument).fold(fallbackFn, doc => {\n let lastScrollTop = 0;\n const isScrollAtBottom = getScrollingElement(doc, html).map(el => {\n lastScrollTop = el.scrollTop;\n return el;\n }).forall(isElementScrollAtBottom);\n const scrollAfterWrite = () => {\n const win = iframe.contentWindow;\n if (isNonNullable(win)) {\n if (isScrollAtBottom) {\n scrollToY(win, 'bottom');\n } else if (!isScrollAtBottom && isSafariOrFirefox && lastScrollTop !== 0) {\n scrollToY(win, lastScrollTop);\n }\n }\n };\n if (isSafari) {\n iframe.addEventListener('load', scrollAfterWrite, { once: true });\n }\n doc.open();\n doc.write(html);\n doc.close();\n if (!isSafari) {\n scrollAfterWrite();\n }\n });\n };\n const throttleInterval = someIf(isSafariOrFirefox, isSafari ? 500 : 200);\n const writeValueThrottler = throttleInterval.map(interval => adaptable(writeValue, interval));\n const getDynamicSource = (initialData, stream) => {\n const cachedValue = Cell(initialData.getOr(''));\n return {\n getValue: _frameComponent => cachedValue.get(),\n setValue: (frameComponent, html) => {\n if (cachedValue.get() !== html) {\n const iframeElement = frameComponent.element;\n const setSrcdocValue = () => set$9(iframeElement, 'srcdoc', html);\n if (stream) {\n writeValueThrottler.fold(constant$1(writeValue), throttler => throttler.throttle)(iframeElement, html, setSrcdocValue);\n } else {\n setSrcdocValue();\n }\n }\n cachedValue.set(html);\n }\n };\n };\n const renderIFrame = (spec, providersBackstage, initialData) => {\n const baseClass = 'tox-dialog__iframe';\n const opaqueClass = spec.transparent ? [] : [`${ baseClass }--opaque`];\n const containerBorderedClass = spec.border ? [`tox-navobj-bordered`] : [];\n const attributes = {\n ...spec.label.map(title => ({ title })).getOr({}),\n ...initialData.map(html => ({ srcdoc: html })).getOr({}),\n ...spec.sandboxed ? { sandbox: 'allow-scripts allow-same-origin' } : {}\n };\n const sourcing = getDynamicSource(initialData, spec.streamContent);\n const pLabel = spec.label.map(label => renderLabel$3(label, providersBackstage));\n const factory = newSpec => craft(Optional.from(containerBorderedClass), {\n uid: newSpec.uid,\n dom: {\n tag: 'iframe',\n attributes,\n classes: [\n baseClass,\n ...opaqueClass\n ]\n },\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({}),\n withComp(initialData, sourcing.getValue, sourcing.setValue),\n Receiving.config({\n channels: {\n [dialogFocusShiftedChannel]: {\n onReceive: (comp, message) => {\n message.newFocus.each(newFocus => {\n parentElement(comp.element).each(parent => {\n const f = eq(comp.element, newFocus) ? add$2 : remove$3;\n f(parent, 'tox-navobj-bordered-focus');\n });\n });\n }\n }\n }\n })\n ])\n });\n const pField = FormField.parts.field({ factory: { sketch: factory } });\n return renderFormFieldWith(pLabel, pField, ['tox-form__group--stretched'], []);\n };\n\n const image = image => new Promise((resolve, reject) => {\n const loaded = () => {\n destroy();\n resolve(image);\n };\n const listeners = [\n bind(image, 'load', loaded),\n bind(image, 'error', () => {\n destroy();\n reject('Unable to load data from image: ' + image.dom.src);\n })\n ];\n const destroy = () => each$1(listeners, l => l.unbind());\n if (image.dom.complete) {\n loaded();\n }\n });\n\n const calculateImagePosition = (panelWidth, panelHeight, imageWidth, imageHeight, zoom) => {\n const width = imageWidth * zoom;\n const height = imageHeight * zoom;\n const left = Math.max(0, panelWidth / 2 - width / 2);\n const top = Math.max(0, panelHeight / 2 - height / 2);\n return {\n left: left.toString() + 'px',\n top: top.toString() + 'px',\n width: width.toString() + 'px',\n height: height.toString() + 'px'\n };\n };\n const zoomToFit = (panel, width, height) => {\n const panelW = get$d(panel);\n const panelH = get$e(panel);\n return Math.min(panelW / width, panelH / height, 1);\n };\n const renderImagePreview = (spec, initialData) => {\n const cachedData = Cell(initialData.getOr({ url: '' }));\n const memImage = record({\n dom: {\n tag: 'img',\n classes: ['tox-imagepreview__image'],\n attributes: initialData.map(data => ({ src: data.url })).getOr({})\n }\n });\n const memContainer = record({\n dom: {\n tag: 'div',\n classes: ['tox-imagepreview__container'],\n attributes: { role: 'presentation' }\n },\n components: [memImage.asSpec()]\n });\n const setValue = (frameComponent, data) => {\n const translatedData = { url: data.url };\n data.zoom.each(z => translatedData.zoom = z);\n data.cachedWidth.each(z => translatedData.cachedWidth = z);\n data.cachedHeight.each(z => translatedData.cachedHeight = z);\n cachedData.set(translatedData);\n const applyFramePositioning = () => {\n const {cachedWidth, cachedHeight, zoom} = translatedData;\n if (!isUndefined(cachedWidth) && !isUndefined(cachedHeight)) {\n if (isUndefined(zoom)) {\n const z = zoomToFit(frameComponent.element, cachedWidth, cachedHeight);\n translatedData.zoom = z;\n }\n const position = calculateImagePosition(get$d(frameComponent.element), get$e(frameComponent.element), cachedWidth, cachedHeight, translatedData.zoom);\n memContainer.getOpt(frameComponent).each(container => {\n setAll(container.element, position);\n });\n }\n };\n memImage.getOpt(frameComponent).each(imageComponent => {\n const img = imageComponent.element;\n if (data.url !== get$g(img, 'src')) {\n set$9(img, 'src', data.url);\n remove$3(frameComponent.element, 'tox-imagepreview__loaded');\n }\n applyFramePositioning();\n image(img).then(img => {\n if (frameComponent.getSystem().isConnected()) {\n add$2(frameComponent.element, 'tox-imagepreview__loaded');\n translatedData.cachedWidth = img.dom.naturalWidth;\n translatedData.cachedHeight = img.dom.naturalHeight;\n applyFramePositioning();\n }\n });\n });\n };\n const styles = {};\n spec.height.each(h => styles.height = h);\n const fakeValidatedData = initialData.map(d => ({\n url: d.url,\n zoom: Optional.from(d.zoom),\n cachedWidth: Optional.from(d.cachedWidth),\n cachedHeight: Optional.from(d.cachedHeight)\n }));\n return {\n dom: {\n tag: 'div',\n classes: ['tox-imagepreview'],\n styles,\n attributes: { role: 'presentation' }\n },\n components: [memContainer.asSpec()],\n behaviours: derive$1([\n ComposingConfigs.self(),\n withComp(fakeValidatedData, () => cachedData.get(), setValue)\n ])\n };\n };\n\n const renderLabel$2 = (spec, backstageShared, getCompByName) => {\n const baseClass = 'tox-label';\n const centerClass = spec.align === 'center' ? [`${ baseClass }--center`] : [];\n const endClass = spec.align === 'end' ? [`${ baseClass }--end`] : [];\n const label = record({\n dom: {\n tag: 'label',\n classes: [\n baseClass,\n ...centerClass,\n ...endClass\n ]\n },\n components: [text$2(backstageShared.providers.translate(spec.label))]\n });\n const comps = map$2(spec.items, backstageShared.interpreter);\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: [\n label.asSpec(),\n ...comps\n ],\n behaviours: derive$1([\n ComposingConfigs.self(),\n Replacing.config({}),\n domHtml(Optional.none()),\n Keying.config({ mode: 'acyclic' }),\n config('label', [runOnAttached(comp => {\n spec.for.each(name => {\n getCompByName(name).each(target => {\n label.getOpt(comp).each(labelComp => {\n var _a;\n const id = (_a = get$g(target.element, 'id')) !== null && _a !== void 0 ? _a : generate$6('form-field');\n set$9(target.element, 'id', id);\n set$9(labelComp.element, 'for', id);\n });\n });\n });\n })])\n ])\n };\n };\n\n const internalToolbarButtonExecute = generate$6('toolbar.button.execute');\n const onToolbarButtonExecute = info => runOnExecute$1((comp, _simulatedEvent) => {\n runWithApi(info, comp)(itemApi => {\n emitWith(comp, internalToolbarButtonExecute, { buttonApi: itemApi });\n info.onAction(itemApi);\n });\n });\n const commonButtonDisplayEvent = generate$6('common-button-display-events');\n const toolbarButtonEventOrder = {\n [execute$5()]: [\n 'disabling',\n 'alloy.base.behaviour',\n 'toggling',\n 'toolbar-button-events',\n 'tooltipping'\n ],\n [attachedToDom()]: [\n 'toolbar-button-events',\n commonButtonDisplayEvent\n ],\n [detachedFromDom()]: [\n 'toolbar-button-events',\n 'dropdown-events',\n 'tooltipping'\n ],\n [mousedown()]: [\n 'focusing',\n 'alloy.base.behaviour',\n commonButtonDisplayEvent\n ]\n };\n\n const forceInitialSize = comp => set$8(comp.element, 'width', get$f(comp.element, 'width'));\n\n const renderIcon$1 = (iconName, iconsProvider, behaviours) => render$3(iconName, {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-tbtn__icon-wrap'\n ],\n behaviours\n }, iconsProvider);\n const renderIconFromPack$1 = (iconName, iconsProvider) => renderIcon$1(iconName, iconsProvider, []);\n const renderReplaceableIconFromPack = (iconName, iconsProvider) => renderIcon$1(iconName, iconsProvider, [Replacing.config({})]);\n const renderLabel$1 = (text, prefix, providersBackstage) => ({\n dom: {\n tag: 'span',\n classes: [`${ prefix }__select-label`]\n },\n components: [text$2(providersBackstage.translate(text))],\n behaviours: derive$1([Replacing.config({})])\n });\n\n const updateMenuText = generate$6('update-menu-text');\n const updateMenuIcon = generate$6('update-menu-icon');\n const renderCommonDropdown = (spec, prefix, sharedBackstage, btnName) => {\n const editorOffCell = Cell(noop);\n const optMemDisplayText = spec.text.map(text => record(renderLabel$1(text, prefix, sharedBackstage.providers)));\n const optMemDisplayIcon = spec.icon.map(iconName => record(renderReplaceableIconFromPack(iconName, sharedBackstage.providers.icons)));\n const onLeftOrRightInMenu = (comp, se) => {\n const dropdown = Representing.getValue(comp);\n Focusing.focus(dropdown);\n emitWith(dropdown, 'keydown', { raw: se.event.raw });\n Dropdown.close(dropdown);\n return Optional.some(true);\n };\n const role = spec.role.fold(() => ({}), role => ({ role }));\n const listRole = Optional.from(spec.listRole).map(listRole => ({ listRole })).getOr({});\n const ariaLabelAttribute = spec.ariaLabel.fold(() => ({}), ariaLabel => {\n const translatedAriaLabel = sharedBackstage.providers.translate(ariaLabel);\n return { 'aria-label': translatedAriaLabel };\n });\n const iconSpec = render$3('chevron-down', {\n tag: 'div',\n classes: [`${ prefix }__select-chevron`]\n }, sharedBackstage.providers.icons);\n const fixWidthBehaviourName = generate$6('common-button-display-events');\n const customEventsName = 'dropdown-events';\n const memDropdown = record(Dropdown.sketch({\n ...spec.uid ? { uid: spec.uid } : {},\n ...role,\n ...listRole,\n dom: {\n tag: 'button',\n classes: [\n prefix,\n `${ prefix }--select`\n ].concat(map$2(spec.classes, c => `${ prefix }--${ c }`)),\n attributes: {\n ...ariaLabelAttribute,\n ...isNonNullable(btnName) ? { 'data-mce-name': btnName } : {}\n }\n },\n components: componentRenderPipeline([\n optMemDisplayIcon.map(mem => mem.asSpec()),\n optMemDisplayText.map(mem => mem.asSpec()),\n Optional.some(iconSpec)\n ]),\n matchWidth: true,\n useMinWidth: true,\n onOpen: (anchor, dropdownComp, tmenuComp) => {\n if (spec.searchable) {\n focusSearchField(tmenuComp);\n }\n },\n dropdownBehaviours: derive$1([\n ...spec.dropdownBehaviours,\n DisablingConfigs.button(() => spec.disabled || sharedBackstage.providers.checkUiComponentContext(spec.context).shouldDisable),\n toggleOnReceive(() => sharedBackstage.providers.checkUiComponentContext(spec.context)),\n Unselecting.config({}),\n Replacing.config({}),\n ...spec.tooltip.map(t => Tooltipping.config(sharedBackstage.providers.tooltips.getConfig({ tooltipText: sharedBackstage.providers.translate(t) }))).toArray(),\n config(customEventsName, [\n onControlAttached(spec, editorOffCell),\n onControlDetached(spec, editorOffCell)\n ]),\n config(fixWidthBehaviourName, [runOnAttached((comp, _se) => {\n if (spec.listRole !== 'listbox') {\n forceInitialSize(comp);\n }\n })]),\n config('update-dropdown-width-variable', [run$1(windowResize(), (comp, _se) => Dropdown.close(comp))]),\n config('menubutton-update-display-text', [\n run$1(updateMenuText, (comp, se) => {\n optMemDisplayText.bind(mem => mem.getOpt(comp)).each(displayText => {\n Replacing.set(displayText, [text$2(sharedBackstage.providers.translate(se.event.text))]);\n });\n }),\n run$1(updateMenuIcon, (comp, se) => {\n optMemDisplayIcon.bind(mem => mem.getOpt(comp)).each(displayIcon => {\n Replacing.set(displayIcon, [renderReplaceableIconFromPack(se.event.icon, sharedBackstage.providers.icons)]);\n });\n })\n ])\n ]),\n eventOrder: deepMerge(toolbarButtonEventOrder, {\n [mousedown()]: [\n 'focusing',\n 'alloy.base.behaviour',\n 'item-type-events',\n 'normal-dropdown-events'\n ],\n [attachedToDom()]: [\n 'toolbar-button-events',\n Tooltipping.name(),\n customEventsName,\n fixWidthBehaviourName\n ]\n }),\n sandboxBehaviours: derive$1([\n Keying.config({\n mode: 'special',\n onLeft: onLeftOrRightInMenu,\n onRight: onLeftOrRightInMenu\n }),\n config('dropdown-sandbox-events', [\n run$1(refetchTriggerEvent, (originalSandboxComp, se) => {\n handleRefetchTrigger(originalSandboxComp);\n se.stop();\n }),\n run$1(redirectMenuItemInteractionEvent, (sandboxComp, se) => {\n handleRedirectToMenuItem(sandboxComp, se);\n se.stop();\n })\n ])\n ]),\n lazySink: sharedBackstage.getSink,\n toggleClass: `${ prefix }--active`,\n parts: {\n menu: {\n ...part(false, spec.columns, spec.presets),\n fakeFocus: spec.searchable,\n ...spec.listRole === 'listbox' ? {} : {\n onHighlightItem: updateAriaOnHighlight,\n onCollapseMenu: (tmenuComp, itemCompCausingCollapse, nowActiveMenuComp) => {\n Highlighting.getHighlighted(nowActiveMenuComp).each(itemComp => {\n updateAriaOnHighlight(tmenuComp, nowActiveMenuComp, itemComp);\n });\n },\n onDehighlightItem: updateAriaOnDehighlight\n }\n }\n },\n getAnchorOverrides: () => {\n return {\n maxHeightFunction: (element, available) => {\n anchored()(element, available - 10);\n }\n };\n },\n fetch: comp => Future.nu(curry(spec.fetch, comp))\n }));\n return memDropdown.asSpec();\n };\n\n const isMenuItemReference = item => isString(item);\n const isSeparator$2 = item => item.type === 'separator';\n const isExpandingMenuItem = item => has$2(item, 'getSubmenuItems');\n const separator$2 = { type: 'separator' };\n const unwrapReferences = (items, menuItems) => {\n const realItems = foldl(items, (acc, item) => {\n if (isMenuItemReference(item)) {\n if (item === '') {\n return acc;\n } else if (item === '|') {\n return acc.length > 0 && !isSeparator$2(acc[acc.length - 1]) ? acc.concat([separator$2]) : acc;\n } else if (has$2(menuItems, item.toLowerCase())) {\n return acc.concat([menuItems[item.toLowerCase()]]);\n } else {\n return acc;\n }\n } else {\n return acc.concat([item]);\n }\n }, []);\n if (realItems.length > 0 && isSeparator$2(realItems[realItems.length - 1])) {\n realItems.pop();\n }\n return realItems;\n };\n const getFromExpandingItem = (item, menuItems) => {\n const submenuItems = item.getSubmenuItems();\n const rest = expand(submenuItems, menuItems);\n const newMenus = deepMerge(rest.menus, { [item.value]: rest.items });\n const newExpansions = deepMerge(rest.expansions, { [item.value]: item.value });\n return {\n item,\n menus: newMenus,\n expansions: newExpansions\n };\n };\n const generateValueIfRequired = item => {\n const itemValue = get$h(item, 'value').getOrThunk(() => generate$6('generated-menu-item'));\n return deepMerge({ value: itemValue }, item);\n };\n const expand = (items, menuItems) => {\n const realItems = unwrapReferences(isString(items) ? items.split(' ') : items, menuItems);\n return foldr(realItems, (acc, item) => {\n if (isExpandingMenuItem(item)) {\n const itemWithValue = generateValueIfRequired(item);\n const newData = getFromExpandingItem(itemWithValue, menuItems);\n return {\n menus: deepMerge(acc.menus, newData.menus),\n items: [\n newData.item,\n ...acc.items\n ],\n expansions: deepMerge(acc.expansions, newData.expansions)\n };\n } else {\n return {\n ...acc,\n items: [\n item,\n ...acc.items\n ]\n };\n }\n }, {\n menus: {},\n expansions: {},\n items: []\n });\n };\n\n const getSearchModeForField = settings => {\n return settings.search.fold(() => ({ searchMode: 'no-search' }), searchSettings => ({\n searchMode: 'search-with-field',\n placeholder: searchSettings.placeholder\n }));\n };\n const getSearchModeForResults = settings => {\n return settings.search.fold(() => ({ searchMode: 'no-search' }), _ => ({ searchMode: 'search-with-results' }));\n };\n const build = (items, itemResponse, backstage, settings) => {\n const primary = generate$6('primary-menu');\n const data = expand(items, backstage.shared.providers.menuItems());\n if (data.items.length === 0) {\n return Optional.none();\n }\n const mainMenuSearchMode = getSearchModeForField(settings);\n const mainMenu = createPartialMenu(primary, data.items, itemResponse, backstage, settings.isHorizontalMenu, mainMenuSearchMode);\n const submenuSearchMode = getSearchModeForResults(settings);\n const submenus = map$1(data.menus, (menuItems, menuName) => createPartialMenu(menuName, menuItems, itemResponse, backstage, false, submenuSearchMode));\n const menus = deepMerge(submenus, wrap$1(primary, mainMenu));\n return Optional.from(tieredMenu.tieredData(primary, menus, data.expansions));\n };\n\n const isSingleListItem = item => !has$2(item, 'items');\n const dataAttribute = 'data-value';\n const fetchItems = (dropdownComp, name, items, selectedValue, hasNestedItems) => map$2(items, item => {\n if (!isSingleListItem(item)) {\n return {\n type: 'nestedmenuitem',\n text: item.text,\n getSubmenuItems: () => fetchItems(dropdownComp, name, item.items, selectedValue, hasNestedItems)\n };\n } else {\n return {\n type: 'togglemenuitem',\n ...hasNestedItems ? {} : { role: 'option' },\n text: item.text,\n value: item.value,\n active: item.value === selectedValue,\n onAction: () => {\n Representing.setValue(dropdownComp, item.value);\n emitWith(dropdownComp, formChangeEvent, { name });\n Focusing.focus(dropdownComp);\n }\n };\n }\n });\n const findItemByValue = (items, value) => findMap(items, item => {\n if (!isSingleListItem(item)) {\n return findItemByValue(item.items, value);\n } else {\n return someIf(item.value === value, item);\n }\n });\n const renderListBox = (spec, backstage, initialData) => {\n const hasNestedItems = exists(spec.items, item => !isSingleListItem(item));\n const providersBackstage = backstage.shared.providers;\n const initialItem = initialData.bind(value => findItemByValue(spec.items, value)).orThunk(() => head(spec.items).filter(isSingleListItem));\n const pLabel = spec.label.map(label => renderLabel$3(label, providersBackstage));\n const pField = FormField.parts.field({\n dom: {},\n factory: {\n sketch: sketchSpec => renderCommonDropdown({\n context: spec.context,\n uid: sketchSpec.uid,\n text: initialItem.map(item => item.text),\n icon: Optional.none(),\n tooltip: Optional.none(),\n role: someIf(!hasNestedItems, 'combobox'),\n ...hasNestedItems ? {} : { listRole: 'listbox' },\n ariaLabel: spec.label,\n fetch: (comp, callback) => {\n const items = fetchItems(comp, spec.name, spec.items, Representing.getValue(comp), hasNestedItems);\n callback(build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n isHorizontalMenu: false,\n search: Optional.none()\n }));\n },\n onSetup: constant$1(noop),\n getApi: constant$1({}),\n columns: 1,\n presets: 'normal',\n classes: [],\n dropdownBehaviours: [\n Tabstopping.config({}),\n withComp(initialItem.map(item => item.value), comp => get$g(comp.element, dataAttribute), (comp, data) => {\n findItemByValue(spec.items, data).each(item => {\n set$9(comp.element, dataAttribute, item.value);\n emitWith(comp, updateMenuText, { text: item.text });\n });\n })\n ]\n }, 'tox-listbox', backstage.shared)\n }\n });\n const listBoxWrap = {\n dom: {\n tag: 'div',\n classes: ['tox-listboxfield']\n },\n components: [pField]\n };\n return FormField.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: flatten([\n pLabel.toArray(),\n [listBoxWrap]\n ]),\n fieldBehaviours: derive$1([Disabling.config({\n disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable,\n onDisabled: comp => {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormField.getField(comp).each(Disabling.enable);\n }\n })])\n });\n };\n\n const renderPanel = (spec, backstage) => ({\n dom: {\n tag: 'div',\n classes: spec.classes\n },\n components: map$2(spec.items, backstage.shared.interpreter)\n });\n\n const factory$h = (detail, _spec) => {\n const options = map$2(detail.options, option => ({\n dom: {\n tag: 'option',\n value: option.value,\n innerHtml: option.text\n }\n }));\n const initialValues = detail.data.map(v => wrap$1('initialValue', v)).getOr({});\n return {\n uid: detail.uid,\n dom: {\n tag: 'select',\n classes: detail.selectClasses,\n attributes: detail.selectAttributes\n },\n components: options,\n behaviours: augment(detail.selectBehaviours, [\n Focusing.config({}),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: select => {\n return get$7(select.element);\n },\n setValue: (select, newValue) => {\n const firstOption = head(detail.options);\n const found = find$5(detail.options, opt => opt.value === newValue);\n if (found.isSome()) {\n set$5(select.element, newValue);\n } else if (select.element.dom.selectedIndex === -1 && newValue === '') {\n firstOption.each(value => set$5(select.element, value.value));\n }\n },\n ...initialValues\n }\n })\n ])\n };\n };\n const HtmlSelect = single({\n name: 'HtmlSelect',\n configFields: [\n required$1('options'),\n field('selectBehaviours', [\n Focusing,\n Representing\n ]),\n defaulted('selectClasses', []),\n defaulted('selectAttributes', {}),\n option$3('data')\n ],\n factory: factory$h\n });\n\n const renderSelectBox = (spec, providersBackstage, initialData) => {\n const translatedOptions = map$2(spec.items, item => ({\n text: providersBackstage.translate(item.text),\n value: item.value\n }));\n const pLabel = spec.label.map(label => renderLabel$3(label, providersBackstage));\n const pField = FormField.parts.field({\n dom: {},\n ...initialData.map(data => ({ data })).getOr({}),\n selectAttributes: { size: spec.size },\n options: translatedOptions,\n factory: HtmlSelect,\n selectBehaviours: derive$1([\n Disabling.config({ disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable }),\n Tabstopping.config({}),\n config('selectbox-change', [run$1(change(), (component, _) => {\n emitWith(component, formChangeEvent, { name: spec.name });\n })])\n ])\n });\n const chevron = spec.size > 1 ? Optional.none() : Optional.some(render$3('chevron-down', {\n tag: 'div',\n classes: ['tox-selectfield__icon-js']\n }, providersBackstage.icons));\n const selectWrap = {\n dom: {\n tag: 'div',\n classes: ['tox-selectfield']\n },\n components: flatten([\n [pField],\n chevron.toArray()\n ])\n };\n return FormField.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: flatten([\n pLabel.toArray(),\n [selectWrap]\n ]),\n fieldBehaviours: derive$1([\n Disabling.config({\n disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable,\n onDisabled: comp => {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormField.getField(comp).each(Disabling.enable);\n }\n }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context))\n ])\n });\n };\n\n const schema$h = constant$1([\n defaulted('field1Name', 'field1'),\n defaulted('field2Name', 'field2'),\n onStrictHandler('onLockedChange'),\n markers$1(['lockClass']),\n defaulted('locked', false),\n SketchBehaviours.field('coupledFieldBehaviours', [\n Composing,\n Representing\n ]),\n defaultedFunction('onInput', noop)\n ]);\n const getField = (comp, detail, partName) => getPart(comp, detail, partName).bind(Composing.getCurrent);\n const coupledPart = (selfName, otherName) => required({\n factory: FormField,\n name: selfName,\n overrides: detail => {\n return {\n fieldBehaviours: derive$1([config('coupled-input-behaviour', [run$1(input(), me => {\n getField(me, detail, otherName).each(other => {\n getPart(me, detail, 'lock').each(lock => {\n if (Toggling.isOn(lock)) {\n detail.onLockedChange(me, other, lock);\n }\n detail.onInput(me);\n });\n });\n })])])\n };\n }\n });\n const parts$c = constant$1([\n coupledPart('field1', 'field2'),\n coupledPart('field2', 'field1'),\n required({\n factory: Button,\n schema: [required$1('dom')],\n name: 'lock',\n overrides: detail => {\n return {\n buttonBehaviours: derive$1([Toggling.config({\n selected: detail.locked,\n toggleClass: detail.markers.lockClass,\n aria: { mode: 'pressed' }\n })])\n };\n }\n })\n ]);\n\n const factory$g = (detail, components, _spec, _externals) => ({\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: SketchBehaviours.augment(detail.coupledFieldBehaviours, [\n Composing.config({ find: Optional.some }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: comp => {\n const parts = getPartsOrDie(comp, detail, [\n 'field1',\n 'field2'\n ]);\n return {\n [detail.field1Name]: Representing.getValue(parts.field1()),\n [detail.field2Name]: Representing.getValue(parts.field2())\n };\n },\n setValue: (comp, value) => {\n const parts = getPartsOrDie(comp, detail, [\n 'field1',\n 'field2'\n ]);\n if (hasNonNullableKey(value, detail.field1Name)) {\n Representing.setValue(parts.field1(), value[detail.field1Name]);\n }\n if (hasNonNullableKey(value, detail.field2Name)) {\n Representing.setValue(parts.field2(), value[detail.field2Name]);\n }\n }\n }\n })\n ]),\n apis: {\n getField1: component => getPart(component, detail, 'field1'),\n getField2: component => getPart(component, detail, 'field2'),\n getLock: component => getPart(component, detail, 'lock')\n }\n });\n const FormCoupledInputs = composite({\n name: 'FormCoupledInputs',\n configFields: schema$h(),\n partFields: parts$c(),\n factory: factory$g,\n apis: {\n getField1: (apis, component) => apis.getField1(component),\n getField2: (apis, component) => apis.getField2(component),\n getLock: (apis, component) => apis.getLock(component)\n }\n });\n\n const formatSize = size => {\n const unitDec = {\n '': 0,\n 'px': 0,\n 'pt': 1,\n 'mm': 1,\n 'pc': 2,\n 'ex': 2,\n 'em': 2,\n 'ch': 2,\n 'rem': 2,\n 'cm': 3,\n 'in': 4,\n '%': 4\n };\n const maxDecimal = unit => unit in unitDec ? unitDec[unit] : 1;\n let numText = size.value.toFixed(maxDecimal(size.unit));\n if (numText.indexOf('.') !== -1) {\n numText = numText.replace(/\\.?0*$/, '');\n }\n return numText + size.unit;\n };\n const parseSize = sizeText => {\n const numPattern = /^\\s*(\\d+(?:\\.\\d+)?)\\s*(|cm|mm|in|px|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax|%)\\s*$/;\n const match = numPattern.exec(sizeText);\n if (match !== null) {\n const value = parseFloat(match[1]);\n const unit = match[2];\n return Result.value({\n value,\n unit\n });\n } else {\n return Result.error(sizeText);\n }\n };\n const convertUnit = (size, unit) => {\n const inInch = {\n '': 96,\n 'px': 96,\n 'pt': 72,\n 'cm': 2.54,\n 'pc': 12,\n 'mm': 25.4,\n 'in': 1\n };\n const supported = u => has$2(inInch, u);\n if (size.unit === unit) {\n return Optional.some(size.value);\n } else if (supported(size.unit) && supported(unit)) {\n if (inInch[size.unit] === inInch[unit]) {\n return Optional.some(size.value);\n } else {\n return Optional.some(size.value / inInch[size.unit] * inInch[unit]);\n }\n } else {\n return Optional.none();\n }\n };\n const noSizeConversion = _input => Optional.none();\n const ratioSizeConversion = (scale, unit) => size => convertUnit(size, unit).map(value => ({\n value: value * scale,\n unit\n }));\n const makeRatioConverter = (currentFieldText, otherFieldText) => {\n const cValue = parseSize(currentFieldText).toOptional();\n const oValue = parseSize(otherFieldText).toOptional();\n return lift2(cValue, oValue, (cSize, oSize) => convertUnit(cSize, oSize.unit).map(val => oSize.value / val).map(r => ratioSizeConversion(r, oSize.unit)).getOr(noSizeConversion)).getOr(noSizeConversion);\n };\n\n const renderSizeInput = (spec, providersBackstage) => {\n let converter = noSizeConversion;\n const ratioEvent = generate$6('ratio-event');\n const makeIcon = iconName => render$3(iconName, {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-lock-icon__' + iconName\n ]\n }, providersBackstage.icons);\n const disabled = () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable;\n const toggleOnReceive$1 = toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context));\n const label = spec.label.getOr('Constrain proportions');\n const translatedLabel = providersBackstage.translate(label);\n const pLock = FormCoupledInputs.parts.lock({\n dom: {\n tag: 'button',\n classes: [\n 'tox-lock',\n 'tox-button',\n 'tox-button--naked',\n 'tox-button--icon'\n ],\n attributes: {\n 'aria-label': translatedLabel,\n 'data-mce-name': label\n }\n },\n components: [\n makeIcon('lock'),\n makeIcon('unlock')\n ],\n buttonBehaviours: derive$1([\n Disabling.config({ disabled }),\n toggleOnReceive$1,\n Tabstopping.config({}),\n Tooltipping.config(providersBackstage.tooltips.getConfig({ tooltipText: translatedLabel }))\n ])\n });\n const formGroup = components => ({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components\n });\n const getFieldPart = isField1 => FormField.parts.field({\n factory: Input,\n inputClasses: ['tox-textfield'],\n inputBehaviours: derive$1([\n Disabling.config({ disabled }),\n toggleOnReceive$1,\n Tabstopping.config({}),\n config('size-input-events', [\n run$1(focusin(), (component, _simulatedEvent) => {\n emitWith(component, ratioEvent, { isField1 });\n }),\n run$1(change(), (component, _simulatedEvent) => {\n emitWith(component, formChangeEvent, { name: spec.name });\n })\n ])\n ]),\n selectOnFocus: false\n });\n const getLabel = label => ({\n dom: {\n tag: 'label',\n classes: ['tox-label']\n },\n components: [text$2(providersBackstage.translate(label))]\n });\n const widthField = FormCoupledInputs.parts.field1(formGroup([\n FormField.parts.label(getLabel('Width')),\n getFieldPart(true)\n ]));\n const heightField = FormCoupledInputs.parts.field2(formGroup([\n FormField.parts.label(getLabel('Height')),\n getFieldPart(false)\n ]));\n return FormCoupledInputs.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-form__controls-h-stack']\n },\n components: [\n widthField,\n heightField,\n formGroup([\n getLabel(nbsp),\n pLock\n ])\n ]\n }],\n field1Name: 'width',\n field2Name: 'height',\n locked: true,\n markers: { lockClass: 'tox-locked' },\n onLockedChange: (current, other, _lock) => {\n parseSize(Representing.getValue(current)).each(size => {\n converter(size).each(newSize => {\n Representing.setValue(other, formatSize(newSize));\n });\n });\n },\n coupledFieldBehaviours: derive$1([\n Disabling.config({\n disabled,\n onDisabled: comp => {\n FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.disable);\n FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.disable);\n FormCoupledInputs.getLock(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.enable);\n FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.enable);\n FormCoupledInputs.getLock(comp).each(Disabling.enable);\n }\n }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext('mode:design')),\n config('size-input-events2', [run$1(ratioEvent, (component, simulatedEvent) => {\n const isField1 = simulatedEvent.event.isField1;\n const optCurrent = isField1 ? FormCoupledInputs.getField1(component) : FormCoupledInputs.getField2(component);\n const optOther = isField1 ? FormCoupledInputs.getField2(component) : FormCoupledInputs.getField1(component);\n const value1 = optCurrent.map(Representing.getValue).getOr('');\n const value2 = optOther.map(Representing.getValue).getOr('');\n converter = makeRatioConverter(value1, value2);\n })])\n ])\n });\n };\n\n const renderSlider = (spec, providerBackstage, initialData) => {\n const labelPart = Slider.parts.label({\n dom: {\n tag: 'label',\n classes: ['tox-label']\n },\n components: [text$2(providerBackstage.translate(spec.label))]\n });\n const spectrum = Slider.parts.spectrum({\n dom: {\n tag: 'div',\n classes: ['tox-slider__rail'],\n attributes: { role: 'presentation' }\n }\n });\n const thumb = Slider.parts.thumb({\n dom: {\n tag: 'div',\n classes: ['tox-slider__handle'],\n attributes: { role: 'presentation' }\n }\n });\n return Slider.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-slider'],\n attributes: { role: 'presentation' }\n },\n model: {\n mode: 'x',\n minX: spec.min,\n maxX: spec.max,\n getInitialValue: constant$1(initialData.getOrThunk(() => (Math.abs(spec.max) - Math.abs(spec.min)) / 2))\n },\n components: [\n labelPart,\n spectrum,\n thumb\n ],\n sliderBehaviours: derive$1([\n ComposingConfigs.self(),\n Focusing.config({})\n ]),\n onChoose: (component, thumb, value) => {\n emitWith(component, formChangeEvent, {\n name: spec.name,\n value\n });\n },\n onChange: (component, thumb, value) => {\n emitWith(component, formChangeEvent, {\n name: spec.name,\n value\n });\n }\n });\n };\n\n const renderTable = (spec, providersBackstage) => {\n const renderTh = text => ({\n dom: {\n tag: 'th',\n innerHtml: providersBackstage.translate(text)\n }\n });\n const renderHeader = header => ({\n dom: { tag: 'thead' },\n components: [{\n dom: { tag: 'tr' },\n components: map$2(header, renderTh)\n }]\n });\n const renderTd = text => ({\n dom: {\n tag: 'td',\n innerHtml: providersBackstage.translate(text)\n }\n });\n const renderTr = row => ({\n dom: { tag: 'tr' },\n components: map$2(row, renderTd)\n });\n const renderRows = rows => ({\n dom: { tag: 'tbody' },\n components: map$2(rows, renderTr)\n });\n return {\n dom: {\n tag: 'table',\n classes: ['tox-dialog__table']\n },\n components: [\n renderHeader(spec.header),\n renderRows(spec.cells)\n ],\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\n ])\n };\n };\n\n const renderTextField = (spec, providersBackstage) => {\n const pLabel = spec.label.map(label => renderLabel$3(label, providersBackstage));\n const baseInputBehaviours = [\n Disabling.config({ disabled: () => spec.disabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)),\n Keying.config({\n mode: 'execution',\n useEnter: spec.multiline !== true,\n useControlEnter: spec.multiline === true,\n execute: comp => {\n emit(comp, formSubmitEvent);\n return Optional.some(true);\n }\n }),\n config('textfield-change', [\n run$1(input(), (component, _) => {\n emitWith(component, formChangeEvent, { name: spec.name });\n }),\n run$1(postPaste(), (component, _) => {\n emitWith(component, formChangeEvent, { name: spec.name });\n })\n ]),\n Tabstopping.config({})\n ];\n const validatingBehaviours = spec.validation.map(vl => Invalidating.config({\n getRoot: input => {\n return parentElement(input.element);\n },\n invalidClass: 'tox-invalid',\n validator: {\n validate: input => {\n const v = Representing.getValue(input);\n const result = vl.validator(v);\n return Future.pure(result === true ? Result.value(v) : Result.error(result));\n },\n validateOnLoad: vl.validateOnLoad\n }\n })).toArray();\n const placeholder = spec.placeholder.fold(constant$1({}), p => ({ placeholder: providersBackstage.translate(p) }));\n const inputMode = spec.inputMode.fold(constant$1({}), mode => ({ inputmode: mode }));\n const inputAttributes = {\n ...placeholder,\n ...inputMode,\n 'data-mce-name': spec.name\n };\n const pField = FormField.parts.field({\n tag: spec.multiline === true ? 'textarea' : 'input',\n ...spec.data.map(data => ({ data })).getOr({}),\n inputAttributes,\n inputClasses: [spec.classname],\n inputBehaviours: derive$1(flatten([\n baseInputBehaviours,\n validatingBehaviours\n ])),\n selectOnFocus: false,\n factory: Input\n });\n const pTextField = spec.multiline ? {\n dom: {\n tag: 'div',\n classes: ['tox-textarea-wrap']\n },\n components: [pField]\n } : pField;\n const extraClasses = spec.flex ? ['tox-form__group--stretched'] : [];\n const extraClasses2 = extraClasses.concat(spec.maximized ? ['tox-form-group--maximize'] : []);\n const extraBehaviours = [\n Disabling.config({\n disabled: () => spec.disabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable,\n onDisabled: comp => {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormField.getField(comp).each(Disabling.enable);\n }\n }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context))\n ];\n return renderFormFieldWith(pLabel, pTextField, extraClasses2, extraBehaviours);\n };\n const renderInput = (spec, providersBackstage, initialData) => renderTextField({\n name: spec.name,\n multiline: false,\n label: spec.label,\n inputMode: spec.inputMode,\n placeholder: spec.placeholder,\n flex: false,\n disabled: !spec.enabled,\n classname: 'tox-textfield',\n validation: Optional.none(),\n maximized: spec.maximized,\n data: initialData,\n context: spec.context\n }, providersBackstage);\n const renderTextarea = (spec, providersBackstage, initialData) => renderTextField({\n name: spec.name,\n multiline: true,\n label: spec.label,\n inputMode: Optional.none(),\n placeholder: spec.placeholder,\n flex: true,\n disabled: !spec.enabled,\n classname: 'tox-textarea',\n validation: Optional.none(),\n maximized: spec.maximized,\n data: initialData,\n context: spec.context\n }, providersBackstage);\n\n const getAnimationRoot = (component, slideConfig) => slideConfig.getAnimationRoot.fold(() => component.element, get => get(component));\n\n const getDimensionProperty = slideConfig => slideConfig.dimension.property;\n const getDimension = (slideConfig, elem) => slideConfig.dimension.getDimension(elem);\n const disableTransitions = (component, slideConfig) => {\n const root = getAnimationRoot(component, slideConfig);\n remove$2(root, [\n slideConfig.shrinkingClass,\n slideConfig.growingClass\n ]);\n };\n const setShrunk = (component, slideConfig) => {\n remove$3(component.element, slideConfig.openClass);\n add$2(component.element, slideConfig.closedClass);\n set$8(component.element, getDimensionProperty(slideConfig), '0px');\n reflow(component.element);\n };\n const setGrown = (component, slideConfig) => {\n remove$3(component.element, slideConfig.closedClass);\n add$2(component.element, slideConfig.openClass);\n remove$7(component.element, getDimensionProperty(slideConfig));\n };\n const doImmediateShrink = (component, slideConfig, slideState, _calculatedSize) => {\n slideState.setCollapsed();\n set$8(component.element, getDimensionProperty(slideConfig), getDimension(slideConfig, component.element));\n disableTransitions(component, slideConfig);\n setShrunk(component, slideConfig);\n slideConfig.onStartShrink(component);\n slideConfig.onShrunk(component);\n };\n const doStartShrink = (component, slideConfig, slideState, calculatedSize) => {\n const size = calculatedSize.getOrThunk(() => getDimension(slideConfig, component.element));\n slideState.setCollapsed();\n set$8(component.element, getDimensionProperty(slideConfig), size);\n reflow(component.element);\n const root = getAnimationRoot(component, slideConfig);\n remove$3(root, slideConfig.growingClass);\n add$2(root, slideConfig.shrinkingClass);\n setShrunk(component, slideConfig);\n slideConfig.onStartShrink(component);\n };\n const doStartSmartShrink = (component, slideConfig, slideState) => {\n const size = getDimension(slideConfig, component.element);\n const shrinker = size === '0px' ? doImmediateShrink : doStartShrink;\n shrinker(component, slideConfig, slideState, Optional.some(size));\n };\n const doStartGrow = (component, slideConfig, slideState) => {\n const root = getAnimationRoot(component, slideConfig);\n const wasShrinking = has(root, slideConfig.shrinkingClass);\n const beforeSize = getDimension(slideConfig, component.element);\n setGrown(component, slideConfig);\n const fullSize = getDimension(slideConfig, component.element);\n const startPartialGrow = () => {\n set$8(component.element, getDimensionProperty(slideConfig), beforeSize);\n reflow(component.element);\n };\n const startCompleteGrow = () => {\n setShrunk(component, slideConfig);\n };\n const setStartSize = wasShrinking ? startPartialGrow : startCompleteGrow;\n setStartSize();\n remove$3(root, slideConfig.shrinkingClass);\n add$2(root, slideConfig.growingClass);\n setGrown(component, slideConfig);\n set$8(component.element, getDimensionProperty(slideConfig), fullSize);\n slideState.setExpanded();\n slideConfig.onStartGrow(component);\n };\n const refresh$3 = (component, slideConfig, slideState) => {\n if (slideState.isExpanded()) {\n remove$7(component.element, getDimensionProperty(slideConfig));\n const fullSize = getDimension(slideConfig, component.element);\n set$8(component.element, getDimensionProperty(slideConfig), fullSize);\n }\n };\n const grow = (component, slideConfig, slideState) => {\n if (!slideState.isExpanded()) {\n doStartGrow(component, slideConfig, slideState);\n }\n };\n const shrink = (component, slideConfig, slideState) => {\n if (slideState.isExpanded()) {\n doStartSmartShrink(component, slideConfig, slideState);\n }\n };\n const immediateShrink = (component, slideConfig, slideState) => {\n if (slideState.isExpanded()) {\n doImmediateShrink(component, slideConfig, slideState);\n }\n };\n const hasGrown = (component, slideConfig, slideState) => slideState.isExpanded();\n const hasShrunk = (component, slideConfig, slideState) => slideState.isCollapsed();\n const isGrowing = (component, slideConfig, _slideState) => {\n const root = getAnimationRoot(component, slideConfig);\n return has(root, slideConfig.growingClass) === true;\n };\n const isShrinking = (component, slideConfig, _slideState) => {\n const root = getAnimationRoot(component, slideConfig);\n return has(root, slideConfig.shrinkingClass) === true;\n };\n const isTransitioning = (component, slideConfig, slideState) => isGrowing(component, slideConfig) || isShrinking(component, slideConfig);\n const toggleGrow = (component, slideConfig, slideState) => {\n const f = slideState.isExpanded() ? doStartSmartShrink : doStartGrow;\n f(component, slideConfig, slideState);\n };\n const immediateGrow = (component, slideConfig, slideState) => {\n if (!slideState.isExpanded()) {\n setGrown(component, slideConfig);\n set$8(component.element, getDimensionProperty(slideConfig), getDimension(slideConfig, component.element));\n disableTransitions(component, slideConfig);\n slideState.setExpanded();\n slideConfig.onStartGrow(component);\n slideConfig.onGrown(component);\n }\n };\n\n var SlidingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n refresh: refresh$3,\n grow: grow,\n shrink: shrink,\n immediateShrink: immediateShrink,\n hasGrown: hasGrown,\n hasShrunk: hasShrunk,\n isGrowing: isGrowing,\n isShrinking: isShrinking,\n isTransitioning: isTransitioning,\n toggleGrow: toggleGrow,\n disableTransitions: disableTransitions,\n immediateGrow: immediateGrow\n });\n\n const exhibit = (base, slideConfig, _slideState) => {\n const expanded = slideConfig.expanded;\n return expanded ? nu$8({\n classes: [slideConfig.openClass],\n styles: {}\n }) : nu$8({\n classes: [slideConfig.closedClass],\n styles: wrap$1(slideConfig.dimension.property, '0px')\n });\n };\n const events$5 = (slideConfig, slideState) => derive$2([runOnSource(transitionend(), (component, simulatedEvent) => {\n const raw = simulatedEvent.event.raw;\n if (raw.propertyName === slideConfig.dimension.property) {\n disableTransitions(component, slideConfig);\n if (slideState.isExpanded()) {\n remove$7(component.element, slideConfig.dimension.property);\n }\n const notify = slideState.isExpanded() ? slideConfig.onGrown : slideConfig.onShrunk;\n notify(component);\n }\n })]);\n\n var ActiveSliding = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit,\n events: events$5\n });\n\n var SlidingSchema = [\n required$1('closedClass'),\n required$1('openClass'),\n required$1('shrinkingClass'),\n required$1('growingClass'),\n option$3('getAnimationRoot'),\n onHandler('onShrunk'),\n onHandler('onStartShrink'),\n onHandler('onGrown'),\n onHandler('onStartGrow'),\n defaulted('expanded', false),\n requiredOf('dimension', choose$1('property', {\n width: [\n output$1('property', 'width'),\n output$1('getDimension', elem => get$d(elem) + 'px')\n ],\n height: [\n output$1('property', 'height'),\n output$1('getDimension', elem => get$e(elem) + 'px')\n ]\n }))\n ];\n\n const init$8 = spec => {\n const state = Cell(spec.expanded);\n const readState = () => 'expanded: ' + state.get();\n return nu$7({\n isExpanded: () => state.get() === true,\n isCollapsed: () => state.get() === false,\n setCollapsed: curry(state.set, false),\n setExpanded: curry(state.set, true),\n readState\n });\n };\n\n var SlidingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$8\n });\n\n const Sliding = create$4({\n fields: SlidingSchema,\n name: 'sliding',\n active: ActiveSliding,\n apis: SlidingApis,\n state: SlidingState\n });\n\n const getMenuButtonApi = component => ({\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state),\n setActive: state => {\n const elm = component.element;\n if (state) {\n add$2(elm, 'tox-tbtn--enabled');\n set$9(elm, 'aria-pressed', true);\n } else {\n remove$3(elm, 'tox-tbtn--enabled');\n remove$8(elm, 'aria-pressed');\n }\n },\n isActive: () => has(component.element, 'tox-tbtn--enabled'),\n setText: text => {\n emitWith(component, updateMenuText, { text });\n },\n setIcon: icon => emitWith(component, updateMenuIcon, { icon })\n });\n const renderMenuButton = (spec, prefix, backstage, role, tabstopping = true, btnName) => {\n return renderCommonDropdown({\n text: spec.text,\n icon: spec.icon,\n tooltip: spec.tooltip,\n ariaLabel: spec.tooltip,\n searchable: spec.search.isSome(),\n role,\n fetch: (dropdownComp, callback) => {\n const fetchContext = { pattern: spec.search.isSome() ? getSearchPattern(dropdownComp) : '' };\n spec.fetch(items => {\n callback(build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n isHorizontalMenu: false,\n search: spec.search\n }));\n }, fetchContext, getMenuButtonApi(dropdownComp));\n },\n onSetup: spec.onSetup,\n getApi: getMenuButtonApi,\n columns: 1,\n presets: 'normal',\n classes: [],\n dropdownBehaviours: [...tabstopping ? [Tabstopping.config({})] : []],\n context: spec.context\n }, prefix, backstage.shared, btnName);\n };\n const getFetch = (items, getButton, backstage) => {\n const getMenuItemAction = item => api => {\n const newValue = !api.isActive();\n api.setActive(newValue);\n item.storage.set(newValue);\n backstage.shared.getSink().each(sink => {\n getButton().getOpt(sink).each(orig => {\n focus$3(orig.element);\n emitWith(orig, formActionEvent, {\n name: item.name,\n value: item.storage.get()\n });\n });\n });\n };\n const getMenuItemSetup = item => api => {\n api.setActive(item.storage.get());\n };\n return success => {\n success(map$2(items, item => {\n const text = item.text.fold(() => ({}), text => ({ text }));\n return {\n type: item.type,\n active: false,\n ...text,\n context: item.context,\n onAction: getMenuItemAction(item),\n onSetup: getMenuItemSetup(item)\n };\n }));\n };\n };\n\n const renderLabel = text => ({\n dom: {\n tag: 'span',\n classes: ['tox-tree__label'],\n attributes: { 'aria-label': text }\n },\n components: [text$2(text)]\n });\n const renderCustomStateIcon = (container, components, backstage) => {\n container.customStateIcon.each(icon => components.push(renderIcon(icon, backstage.shared.providers.icons, container.customStateIconTooltip.fold(() => [], tooltip => [Tooltipping.config(backstage.shared.providers.tooltips.getConfig({ tooltipText: tooltip }))]), ['tox-icon-custom-state'])));\n };\n const leafLabelEventsId = generate$6('leaf-label-event-id');\n const renderLeafLabel = ({leaf, onLeafAction, visible, treeId, selectedId, backstage}) => {\n const internalMenuButton = leaf.menu.map(btn => renderMenuButton(btn, 'tox-mbtn', backstage, Optional.none(), visible));\n const components = [renderLabel(leaf.title)];\n renderCustomStateIcon(leaf, components, backstage);\n internalMenuButton.each(btn => components.push(btn));\n return Button.sketch({\n dom: {\n tag: 'div',\n classes: [\n 'tox-tree--leaf__label',\n 'tox-trbtn'\n ].concat(visible ? ['tox-tree--leaf__label--visible'] : [])\n },\n components,\n role: 'treeitem',\n action: button => {\n onLeafAction(leaf.id);\n button.getSystem().broadcastOn([`update-active-item-${ treeId }`], { value: leaf.id });\n },\n eventOrder: {\n [keydown()]: [\n leafLabelEventsId,\n 'keying'\n ]\n },\n buttonBehaviours: derive$1([\n ...visible ? [Tabstopping.config({})] : [],\n Toggling.config({\n toggleClass: 'tox-trbtn--enabled',\n toggleOnExecute: false,\n aria: { mode: 'selected' }\n }),\n Receiving.config({\n channels: {\n [`update-active-item-${ treeId }`]: {\n onReceive: (comp, message) => {\n (message.value === leaf.id ? Toggling.on : Toggling.off)(comp);\n }\n }\n }\n }),\n config(leafLabelEventsId, [\n runOnAttached((comp, _se) => {\n selectedId.each(id => {\n const toggle = id === leaf.id ? Toggling.on : Toggling.off;\n toggle(comp);\n });\n }),\n run$1(keydown(), (comp, se) => {\n const isLeftArrowKey = se.event.raw.code === 'ArrowLeft';\n const isRightArrowKey = se.event.raw.code === 'ArrowRight';\n if (isLeftArrowKey) {\n ancestor(comp.element, '.tox-tree--directory').each(dirElement => {\n comp.getSystem().getByDom(dirElement).each(dirComp => {\n child(dirElement, '.tox-tree--directory__label').each(dirLabelElement => {\n dirComp.getSystem().getByDom(dirLabelElement).each(Focusing.focus);\n });\n });\n });\n se.stop();\n } else if (isRightArrowKey) {\n se.stop();\n }\n })\n ])\n ])\n });\n };\n const renderIcon = (iconName, iconsProvider, behaviours, extraClasses, extraAttributes) => render$3(iconName, {\n tag: 'span',\n classes: [\n 'tox-tree__icon-wrap',\n 'tox-icon'\n ].concat(extraClasses || []),\n behaviours,\n attributes: extraAttributes\n }, iconsProvider);\n const renderIconFromPack = (iconName, iconsProvider) => renderIcon(iconName, iconsProvider, []);\n const directoryLabelEventsId = generate$6('directory-label-event-id');\n const renderDirectoryLabel = ({directory, visible, noChildren, backstage}) => {\n const internalMenuButton = directory.menu.map(btn => renderMenuButton(btn, 'tox-mbtn', backstage, Optional.none()));\n const components = [\n {\n dom: {\n tag: 'div',\n classes: ['tox-chevron']\n },\n components: [renderIconFromPack('chevron-right', backstage.shared.providers.icons)]\n },\n renderLabel(directory.title)\n ];\n renderCustomStateIcon(directory, components, backstage);\n internalMenuButton.each(btn => {\n components.push(btn);\n });\n const toggleExpandChildren = button => {\n ancestor(button.element, '.tox-tree--directory').each(directoryEle => {\n button.getSystem().getByDom(directoryEle).each(directoryComp => {\n const willExpand = !Toggling.isOn(directoryComp);\n Toggling.toggle(directoryComp);\n emitWith(button, 'expand-tree-node', {\n expanded: willExpand,\n node: directory.id\n });\n });\n });\n };\n return Button.sketch({\n dom: {\n tag: 'div',\n classes: [\n 'tox-tree--directory__label',\n 'tox-trbtn'\n ].concat(visible ? ['tox-tree--directory__label--visible'] : [])\n },\n components,\n action: toggleExpandChildren,\n eventOrder: {\n [keydown()]: [\n directoryLabelEventsId,\n 'keying'\n ]\n },\n buttonBehaviours: derive$1([\n ...visible ? [Tabstopping.config({})] : [],\n config(directoryLabelEventsId, [run$1(keydown(), (comp, se) => {\n const isRightArrowKey = se.event.raw.code === 'ArrowRight';\n const isLeftArrowKey = se.event.raw.code === 'ArrowLeft';\n if (isRightArrowKey && noChildren) {\n se.stop();\n }\n if (isRightArrowKey || isLeftArrowKey) {\n ancestor(comp.element, '.tox-tree--directory').each(directoryEle => {\n comp.getSystem().getByDom(directoryEle).each(directoryComp => {\n if (!Toggling.isOn(directoryComp) && isRightArrowKey || Toggling.isOn(directoryComp) && isLeftArrowKey) {\n toggleExpandChildren(comp);\n se.stop();\n } else if (isLeftArrowKey && !Toggling.isOn(directoryComp)) {\n ancestor(directoryComp.element, '.tox-tree--directory').each(parentDirElement => {\n child(parentDirElement, '.tox-tree--directory__label').each(parentDirLabelElement => {\n directoryComp.getSystem().getByDom(parentDirLabelElement).each(Focusing.focus);\n });\n });\n se.stop();\n }\n });\n });\n }\n })])\n ])\n });\n };\n const renderDirectoryChildren = ({children, onLeafAction, visible, treeId, expandedIds, selectedId, backstage}) => {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-tree--directory__children']\n },\n components: children.map(item => {\n return item.type === 'leaf' ? renderLeafLabel({\n leaf: item,\n selectedId,\n onLeafAction,\n visible,\n treeId,\n backstage\n }) : renderDirectory({\n directory: item,\n expandedIds,\n selectedId,\n onLeafAction,\n labelTabstopping: visible,\n treeId,\n backstage\n });\n }),\n behaviours: derive$1([\n Sliding.config({\n dimension: { property: 'height' },\n closedClass: 'tox-tree--directory__children--closed',\n openClass: 'tox-tree--directory__children--open',\n growingClass: 'tox-tree--directory__children--growing',\n shrinkingClass: 'tox-tree--directory__children--shrinking',\n expanded: visible\n }),\n Replacing.config({})\n ])\n };\n };\n const directoryEventsId = generate$6('directory-event-id');\n const renderDirectory = ({directory, onLeafAction, labelTabstopping, treeId, backstage, expandedIds, selectedId}) => {\n const {children} = directory;\n const expandedIdsCell = Cell(expandedIds);\n const computedChildrenComponents = visible => children.map(item => {\n return item.type === 'leaf' ? renderLeafLabel({\n leaf: item,\n selectedId,\n onLeafAction,\n visible,\n treeId,\n backstage\n }) : renderDirectory({\n directory: item,\n expandedIds: expandedIdsCell.get(),\n selectedId,\n onLeafAction,\n labelTabstopping: visible,\n treeId,\n backstage\n });\n });\n const childrenVisible = expandedIds.includes(directory.id);\n return {\n dom: {\n tag: 'div',\n classes: ['tox-tree--directory'],\n attributes: { role: 'treeitem' }\n },\n components: [\n renderDirectoryLabel({\n directory,\n visible: labelTabstopping,\n noChildren: directory.children.length === 0,\n backstage\n }),\n renderDirectoryChildren({\n children,\n expandedIds,\n selectedId,\n onLeafAction,\n visible: childrenVisible,\n treeId,\n backstage\n })\n ],\n behaviours: derive$1([\n config(directoryEventsId, [\n runOnAttached((comp, _se) => {\n Toggling.set(comp, childrenVisible);\n }),\n run$1('expand-tree-node', (_cmp, se) => {\n const {expanded, node} = se.event;\n expandedIdsCell.set(expanded ? [\n ...expandedIdsCell.get(),\n node\n ] : expandedIdsCell.get().filter(id => id !== node));\n })\n ]),\n Toggling.config({\n ...directory.children.length > 0 ? { aria: { mode: 'expanded' } } : {},\n toggleClass: 'tox-tree--directory--expanded',\n onToggled: (comp, childrenVisible) => {\n const childrenComp = comp.components()[1];\n const newChildren = computedChildrenComponents(childrenVisible);\n if (childrenVisible) {\n Sliding.grow(childrenComp);\n } else {\n Sliding.shrink(childrenComp);\n }\n Replacing.set(childrenComp, newChildren);\n }\n })\n ])\n };\n };\n const treeEventsId = generate$6('tree-event-id');\n const renderTree = (spec, backstage) => {\n const onLeafAction = spec.onLeafAction.getOr(noop);\n const onToggleExpand = spec.onToggleExpand.getOr(noop);\n const defaultExpandedIds = spec.defaultExpandedIds;\n const expandedIds = Cell(defaultExpandedIds);\n const selectedIdCell = Cell(spec.defaultSelectedId);\n const treeId = generate$6('tree-id');\n const children = (selectedId, expandedIds) => spec.items.map(item => {\n return item.type === 'leaf' ? renderLeafLabel({\n leaf: item,\n selectedId,\n onLeafAction,\n visible: true,\n treeId,\n backstage\n }) : renderDirectory({\n directory: item,\n selectedId,\n onLeafAction,\n expandedIds,\n labelTabstopping: true,\n treeId,\n backstage\n });\n });\n return {\n dom: {\n tag: 'div',\n classes: ['tox-tree'],\n attributes: { role: 'tree' }\n },\n components: children(selectedIdCell.get(), expandedIds.get()),\n behaviours: derive$1([\n Keying.config({\n mode: 'flow',\n selector: '.tox-tree--leaf__label--visible, .tox-tree--directory__label--visible',\n cycles: false\n }),\n config(treeEventsId, [run$1('expand-tree-node', (_cmp, se) => {\n const {expanded, node} = se.event;\n expandedIds.set(expanded ? [\n ...expandedIds.get(),\n node\n ] : expandedIds.get().filter(id => id !== node));\n onToggleExpand(expandedIds.get(), {\n expanded,\n node\n });\n })]),\n Receiving.config({\n channels: {\n [`update-active-item-${ treeId }`]: {\n onReceive: (comp, message) => {\n selectedIdCell.set(Optional.some(message.value));\n Replacing.set(comp, children(Optional.some(message.value), expandedIds.get()));\n }\n }\n }\n }),\n Replacing.config({})\n ])\n };\n };\n\n const events$4 = (streamConfig, streamState) => {\n const streams = streamConfig.stream.streams;\n const processor = streams.setup(streamConfig, streamState);\n return derive$2([\n run$1(streamConfig.event, processor),\n runOnDetached(() => streamState.cancel())\n ].concat(streamConfig.cancelEvent.map(e => [run$1(e, () => streamState.cancel())]).getOr([])));\n };\n\n var ActiveStreaming = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$4\n });\n\n const throttle = _config => {\n const state = Cell(null);\n const readState = () => ({ timer: state.get() !== null ? 'set' : 'unset' });\n const setTimer = t => {\n state.set(t);\n };\n const cancel = () => {\n const t = state.get();\n if (t !== null) {\n t.cancel();\n }\n };\n return nu$7({\n readState,\n setTimer,\n cancel\n });\n };\n const init$7 = spec => spec.stream.streams.state(spec);\n\n var StreamingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n throttle: throttle,\n init: init$7\n });\n\n const setup$c = (streamInfo, streamState) => {\n const sInfo = streamInfo.stream;\n const throttler = last(streamInfo.onStream, sInfo.delay);\n streamState.setTimer(throttler);\n return (component, simulatedEvent) => {\n throttler.throttle(component, simulatedEvent);\n if (sInfo.stopEvent) {\n simulatedEvent.stop();\n }\n };\n };\n var StreamingSchema = [\n requiredOf('stream', choose$1('mode', {\n throttle: [\n required$1('delay'),\n defaulted('stopEvent', true),\n output$1('streams', {\n setup: setup$c,\n state: throttle\n })\n ]\n })),\n defaulted('event', 'input'),\n option$3('cancelEvent'),\n onStrictHandler('onStream')\n ];\n\n const Streaming = create$4({\n fields: StreamingSchema,\n name: 'streaming',\n active: ActiveStreaming,\n state: StreamingState\n });\n\n const setValueFromItem = (model, input, item) => {\n const itemData = Representing.getValue(item);\n Representing.setValue(input, itemData);\n setCursorAtEnd(input);\n };\n const setSelectionOn = (input, f) => {\n const el = input.element;\n const value = get$7(el);\n const node = el.dom;\n if (get$g(el, 'type') !== 'number') {\n f(node, value);\n }\n };\n const setCursorAtEnd = input => {\n setSelectionOn(input, (node, value) => node.setSelectionRange(value.length, value.length));\n };\n const setSelectionToEnd = (input, startOffset) => {\n setSelectionOn(input, (node, value) => node.setSelectionRange(startOffset, value.length));\n };\n const attemptSelectOver = (model, input, item) => {\n if (!model.selectsOver) {\n return Optional.none();\n } else {\n const currentValue = Representing.getValue(input);\n const inputDisplay = model.getDisplayText(currentValue);\n const itemValue = Representing.getValue(item);\n const itemDisplay = model.getDisplayText(itemValue);\n return itemDisplay.indexOf(inputDisplay) === 0 ? Optional.some(() => {\n setValueFromItem(model, input, item);\n setSelectionToEnd(input, inputDisplay.length);\n }) : Optional.none();\n }\n };\n\n const itemExecute = constant$1('alloy.typeahead.itemexecute');\n\n const make$3 = (detail, components, spec, externals) => {\n const navigateList = (comp, simulatedEvent, highlighter) => {\n detail.previewing.set(false);\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n if (Sandboxing.isOpen(sandbox)) {\n Composing.getCurrent(sandbox).each(menu => {\n Highlighting.getHighlighted(menu).fold(() => {\n highlighter(menu);\n }, () => {\n dispatchEvent(sandbox, menu.element, 'keydown', simulatedEvent);\n });\n });\n } else {\n const onOpenSync = sandbox => {\n Composing.getCurrent(sandbox).each(highlighter);\n };\n open(detail, mapFetch(comp), comp, sandbox, externals, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n }\n };\n const focusBehaviours$1 = focusBehaviours(detail);\n const mapFetch = comp => tdata => tdata.map(data => {\n const menus = values(data.menus);\n const items = bind$3(menus, menu => filter$2(menu.items, item => item.type === 'item'));\n const repState = Representing.getState(comp);\n repState.update(map$2(items, item => item.data));\n return data;\n });\n const getActiveMenu = sandboxComp => Composing.getCurrent(sandboxComp);\n const typeaheadCustomEvents = 'typeaheadevents';\n const behaviours = [\n Focusing.config({}),\n Representing.config({\n onSetValue: detail.onSetValue,\n store: {\n mode: 'dataset',\n getDataKey: comp => get$7(comp.element),\n getFallbackEntry: itemString => ({\n value: itemString,\n meta: {}\n }),\n setValue: (comp, data) => {\n set$5(comp.element, detail.model.getDisplayText(data));\n },\n ...detail.initialData.map(d => wrap$1('initialValue', d)).getOr({})\n }\n }),\n Streaming.config({\n stream: {\n mode: 'throttle',\n delay: detail.responseTime,\n stopEvent: false\n },\n onStream: (component, _simulatedEvent) => {\n const sandbox = Coupling.getCoupled(component, 'sandbox');\n const focusInInput = Focusing.isFocused(component);\n if (focusInInput) {\n if (get$7(component.element).length >= detail.minChars) {\n const previousValue = getActiveMenu(sandbox).bind(activeMenu => Highlighting.getHighlighted(activeMenu).map(Representing.getValue));\n detail.previewing.set(true);\n const onOpenSync = _sandbox => {\n getActiveMenu(sandbox).each(activeMenu => {\n previousValue.fold(() => {\n if (detail.model.selectsOver) {\n Highlighting.highlightFirst(activeMenu);\n }\n }, pv => {\n Highlighting.highlightBy(activeMenu, item => {\n const itemData = Representing.getValue(item);\n return itemData.value === pv.value;\n });\n Highlighting.getHighlighted(activeMenu).orThunk(() => {\n Highlighting.highlightFirst(activeMenu);\n return Optional.none();\n });\n });\n });\n };\n open(detail, mapFetch(component), component, sandbox, externals, onOpenSync, HighlightOnOpen.HighlightJustMenu).get(noop);\n }\n }\n },\n cancelEvent: typeaheadCancel()\n }),\n Keying.config({\n mode: 'special',\n onDown: (comp, simulatedEvent) => {\n navigateList(comp, simulatedEvent, Highlighting.highlightFirst);\n return Optional.some(true);\n },\n onEscape: comp => {\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n if (Sandboxing.isOpen(sandbox)) {\n Sandboxing.close(sandbox);\n return Optional.some(true);\n }\n return Optional.none();\n },\n onUp: (comp, simulatedEvent) => {\n navigateList(comp, simulatedEvent, Highlighting.highlightLast);\n return Optional.some(true);\n },\n onEnter: comp => {\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n const sandboxIsOpen = Sandboxing.isOpen(sandbox);\n if (sandboxIsOpen && !detail.previewing.get()) {\n return getActiveMenu(sandbox).bind(activeMenu => Highlighting.getHighlighted(activeMenu)).map(item => {\n emitWith(comp, itemExecute(), { item });\n return true;\n });\n } else {\n const currentValue = Representing.getValue(comp);\n emit(comp, typeaheadCancel());\n detail.onExecute(sandbox, comp, currentValue);\n if (sandboxIsOpen) {\n Sandboxing.close(sandbox);\n }\n return Optional.some(true);\n }\n }\n }),\n Toggling.config({\n toggleClass: detail.markers.openClass,\n aria: { mode: 'expanded' }\n }),\n Coupling.config({\n others: {\n sandbox: hotspot => {\n return makeSandbox$1(detail, hotspot, {\n onOpen: () => Toggling.on(hotspot),\n onClose: () => {\n detail.lazyTypeaheadComp.get().each(input => remove$8(input.element, 'aria-activedescendant'));\n Toggling.off(hotspot);\n }\n });\n }\n }\n }),\n config(typeaheadCustomEvents, [\n runOnAttached(typeaheadComp => {\n detail.lazyTypeaheadComp.set(Optional.some(typeaheadComp));\n }),\n runOnDetached(_typeaheadComp => {\n detail.lazyTypeaheadComp.set(Optional.none());\n }),\n runOnExecute$1(comp => {\n const onOpenSync = noop;\n togglePopup(detail, mapFetch(comp), comp, externals, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n }),\n run$1(itemExecute(), (comp, se) => {\n const sandbox = Coupling.getCoupled(comp, 'sandbox');\n setValueFromItem(detail.model, comp, se.event.item);\n emit(comp, typeaheadCancel());\n detail.onItemExecute(comp, sandbox, se.event.item, Representing.getValue(comp));\n Sandboxing.close(sandbox);\n setCursorAtEnd(comp);\n })\n ].concat(detail.dismissOnBlur ? [run$1(postBlur(), typeahead => {\n const sandbox = Coupling.getCoupled(typeahead, 'sandbox');\n if (search(sandbox.element).isNone()) {\n Sandboxing.close(sandbox);\n }\n })] : []))\n ];\n const eventOrder = {\n [detachedFromDom()]: [\n Representing.name(),\n Streaming.name(),\n typeaheadCustomEvents\n ],\n ...detail.eventOrder\n };\n return {\n uid: detail.uid,\n dom: dom(deepMerge(detail, {\n inputAttributes: {\n 'role': 'combobox',\n 'aria-autocomplete': 'list',\n 'aria-haspopup': 'true'\n }\n })),\n behaviours: {\n ...focusBehaviours$1,\n ...augment(detail.typeaheadBehaviours, behaviours)\n },\n eventOrder\n };\n };\n\n const schema$g = constant$1([\n option$3('lazySink'),\n required$1('fetch'),\n defaulted('minChars', 5),\n defaulted('responseTime', 1000),\n onHandler('onOpen'),\n defaulted('getHotspot', Optional.some),\n defaulted('getAnchorOverrides', constant$1({})),\n defaulted('layouts', Optional.none()),\n defaulted('eventOrder', {}),\n defaultedObjOf('model', {}, [\n defaulted('getDisplayText', itemData => itemData.meta !== undefined && itemData.meta.text !== undefined ? itemData.meta.text : itemData.value),\n defaulted('selectsOver', true),\n defaulted('populateFromBrowse', true)\n ]),\n onHandler('onSetValue'),\n onKeyboardHandler('onExecute'),\n onHandler('onItemExecute'),\n defaulted('inputClasses', []),\n defaulted('inputAttributes', {}),\n defaulted('inputStyles', {}),\n defaulted('matchWidth', true),\n defaulted('useMinWidth', false),\n defaulted('dismissOnBlur', true),\n markers$1(['openClass']),\n option$3('initialData'),\n option$3('listRole'),\n field('typeaheadBehaviours', [\n Focusing,\n Representing,\n Streaming,\n Keying,\n Toggling,\n Coupling\n ]),\n customField('lazyTypeaheadComp', () => Cell(Optional.none)),\n customField('previewing', () => Cell(true))\n ].concat(schema$l()).concat(sandboxFields()));\n const parts$b = constant$1([external({\n schema: [tieredMenuMarkers()],\n name: 'menu',\n overrides: detail => {\n return {\n fakeFocus: true,\n onHighlightItem: (_tmenu, menu, item) => {\n if (!detail.previewing.get()) {\n detail.lazyTypeaheadComp.get().each(input => {\n if (detail.model.populateFromBrowse) {\n setValueFromItem(detail.model, input, item);\n }\n getOpt(item.element, 'id').each(id => set$9(input.element, 'aria-activedescendant', id));\n });\n } else {\n detail.lazyTypeaheadComp.get().each(input => {\n attemptSelectOver(detail.model, input, item).fold(() => {\n if (detail.model.selectsOver) {\n Highlighting.dehighlight(menu, item);\n detail.previewing.set(true);\n } else {\n detail.previewing.set(false);\n }\n }, selectOverTextInInput => {\n selectOverTextInInput();\n detail.previewing.set(false);\n });\n });\n }\n },\n onExecute: (_menu, item) => {\n return detail.lazyTypeaheadComp.get().map(typeahead => {\n emitWith(typeahead, itemExecute(), { item });\n return true;\n });\n },\n onHover: (menu, item) => {\n detail.previewing.set(false);\n detail.lazyTypeaheadComp.get().each(input => {\n if (detail.model.populateFromBrowse) {\n setValueFromItem(detail.model, input, item);\n }\n });\n }\n };\n }\n })]);\n\n const Typeahead = composite({\n name: 'Typeahead',\n configFields: schema$g(),\n partFields: parts$b(),\n factory: make$3\n });\n\n const wrap = delegate => {\n const toCached = () => {\n return wrap(delegate.toCached());\n };\n const bindFuture = f => {\n return wrap(delegate.bind(resA => resA.fold(err => Future.pure(Result.error(err)), a => f(a))));\n };\n const bindResult = f => {\n return wrap(delegate.map(resA => resA.bind(f)));\n };\n const mapResult = f => {\n return wrap(delegate.map(resA => resA.map(f)));\n };\n const mapError = f => {\n return wrap(delegate.map(resA => resA.mapError(f)));\n };\n const foldResult = (whenError, whenValue) => {\n return delegate.map(res => res.fold(whenError, whenValue));\n };\n const withTimeout = (timeout, errorThunk) => {\n return wrap(Future.nu(callback => {\n let timedOut = false;\n const timer = setTimeout(() => {\n timedOut = true;\n callback(Result.error(errorThunk()));\n }, timeout);\n delegate.get(result => {\n if (!timedOut) {\n clearTimeout(timer);\n callback(result);\n }\n });\n }));\n };\n return {\n ...delegate,\n toCached,\n bindFuture,\n bindResult,\n mapResult,\n mapError,\n foldResult,\n withTimeout\n };\n };\n const nu$1 = worker => {\n return wrap(Future.nu(worker));\n };\n const value = value => {\n return wrap(Future.pure(Result.value(value)));\n };\n const error = error => {\n return wrap(Future.pure(Result.error(error)));\n };\n const fromResult = result => {\n return wrap(Future.pure(result));\n };\n const fromFuture = future => {\n return wrap(future.map(Result.value));\n };\n const fromPromise = promise => {\n return nu$1(completer => {\n promise.then(value => {\n completer(Result.value(value));\n }, error => {\n completer(Result.error(error));\n });\n });\n };\n const FutureResult = {\n nu: nu$1,\n wrap,\n pure: value,\n value,\n error,\n fromResult,\n fromFuture,\n fromPromise\n };\n\n const renderCommonSpec = (spec, actionOpt, extraBehaviours = [], dom, components, tooltip, providersBackstage) => {\n const action = actionOpt.fold(() => ({}), action => ({ action }));\n const common = {\n buttonBehaviours: derive$1([\n DisablingConfigs.item(() => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)),\n Tabstopping.config({}),\n ...tooltip.map(t => Tooltipping.config(providersBackstage.tooltips.getConfig({ tooltipText: providersBackstage.translate(t) }))).toArray(),\n config('button press', [preventDefault('click')])\n ].concat(extraBehaviours)),\n eventOrder: {\n click: [\n 'button press',\n 'alloy.base.behaviour'\n ],\n mousedown: [\n 'button press',\n 'alloy.base.behaviour'\n ]\n },\n ...action\n };\n const domFinal = deepMerge(common, { dom });\n return deepMerge(domFinal, { components });\n };\n const renderIconButtonSpec = (spec, action, providersBackstage, extraBehaviours = [], btnName) => {\n const tooltipAttributes = spec.tooltip.map(tooltip => ({ 'aria-label': providersBackstage.translate(tooltip) })).getOr({});\n const dom = {\n tag: 'button',\n classes: ['tox-tbtn'],\n attributes: {\n ...tooltipAttributes,\n 'data-mce-name': btnName\n }\n };\n const icon = spec.icon.map(iconName => renderIconFromPack$1(iconName, providersBackstage.icons));\n const components = componentRenderPipeline([icon]);\n return renderCommonSpec(spec, action, extraBehaviours, dom, components, spec.tooltip, providersBackstage);\n };\n const calculateClassesFromButtonType = buttonType => {\n switch (buttonType) {\n case 'primary':\n return ['tox-button'];\n case 'toolbar':\n return ['tox-tbtn'];\n case 'secondary':\n default:\n return [\n 'tox-button',\n 'tox-button--secondary'\n ];\n }\n };\n const renderButtonSpec = (spec, action, providersBackstage, extraBehaviours = [], extraClasses = []) => {\n const translatedText = providersBackstage.translate(spec.text);\n const icon = spec.icon.map(iconName => renderIconFromPack$1(iconName, providersBackstage.icons));\n const components = [icon.getOrThunk(() => text$2(translatedText))];\n const buttonType = spec.buttonType.getOr(!spec.primary && !spec.borderless ? 'secondary' : 'primary');\n const baseClasses = calculateClassesFromButtonType(buttonType);\n const classes = [\n ...baseClasses,\n ...icon.isSome() ? ['tox-button--icon'] : [],\n ...spec.borderless ? ['tox-button--naked'] : [],\n ...extraClasses\n ];\n const dom = {\n tag: 'button',\n classes,\n attributes: {\n 'aria-label': translatedText,\n 'data-mce-name': spec.text\n }\n };\n const optTooltip = spec.icon.map(constant$1(translatedText));\n return renderCommonSpec(spec, action, extraBehaviours, dom, components, optTooltip, providersBackstage);\n };\n const renderButton$1 = (spec, action, providersBackstage, extraBehaviours = [], extraClasses = []) => {\n const buttonSpec = renderButtonSpec(spec, Optional.some(action), providersBackstage, extraBehaviours, extraClasses);\n return Button.sketch(buttonSpec);\n };\n const getAction = (name, buttonType) => comp => {\n if (buttonType === 'custom') {\n emitWith(comp, formActionEvent, {\n name,\n value: {}\n });\n } else if (buttonType === 'submit') {\n emit(comp, formSubmitEvent);\n } else if (buttonType === 'cancel') {\n emit(comp, formCancelEvent);\n } else {\n console.error('Unknown button type: ', buttonType);\n }\n };\n const isMenuFooterButtonSpec = (spec, buttonType) => buttonType === 'menu';\n const isNormalFooterButtonSpec = (spec, buttonType) => buttonType === 'custom' || buttonType === 'cancel' || buttonType === 'submit';\n const isToggleButtonSpec = (spec, buttonType) => buttonType === 'togglebutton';\n const renderToggleButton = (spec, providers, btnName) => {\n var _a, _b;\n const optMemIcon = spec.icon.map(memIcon => renderReplaceableIconFromPack(memIcon, providers.icons)).map(record);\n const action = comp => {\n emitWith(comp, formActionEvent, {\n name: spec.name,\n value: {\n setIcon: newIcon => {\n optMemIcon.map(memIcon => memIcon.getOpt(comp).each(displayIcon => {\n Replacing.set(displayIcon, [renderReplaceableIconFromPack(newIcon, providers.icons)]);\n }));\n }\n }\n });\n };\n const buttonType = spec.buttonType.getOr(!spec.primary ? 'secondary' : 'primary');\n const buttonSpec = {\n ...spec,\n name: (_a = spec.name) !== null && _a !== void 0 ? _a : '',\n primary: buttonType === 'primary',\n tooltip: spec.tooltip,\n enabled: (_b = spec.enabled) !== null && _b !== void 0 ? _b : false,\n borderless: false\n };\n const tooltipAttributes = buttonSpec.tooltip.or(spec.text).map(tooltip => ({ 'aria-label': providers.translate(tooltip) })).getOr({});\n const buttonTypeClasses = calculateClassesFromButtonType(buttonType !== null && buttonType !== void 0 ? buttonType : 'secondary');\n const showIconAndText = spec.icon.isSome() && spec.text.isSome();\n const dom = {\n tag: 'button',\n classes: [\n ...buttonTypeClasses.concat(spec.icon.isSome() ? ['tox-button--icon'] : []),\n ...spec.active ? ['tox-button--enabled'] : [],\n ...showIconAndText ? ['tox-button--icon-and-text'] : []\n ],\n attributes: {\n ...tooltipAttributes,\n ...isNonNullable(btnName) ? { 'data-mce-name': btnName } : {}\n }\n };\n const extraBehaviours = [];\n const translatedText = providers.translate(spec.text.getOr(''));\n const translatedTextComponed = text$2(translatedText);\n const iconComp = componentRenderPipeline([optMemIcon.map(memIcon => memIcon.asSpec())]);\n const components = [\n ...iconComp,\n ...spec.text.isSome() ? [translatedTextComponed] : []\n ];\n const iconButtonSpec = renderCommonSpec(buttonSpec, Optional.some(action), extraBehaviours, dom, components, spec.tooltip, providers);\n return Button.sketch(iconButtonSpec);\n };\n const renderFooterButton = (spec, buttonType, backstage) => {\n if (isMenuFooterButtonSpec(spec, buttonType)) {\n const getButton = () => memButton;\n const menuButtonSpec = spec;\n const fixedSpec = {\n ...spec,\n type: 'menubutton',\n search: Optional.none(),\n onSetup: api => {\n api.setEnabled(spec.enabled);\n return noop;\n },\n fetch: getFetch(menuButtonSpec.items, getButton, backstage)\n };\n const memButton = record(renderMenuButton(fixedSpec, 'tox-tbtn', backstage, Optional.none(), true, spec.text.or(spec.tooltip).getOrUndefined()));\n return memButton.asSpec();\n } else if (isNormalFooterButtonSpec(spec, buttonType)) {\n const action = getAction(spec.name, buttonType);\n const buttonSpec = {\n ...spec,\n context: buttonType === 'cancel' ? 'any' : spec.context,\n borderless: false\n };\n return renderButton$1(buttonSpec, action, backstage.shared.providers, []);\n } else if (isToggleButtonSpec(spec, buttonType)) {\n return renderToggleButton(spec, backstage.shared.providers, spec.text.or(spec.tooltip).getOrUndefined());\n } else {\n console.error('Unknown footer button type: ', buttonType);\n throw new Error('Unknown footer button type');\n }\n };\n const renderDialogButton = (spec, providersBackstage) => {\n const action = getAction(spec.name, 'custom');\n return renderFormField(Optional.none(), FormField.parts.field({\n factory: Button,\n ...renderButtonSpec(spec, Optional.some(action), providersBackstage, [\n memory(''),\n ComposingConfigs.self()\n ])\n }));\n };\n\n const separator$1 = { type: 'separator' };\n const toMenuItem = target => ({\n type: 'menuitem',\n value: target.url,\n text: target.title,\n meta: { attach: target.attach },\n onAction: noop\n });\n const staticMenuItem = (title, url) => ({\n type: 'menuitem',\n value: url,\n text: title,\n meta: { attach: undefined },\n onAction: noop\n });\n const toMenuItems = targets => map$2(targets, toMenuItem);\n const filterLinkTargets = (type, targets) => filter$2(targets, target => target.type === type);\n const filteredTargets = (type, targets) => toMenuItems(filterLinkTargets(type, targets));\n const headerTargets = linkInfo => filteredTargets('header', linkInfo.targets);\n const anchorTargets = linkInfo => filteredTargets('anchor', linkInfo.targets);\n const anchorTargetTop = linkInfo => Optional.from(linkInfo.anchorTop).map(url => staticMenuItem('', url)).toArray();\n const anchorTargetBottom = linkInfo => Optional.from(linkInfo.anchorBottom).map(url => staticMenuItem('', url)).toArray();\n const historyTargets = history => map$2(history, url => staticMenuItem(url, url));\n const joinMenuLists = items => {\n return foldl(items, (a, b) => {\n const bothEmpty = a.length === 0 || b.length === 0;\n return bothEmpty ? a.concat(b) : a.concat(separator$1, b);\n }, []);\n };\n const filterByQuery = (term, menuItems) => {\n const lowerCaseTerm = term.toLowerCase();\n return filter$2(menuItems, item => {\n var _a;\n const text = item.meta !== undefined && item.meta.text !== undefined ? item.meta.text : item.text;\n const value = (_a = item.value) !== null && _a !== void 0 ? _a : '';\n return contains$1(text.toLowerCase(), lowerCaseTerm) || contains$1(value.toLowerCase(), lowerCaseTerm);\n });\n };\n\n const getItems = (fileType, input, urlBackstage) => {\n var _a, _b;\n const urlInputValue = Representing.getValue(input);\n const term = (_b = (_a = urlInputValue === null || urlInputValue === void 0 ? void 0 : urlInputValue.meta) === null || _a === void 0 ? void 0 : _a.text) !== null && _b !== void 0 ? _b : urlInputValue.value;\n const info = urlBackstage.getLinkInformation();\n return info.fold(() => [], linkInfo => {\n const history = filterByQuery(term, historyTargets(urlBackstage.getHistory(fileType)));\n return fileType === 'file' ? joinMenuLists([\n history,\n filterByQuery(term, headerTargets(linkInfo)),\n filterByQuery(term, flatten([\n anchorTargetTop(linkInfo),\n anchorTargets(linkInfo),\n anchorTargetBottom(linkInfo)\n ]))\n ]) : history;\n });\n };\n const errorId = generate$6('aria-invalid');\n const renderUrlInput = (spec, backstage, urlBackstage, initialData) => {\n const providersBackstage = backstage.shared.providers;\n const updateHistory = component => {\n const urlEntry = Representing.getValue(component);\n urlBackstage.addToHistory(urlEntry.value, spec.filetype);\n };\n const typeaheadSpec = {\n ...initialData.map(initialData => ({ initialData })).getOr({}),\n dismissOnBlur: true,\n inputClasses: ['tox-textfield'],\n sandboxClasses: ['tox-dialog__popups'],\n inputAttributes: {\n 'aria-errormessage': errorId,\n 'type': 'url'\n },\n minChars: 0,\n responseTime: 0,\n fetch: input => {\n const items = getItems(spec.filetype, input, urlBackstage);\n const tdata = build(items, ItemResponse$1.BUBBLE_TO_SANDBOX, backstage, {\n isHorizontalMenu: false,\n search: Optional.none()\n });\n return Future.pure(tdata);\n },\n getHotspot: comp => memUrlBox.getOpt(comp),\n onSetValue: (comp, _newValue) => {\n if (comp.hasConfigured(Invalidating)) {\n Invalidating.run(comp).get(noop);\n }\n },\n typeaheadBehaviours: derive$1([\n ...urlBackstage.getValidationHandler().map(handler => Invalidating.config({\n getRoot: comp => parentElement(comp.element),\n invalidClass: 'tox-control-wrap--status-invalid',\n notify: {\n onInvalid: (comp, err) => {\n memInvalidIcon.getOpt(comp).each(invalidComp => {\n set$9(invalidComp.element, 'title', providersBackstage.translate(err));\n });\n }\n },\n validator: {\n validate: input => {\n const urlEntry = Representing.getValue(input);\n return FutureResult.nu(completer => {\n handler({\n type: spec.filetype,\n url: urlEntry.value\n }, validation => {\n if (validation.status === 'invalid') {\n const err = Result.error(validation.message);\n completer(err);\n } else {\n const val = Result.value(validation.message);\n completer(val);\n }\n });\n });\n },\n validateOnLoad: false\n }\n })).toArray(),\n Disabling.config({ disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable }),\n Tabstopping.config({}),\n config('urlinput-events', [\n run$1(input(), comp => {\n const currentValue = get$7(comp.element);\n const trimmedValue = currentValue.trim();\n if (trimmedValue !== currentValue) {\n set$5(comp.element, trimmedValue);\n }\n if (spec.filetype === 'file') {\n emitWith(comp, formChangeEvent, { name: spec.name });\n }\n }),\n run$1(change(), comp => {\n emitWith(comp, formChangeEvent, { name: spec.name });\n updateHistory(comp);\n }),\n run$1(postPaste(), comp => {\n emitWith(comp, formChangeEvent, { name: spec.name });\n updateHistory(comp);\n })\n ])\n ]),\n eventOrder: {\n [input()]: [\n 'streaming',\n 'urlinput-events',\n 'invalidating'\n ]\n },\n model: {\n getDisplayText: itemData => itemData.value,\n selectsOver: false,\n populateFromBrowse: false\n },\n markers: { openClass: 'tox-textfield--popup-open' },\n lazySink: backstage.shared.getSink,\n parts: { menu: part(false, 1, 'normal') },\n onExecute: (_menu, component, _entry) => {\n emitWith(component, formSubmitEvent, {});\n },\n onItemExecute: (typeahead, _sandbox, _item, _value) => {\n updateHistory(typeahead);\n emitWith(typeahead, formChangeEvent, { name: spec.name });\n }\n };\n const pField = FormField.parts.field({\n ...typeaheadSpec,\n factory: Typeahead\n });\n const pLabel = spec.label.map(label => renderLabel$3(label, providersBackstage));\n const makeIcon = (name, errId, icon = name, label = name) => render$3(icon, {\n tag: 'div',\n classes: [\n 'tox-icon',\n 'tox-control-wrap__status-icon-' + name\n ],\n attributes: {\n 'title': providersBackstage.translate(label),\n 'aria-live': 'polite',\n ...errId.fold(() => ({}), id => ({ id }))\n }\n }, providersBackstage.icons);\n const memInvalidIcon = record(makeIcon('invalid', Optional.some(errorId), 'warning'));\n const memStatus = record({\n dom: {\n tag: 'div',\n classes: ['tox-control-wrap__status-icon-wrap']\n },\n components: [memInvalidIcon.asSpec()]\n });\n const optUrlPicker = urlBackstage.getUrlPicker(spec.filetype);\n const browseUrlEvent = generate$6('browser.url.event');\n const memUrlBox = record({\n dom: {\n tag: 'div',\n classes: ['tox-control-wrap']\n },\n components: [\n pField,\n memStatus.asSpec()\n ],\n behaviours: derive$1([Disabling.config({ disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable })])\n });\n const memUrlPickerButton = record(renderButton$1({\n context: spec.context,\n name: spec.name,\n icon: Optional.some('browse'),\n text: spec.picker_text.or(spec.label).getOr(''),\n enabled: spec.enabled,\n primary: false,\n buttonType: Optional.none(),\n borderless: true\n }, component => emit(component, browseUrlEvent), providersBackstage, [], ['tox-browse-url']));\n const controlHWrapper = () => ({\n dom: {\n tag: 'div',\n classes: ['tox-form__controls-h-stack']\n },\n components: flatten([\n [memUrlBox.asSpec()],\n optUrlPicker.map(() => memUrlPickerButton.asSpec()).toArray()\n ])\n });\n const openUrlPicker = comp => {\n Composing.getCurrent(comp).each(field => {\n const componentData = Representing.getValue(field);\n const urlData = {\n fieldname: spec.name,\n ...componentData\n };\n optUrlPicker.each(picker => {\n picker(urlData).get(chosenData => {\n Representing.setValue(field, chosenData);\n emitWith(comp, formChangeEvent, { name: spec.name });\n });\n });\n });\n };\n return FormField.sketch({\n dom: renderFormFieldDom(),\n components: pLabel.toArray().concat([controlHWrapper()]),\n fieldBehaviours: derive$1([\n Disabling.config({\n disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable,\n onDisabled: comp => {\n FormField.getField(comp).each(Disabling.disable);\n memUrlPickerButton.getOpt(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormField.getField(comp).each(Disabling.enable);\n memUrlPickerButton.getOpt(comp).each(Disabling.enable);\n }\n }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)),\n config('url-input-events', [run$1(browseUrlEvent, openUrlPicker)])\n ])\n });\n };\n\n const renderAlertBanner = (spec, providersBackstage) => {\n const icon = get$3(spec.icon, providersBackstage.icons);\n return Container.sketch({\n dom: {\n tag: 'div',\n attributes: { role: 'alert' },\n classes: [\n 'tox-notification',\n 'tox-notification--in',\n `tox-notification--${ spec.level }`\n ]\n },\n components: [\n {\n dom: {\n tag: 'div',\n classes: ['tox-notification__icon'],\n innerHtml: !spec.url ? icon : undefined\n },\n components: spec.url ? [Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-button',\n 'tox-button--naked',\n 'tox-button--icon'\n ],\n innerHtml: icon,\n attributes: { title: providersBackstage.translate(spec.iconTooltip) }\n },\n action: comp => emitWith(comp, formActionEvent, {\n name: 'alert-banner',\n value: spec.url\n }),\n buttonBehaviours: derive$1([addFocusableBehaviour()])\n })] : undefined\n },\n {\n dom: {\n tag: 'div',\n classes: ['tox-notification__body'],\n innerHtml: providersBackstage.translate(spec.text)\n }\n }\n ]\n });\n };\n\n const set$1 = (element, status) => {\n element.dom.checked = status;\n };\n const get$2 = element => element.dom.checked;\n\n const renderCheckbox = (spec, providerBackstage, initialData) => {\n const toggleCheckboxHandler = comp => {\n comp.element.dom.click();\n return Optional.some(true);\n };\n const pField = FormField.parts.field({\n factory: { sketch: identity },\n dom: {\n tag: 'input',\n classes: ['tox-checkbox__input'],\n attributes: { type: 'checkbox' }\n },\n behaviours: derive$1([\n ComposingConfigs.self(),\n Disabling.config({\n disabled: () => !spec.enabled || providerBackstage.checkUiComponentContext(spec.context).shouldDisable,\n onDisabled: component => {\n parentElement(component.element).each(element => add$2(element, 'tox-checkbox--disabled'));\n },\n onEnabled: component => {\n parentElement(component.element).each(element => remove$3(element, 'tox-checkbox--disabled'));\n }\n }),\n Tabstopping.config({}),\n Focusing.config({}),\n withElement(initialData, get$2, set$1),\n Keying.config({\n mode: 'special',\n onEnter: toggleCheckboxHandler,\n onSpace: toggleCheckboxHandler,\n stopSpaceKeyup: true\n }),\n config('checkbox-events', [run$1(change(), (component, _) => {\n emitWith(component, formChangeEvent, { name: spec.name });\n })])\n ])\n });\n const pLabel = FormField.parts.label({\n dom: {\n tag: 'span',\n classes: ['tox-checkbox__label']\n },\n components: [text$2(providerBackstage.translate(spec.label))],\n behaviours: derive$1([Unselecting.config({})])\n });\n const makeIcon = className => {\n const iconName = className === 'checked' ? 'selected' : 'unselected';\n return render$3(iconName, {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-checkbox-icon__' + className\n ]\n }, providerBackstage.icons);\n };\n const memIcons = record({\n dom: {\n tag: 'div',\n classes: ['tox-checkbox__icons']\n },\n components: [\n makeIcon('checked'),\n makeIcon('unchecked')\n ]\n });\n return FormField.sketch({\n dom: {\n tag: 'label',\n classes: ['tox-checkbox']\n },\n components: [\n pField,\n memIcons.asSpec(),\n pLabel\n ],\n fieldBehaviours: derive$1([\n Disabling.config({ disabled: () => !spec.enabled || providerBackstage.checkUiComponentContext(spec.context).shouldDisable }),\n toggleOnReceive(() => providerBackstage.checkUiComponentContext(spec.context))\n ])\n });\n };\n\n const renderHtmlPanel = (spec, providersBackstage) => {\n const classes = [\n 'tox-form__group',\n ...spec.stretched ? ['tox-form__group--stretched'] : []\n ];\n const init = config('htmlpanel', [runOnAttached(comp => {\n spec.onInit(comp.element.dom);\n })]);\n if (spec.presets === 'presentation') {\n return Container.sketch({\n dom: {\n tag: 'div',\n classes,\n innerHtml: spec.html\n },\n containerBehaviours: derive$1([\n Tooltipping.config({\n ...providersBackstage.tooltips.getConfig({\n tooltipText: '',\n onShow: comp => {\n descendant(comp.element, '[data-mce-tooltip]:hover').orThunk(() => search(comp.element)).each(current => {\n getOpt(current, 'data-mce-tooltip').each(text => {\n Tooltipping.setComponents(comp, providersBackstage.tooltips.getComponents({ tooltipText: text }));\n });\n });\n }\n }),\n mode: 'children-normal',\n anchor: comp => ({\n type: 'node',\n node: descendant(comp.element, '[data-mce-tooltip]:hover').orThunk(() => search(comp.element).filter(current => getOpt(current, 'data-mce-tooltip').isSome())),\n root: comp.element,\n layouts: {\n onLtr: constant$1([\n south$2,\n north$2,\n southeast$2,\n northeast$2,\n southwest$2,\n northwest$2\n ]),\n onRtl: constant$1([\n south$2,\n north$2,\n southeast$2,\n northeast$2,\n southwest$2,\n northwest$2\n ])\n },\n bubble: nu$5(0, -2, {})\n })\n }),\n init\n ])\n });\n } else {\n return Container.sketch({\n dom: {\n tag: 'div',\n classes,\n innerHtml: spec.html,\n attributes: { role: 'document' }\n },\n containerBehaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({}),\n init\n ])\n });\n }\n };\n\n const make$2 = render => {\n return (parts, spec, dialogData, backstage, getCompByName) => get$h(spec, 'name').fold(() => render(spec, backstage, Optional.none(), getCompByName), fieldName => parts.field(fieldName, render(spec, backstage, get$h(dialogData, fieldName), getCompByName)));\n };\n const makeIframe = render => (parts, spec, dialogData, backstage, getCompByName) => {\n const iframeSpec = deepMerge(spec, { source: 'dynamic' });\n return make$2(render)(parts, iframeSpec, dialogData, backstage, getCompByName);\n };\n const factories = {\n bar: make$2((spec, backstage) => renderBar(spec, backstage.shared)),\n collection: make$2((spec, backstage, data) => renderCollection(spec, backstage.shared.providers, data)),\n alertbanner: make$2((spec, backstage) => renderAlertBanner(spec, backstage.shared.providers)),\n input: make$2((spec, backstage, data) => renderInput(spec, backstage.shared.providers, data)),\n textarea: make$2((spec, backstage, data) => renderTextarea(spec, backstage.shared.providers, data)),\n label: make$2((spec, backstage, _data, getCompByName) => renderLabel$2(spec, backstage.shared, getCompByName)),\n iframe: makeIframe((spec, backstage, data) => renderIFrame(spec, backstage.shared.providers, data)),\n button: make$2((spec, backstage) => renderDialogButton(spec, backstage.shared.providers)),\n checkbox: make$2((spec, backstage, data) => renderCheckbox(spec, backstage.shared.providers, data)),\n colorinput: make$2((spec, backstage, data) => renderColorInput(spec, backstage.shared, backstage.colorinput, data)),\n colorpicker: make$2((spec, backstage, data) => renderColorPicker(spec, backstage.shared.providers, data)),\n dropzone: make$2((spec, backstage, data) => renderDropZone(spec, backstage.shared.providers, data)),\n grid: make$2((spec, backstage) => renderGrid(spec, backstage.shared)),\n listbox: make$2((spec, backstage, data) => renderListBox(spec, backstage, data)),\n selectbox: make$2((spec, backstage, data) => renderSelectBox(spec, backstage.shared.providers, data)),\n sizeinput: make$2((spec, backstage) => renderSizeInput(spec, backstage.shared.providers)),\n slider: make$2((spec, backstage, data) => renderSlider(spec, backstage.shared.providers, data)),\n urlinput: make$2((spec, backstage, data) => renderUrlInput(spec, backstage, backstage.urlinput, data)),\n customeditor: make$2(renderCustomEditor),\n htmlpanel: make$2((spec, backstage) => renderHtmlPanel(spec, backstage.shared.providers)),\n imagepreview: make$2((spec, _, data) => renderImagePreview(spec, data)),\n table: make$2((spec, backstage) => renderTable(spec, backstage.shared.providers)),\n tree: make$2((spec, backstage) => renderTree(spec, backstage)),\n panel: make$2((spec, backstage) => renderPanel(spec, backstage))\n };\n const noFormParts = {\n field: (_name, spec) => spec,\n record: constant$1([])\n };\n const interpretInForm = (parts, spec, dialogData, oldBackstage, getCompByName) => {\n const newBackstage = deepMerge(oldBackstage, { shared: { interpreter: childSpec => interpretParts(parts, childSpec, dialogData, newBackstage, getCompByName) } });\n return interpretParts(parts, spec, dialogData, newBackstage, getCompByName);\n };\n const interpretParts = (parts, spec, dialogData, backstage, getCompByName) => get$h(factories, spec.type).fold(() => {\n console.error(`Unknown factory type \"${ spec.type }\", defaulting to container: `, spec);\n return spec;\n }, factory => factory(parts, spec, dialogData, backstage, getCompByName));\n const interpretWithoutForm = (spec, dialogData, backstage, getCompByName) => interpretParts(noFormParts, spec, dialogData, backstage, getCompByName);\n\n const labelPrefix = 'layout-inset';\n const westEdgeX = anchor => anchor.x;\n const middleX = (anchor, element) => anchor.x + anchor.width / 2 - element.width / 2;\n const eastEdgeX = (anchor, element) => anchor.x + anchor.width - element.width;\n const northY = anchor => anchor.y;\n const southY = (anchor, element) => anchor.y + anchor.height - element.height;\n const centreY = (anchor, element) => anchor.y + anchor.height / 2 - element.height / 2;\n const southwest = (anchor, element, bubbles) => nu$6(eastEdgeX(anchor, element), southY(anchor, element), bubbles.insetSouthwest(), northwest$3(), 'southwest', boundsRestriction(anchor, {\n right: 0,\n bottom: 3\n }), labelPrefix);\n const southeast = (anchor, element, bubbles) => nu$6(westEdgeX(anchor), southY(anchor, element), bubbles.insetSoutheast(), northeast$3(), 'southeast', boundsRestriction(anchor, {\n left: 1,\n bottom: 3\n }), labelPrefix);\n const northwest = (anchor, element, bubbles) => nu$6(eastEdgeX(anchor, element), northY(anchor), bubbles.insetNorthwest(), southwest$3(), 'northwest', boundsRestriction(anchor, {\n right: 0,\n top: 2\n }), labelPrefix);\n const northeast = (anchor, element, bubbles) => nu$6(westEdgeX(anchor), northY(anchor), bubbles.insetNortheast(), southeast$3(), 'northeast', boundsRestriction(anchor, {\n left: 1,\n top: 2\n }), labelPrefix);\n const north = (anchor, element, bubbles) => nu$6(middleX(anchor, element), northY(anchor), bubbles.insetNorth(), south$3(), 'north', boundsRestriction(anchor, { top: 2 }), labelPrefix);\n const south = (anchor, element, bubbles) => nu$6(middleX(anchor, element), southY(anchor, element), bubbles.insetSouth(), north$3(), 'south', boundsRestriction(anchor, { bottom: 3 }), labelPrefix);\n const east = (anchor, element, bubbles) => nu$6(eastEdgeX(anchor, element), centreY(anchor, element), bubbles.insetEast(), west$3(), 'east', boundsRestriction(anchor, { right: 0 }), labelPrefix);\n const west = (anchor, element, bubbles) => nu$6(westEdgeX(anchor), centreY(anchor, element), bubbles.insetWest(), east$3(), 'west', boundsRestriction(anchor, { left: 1 }), labelPrefix);\n const lookupPreserveLayout = lastPlacement => {\n switch (lastPlacement) {\n case 'north':\n return north;\n case 'northeast':\n return northeast;\n case 'northwest':\n return northwest;\n case 'south':\n return south;\n case 'southeast':\n return southeast;\n case 'southwest':\n return southwest;\n case 'east':\n return east;\n case 'west':\n return west;\n }\n };\n const preserve = (anchor, element, bubbles, placee, bounds) => {\n const layout = getPlacement(placee).map(lookupPreserveLayout).getOr(north);\n return layout(anchor, element, bubbles, placee, bounds);\n };\n const lookupFlippedLayout = lastPlacement => {\n switch (lastPlacement) {\n case 'north':\n return south;\n case 'northeast':\n return southeast;\n case 'northwest':\n return southwest;\n case 'south':\n return north;\n case 'southeast':\n return northeast;\n case 'southwest':\n return northwest;\n case 'east':\n return west;\n case 'west':\n return east;\n }\n };\n const flip = (anchor, element, bubbles, placee, bounds) => {\n const layout = getPlacement(placee).map(lookupFlippedLayout).getOr(north);\n return layout(anchor, element, bubbles, placee, bounds);\n };\n\n const bubbleAlignments$2 = {\n valignCentre: [],\n alignCentre: [],\n alignLeft: [],\n alignRight: [],\n right: [],\n left: [],\n bottom: [],\n top: []\n };\n const getInlineDialogAnchor = (contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor) => {\n const bubbleSize = 12;\n const overrides = { maxHeightFunction: expandable$1() };\n const editableAreaAnchor = () => ({\n type: 'node',\n root: getContentContainer(getRootNode(contentAreaElement())),\n node: Optional.from(contentAreaElement()),\n bubble: nu$5(bubbleSize, bubbleSize, bubbleAlignments$2),\n layouts: {\n onRtl: () => [northeast],\n onLtr: () => [northwest]\n },\n overrides\n });\n const standardAnchor = () => ({\n type: 'hotspot',\n hotspot: lazyAnchorbar(),\n bubble: nu$5(-bubbleSize, bubbleSize, bubbleAlignments$2),\n layouts: {\n onRtl: () => [\n southeast$2,\n southwest$2,\n south$2\n ],\n onLtr: () => [\n southwest$2,\n southeast$2,\n south$2\n ]\n },\n overrides\n });\n return () => lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor();\n };\n const getInlineBottomDialogAnchor = (inline, contentAreaElement, lazyBottomAnchorBar, lazyUseEditableAreaAnchor) => {\n const bubbleSize = 12;\n const overrides = { maxHeightFunction: expandable$1() };\n const editableAreaAnchor = () => ({\n type: 'node',\n root: getContentContainer(getRootNode(contentAreaElement())),\n node: Optional.from(contentAreaElement()),\n bubble: nu$5(bubbleSize, bubbleSize, bubbleAlignments$2),\n layouts: {\n onRtl: () => [north],\n onLtr: () => [north]\n },\n overrides\n });\n const standardAnchor = () => inline ? {\n type: 'node',\n root: getContentContainer(getRootNode(contentAreaElement())),\n node: Optional.from(contentAreaElement()),\n bubble: nu$5(0, -getOuter$2(contentAreaElement()), bubbleAlignments$2),\n layouts: {\n onRtl: () => [north$2],\n onLtr: () => [north$2]\n },\n overrides\n } : {\n type: 'hotspot',\n hotspot: lazyBottomAnchorBar(),\n bubble: nu$5(0, 0, bubbleAlignments$2),\n layouts: {\n onRtl: () => [north$2],\n onLtr: () => [north$2]\n },\n overrides\n };\n return () => lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor();\n };\n const getBannerAnchor = (contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor) => {\n const editableAreaAnchor = () => ({\n type: 'node',\n root: getContentContainer(getRootNode(contentAreaElement())),\n node: Optional.from(contentAreaElement()),\n layouts: {\n onRtl: () => [north],\n onLtr: () => [north]\n }\n });\n const standardAnchor = () => ({\n type: 'hotspot',\n hotspot: lazyAnchorbar(),\n layouts: {\n onRtl: () => [south$2],\n onLtr: () => [south$2]\n }\n });\n return () => lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor();\n };\n const getCursorAnchor = (editor, bodyElement) => () => ({\n type: 'selection',\n root: bodyElement(),\n getSelection: () => {\n const rng = editor.selection.getRng();\n const selectedCells = editor.model.table.getSelectedCells();\n if (selectedCells.length > 1) {\n const firstCell = selectedCells[0];\n const lastCell = selectedCells[selectedCells.length - 1];\n const selectionTableCellRange = {\n firstCell: SugarElement.fromDom(firstCell),\n lastCell: SugarElement.fromDom(lastCell)\n };\n return Optional.some(selectionTableCellRange);\n }\n return Optional.some(SimSelection.range(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n }\n });\n const getNodeAnchor$1 = bodyElement => element => ({\n type: 'node',\n root: bodyElement(),\n node: element\n });\n const getAnchors = (editor, lazyAnchorbar, lazyBottomAnchorBar, isToolbarTop) => {\n const useFixedToolbarContainer = useFixedContainer(editor);\n const bodyElement = () => SugarElement.fromDom(editor.getBody());\n const contentAreaElement = () => SugarElement.fromDom(editor.getContentAreaContainer());\n const lazyUseEditableAreaAnchor = () => useFixedToolbarContainer || !isToolbarTop();\n return {\n inlineDialog: getInlineDialogAnchor(contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor),\n inlineBottomDialog: getInlineBottomDialogAnchor(editor.inline, contentAreaElement, lazyBottomAnchorBar, lazyUseEditableAreaAnchor),\n banner: getBannerAnchor(contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor),\n cursor: getCursorAnchor(editor, bodyElement),\n node: getNodeAnchor$1(bodyElement)\n };\n };\n\n const colorPicker = editor => (callback, value) => {\n const dialog = colorPickerDialog(editor);\n dialog(callback, value);\n };\n const hasCustomColors = editor => () => hasCustomColors$1(editor);\n const getColors = editor => id => getColors$2(editor, id);\n const getColorCols = editor => id => getColorCols$1(editor, id);\n const ColorInputBackstage = editor => ({\n colorPicker: colorPicker(editor),\n hasCustomColors: hasCustomColors(editor),\n getColors: getColors(editor),\n getColorCols: getColorCols(editor)\n });\n\n const isDraggableModal = editor => () => isDraggableModal$1(editor);\n const DialogBackstage = editor => ({ isDraggableModal: isDraggableModal(editor) });\n\n const HeaderBackstage = editor => {\n const mode = Cell(isToolbarLocationBottom(editor) ? 'bottom' : 'top');\n return {\n isPositionedAtTop: () => mode.get() === 'top',\n getDockingMode: mode.get,\n setDockingMode: mode.set\n };\n };\n\n const isNestedFormat = format => hasNonNullableKey(format, 'items');\n const isFormatReference = format => hasNonNullableKey(format, 'format');\n const defaultStyleFormats = [\n {\n title: 'Headings',\n items: [\n {\n title: 'Heading 1',\n format: 'h1'\n },\n {\n title: 'Heading 2',\n format: 'h2'\n },\n {\n title: 'Heading 3',\n format: 'h3'\n },\n {\n title: 'Heading 4',\n format: 'h4'\n },\n {\n title: 'Heading 5',\n format: 'h5'\n },\n {\n title: 'Heading 6',\n format: 'h6'\n }\n ]\n },\n {\n title: 'Inline',\n items: [\n {\n title: 'Bold',\n format: 'bold'\n },\n {\n title: 'Italic',\n format: 'italic'\n },\n {\n title: 'Underline',\n format: 'underline'\n },\n {\n title: 'Strikethrough',\n format: 'strikethrough'\n },\n {\n title: 'Superscript',\n format: 'superscript'\n },\n {\n title: 'Subscript',\n format: 'subscript'\n },\n {\n title: 'Code',\n format: 'code'\n }\n ]\n },\n {\n title: 'Blocks',\n items: [\n {\n title: 'Paragraph',\n format: 'p'\n },\n {\n title: 'Blockquote',\n format: 'blockquote'\n },\n {\n title: 'Div',\n format: 'div'\n },\n {\n title: 'Pre',\n format: 'pre'\n }\n ]\n },\n {\n title: 'Align',\n items: [\n {\n title: 'Left',\n format: 'alignleft'\n },\n {\n title: 'Center',\n format: 'aligncenter'\n },\n {\n title: 'Right',\n format: 'alignright'\n },\n {\n title: 'Justify',\n format: 'alignjustify'\n }\n ]\n }\n ];\n const isNestedFormats = format => has$2(format, 'items');\n const isBlockFormat = format => has$2(format, 'block');\n const isInlineFormat = format => has$2(format, 'inline');\n const isSelectorFormat = format => has$2(format, 'selector');\n const mapFormats = userFormats => foldl(userFormats, (acc, fmt) => {\n if (isNestedFormats(fmt)) {\n const result = mapFormats(fmt.items);\n return {\n customFormats: acc.customFormats.concat(result.customFormats),\n formats: acc.formats.concat([{\n title: fmt.title,\n items: result.formats\n }])\n };\n } else if (isInlineFormat(fmt) || isBlockFormat(fmt) || isSelectorFormat(fmt)) {\n const formatName = isString(fmt.name) ? fmt.name : fmt.title.toLowerCase();\n const formatNameWithPrefix = `custom-${ formatName }`;\n return {\n customFormats: acc.customFormats.concat([{\n name: formatNameWithPrefix,\n format: fmt\n }]),\n formats: acc.formats.concat([{\n title: fmt.title,\n format: formatNameWithPrefix,\n icon: fmt.icon\n }])\n };\n } else {\n return {\n ...acc,\n formats: acc.formats.concat(fmt)\n };\n }\n }, {\n customFormats: [],\n formats: []\n });\n const registerCustomFormats = (editor, userFormats) => {\n const result = mapFormats(userFormats);\n const registerFormats = customFormats => {\n each$1(customFormats, fmt => {\n if (!editor.formatter.has(fmt.name)) {\n editor.formatter.register(fmt.name, fmt.format);\n }\n });\n };\n if (editor.formatter) {\n registerFormats(result.customFormats);\n } else {\n editor.on('init', () => {\n registerFormats(result.customFormats);\n });\n }\n return result.formats;\n };\n const getStyleFormats = editor => getUserStyleFormats(editor).map(userFormats => {\n const registeredUserFormats = registerCustomFormats(editor, userFormats);\n return shouldMergeStyleFormats(editor) ? defaultStyleFormats.concat(registeredUserFormats) : registeredUserFormats;\n }).getOr(defaultStyleFormats);\n\n const isSeparator$1 = format => {\n const keys$1 = keys(format);\n return keys$1.length === 1 && contains$2(keys$1, 'title');\n };\n const processBasic = (item, isSelectedFor, getPreviewFor) => ({\n ...item,\n type: 'formatter',\n isSelected: isSelectedFor(item.format),\n getStylePreview: getPreviewFor(item.format)\n });\n const register$b = (editor, formats, isSelectedFor, getPreviewFor) => {\n const enrichSupported = item => processBasic(item, isSelectedFor, getPreviewFor);\n const enrichMenu = item => {\n const newItems = doEnrich(item.items);\n return {\n ...item,\n type: 'submenu',\n getStyleItems: constant$1(newItems)\n };\n };\n const enrichCustom = item => {\n const formatName = isString(item.name) ? item.name : generate$6(item.title);\n const formatNameWithPrefix = `custom-${ formatName }`;\n const newItem = {\n ...item,\n type: 'formatter',\n format: formatNameWithPrefix,\n isSelected: isSelectedFor(formatNameWithPrefix),\n getStylePreview: getPreviewFor(formatNameWithPrefix)\n };\n editor.formatter.register(formatName, newItem);\n return newItem;\n };\n const doEnrich = items => map$2(items, item => {\n if (isNestedFormat(item)) {\n return enrichMenu(item);\n } else if (isFormatReference(item)) {\n return enrichSupported(item);\n } else if (isSeparator$1(item)) {\n return {\n ...item,\n type: 'separator'\n };\n } else {\n return enrichCustom(item);\n }\n });\n return doEnrich(formats);\n };\n\n const init$6 = editor => {\n const isSelectedFor = format => () => editor.formatter.match(format);\n const getPreviewFor = format => () => {\n const fmt = editor.formatter.get(format);\n return fmt !== undefined ? Optional.some({\n tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n }) : Optional.none();\n };\n const settingsFormats = Cell([]);\n const eventsFormats = Cell([]);\n const replaceSettings = Cell(false);\n editor.on('PreInit', _e => {\n const formats = getStyleFormats(editor);\n const enriched = register$b(editor, formats, isSelectedFor, getPreviewFor);\n settingsFormats.set(enriched);\n });\n editor.on('addStyleModifications', e => {\n const modifications = register$b(editor, e.items, isSelectedFor, getPreviewFor);\n eventsFormats.set(modifications);\n replaceSettings.set(e.replace);\n });\n const getData = () => {\n const fromSettings = replaceSettings.get() ? [] : settingsFormats.get();\n const fromEvents = eventsFormats.get();\n return fromSettings.concat(fromEvents);\n };\n return { getData };\n };\n\n const TooltipsBackstage = getSink => {\n const tooltipDelay = 300;\n const intervalDelay = tooltipDelay * 0.2;\n let numActiveTooltips = 0;\n const alreadyShowingTooltips = () => numActiveTooltips > 0;\n const getComponents = spec => {\n return [{\n dom: {\n tag: 'div',\n classes: ['tox-tooltip__body']\n },\n components: [text$2(spec.tooltipText)]\n }];\n };\n const getConfig = spec => {\n return {\n delayForShow: () => alreadyShowingTooltips() ? intervalDelay : tooltipDelay,\n delayForHide: constant$1(tooltipDelay),\n exclusive: true,\n lazySink: getSink,\n tooltipDom: {\n tag: 'div',\n classes: [\n 'tox-tooltip',\n 'tox-tooltip--up'\n ]\n },\n tooltipComponents: getComponents(spec),\n onShow: (comp, tooltip) => {\n numActiveTooltips++;\n if (spec.onShow) {\n spec.onShow(comp, tooltip);\n }\n },\n onHide: (comp, tooltip) => {\n numActiveTooltips--;\n if (spec.onHide) {\n spec.onHide(comp, tooltip);\n }\n },\n onSetup: spec.onSetup\n };\n };\n return {\n getConfig,\n getComponents\n };\n };\n\n const isElement = node => isNonNullable(node) && node.nodeType === 1;\n const trim = global$1.trim;\n const hasContentEditableState = value => {\n return node => {\n if (isElement(node)) {\n if (node.contentEditable === value) {\n return true;\n }\n if (node.getAttribute('data-mce-contenteditable') === value) {\n return true;\n }\n }\n return false;\n };\n };\n const isContentEditableTrue = hasContentEditableState('true');\n const isContentEditableFalse = hasContentEditableState('false');\n const create = (type, title, url, level, attach) => ({\n type,\n title,\n url,\n level,\n attach\n });\n const isChildOfContentEditableTrue = node => {\n let tempNode = node;\n while (tempNode = tempNode.parentNode) {\n const value = tempNode.contentEditable;\n if (value && value !== 'inherit') {\n return isContentEditableTrue(tempNode);\n }\n }\n return false;\n };\n const select = (selector, root) => {\n return map$2(descendants(SugarElement.fromDom(root), selector), element => {\n return element.dom;\n });\n };\n const getElementText = elm => {\n return elm.innerText || elm.textContent;\n };\n const getOrGenerateId = elm => {\n return elm.id ? elm.id : generate$6('h');\n };\n const isAnchor = elm => {\n return elm && elm.nodeName === 'A' && (elm.id || elm.name) !== undefined;\n };\n const isValidAnchor = elm => {\n return isAnchor(elm) && isEditable(elm);\n };\n const isHeader = elm => {\n return elm && /^(H[1-6])$/.test(elm.nodeName);\n };\n const isEditable = elm => {\n return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm);\n };\n const isValidHeader = elm => {\n return isHeader(elm) && isEditable(elm);\n };\n const getLevel = elm => {\n return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0;\n };\n const headerTarget = elm => {\n var _a;\n const headerId = getOrGenerateId(elm);\n const attach = () => {\n elm.id = headerId;\n };\n return create('header', (_a = getElementText(elm)) !== null && _a !== void 0 ? _a : '', '#' + headerId, getLevel(elm), attach);\n };\n const anchorTarget = elm => {\n const anchorId = elm.id || elm.name;\n const anchorText = getElementText(elm);\n return create('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop);\n };\n const getHeaderTargets = elms => {\n return map$2(filter$2(elms, isValidHeader), headerTarget);\n };\n const getAnchorTargets = elms => {\n return map$2(filter$2(elms, isValidAnchor), anchorTarget);\n };\n const getTargetElements = elm => {\n const elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm);\n return elms;\n };\n const hasTitle = target => {\n return trim(target.title).length > 0;\n };\n const find = elm => {\n const elms = getTargetElements(elm);\n return filter$2(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle);\n };\n const LinkTargets = { find };\n\n const STORAGE_KEY = 'tinymce-url-history';\n const HISTORY_LENGTH = 5;\n const isHttpUrl = url => isString(url) && /^https?/.test(url);\n const isArrayOfUrl = a => isArray(a) && a.length <= HISTORY_LENGTH && forall(a, isHttpUrl);\n const isRecordOfUrlArray = r => isObject(r) && find$4(r, value => !isArrayOfUrl(value)).isNone();\n const getAllHistory = () => {\n const unparsedHistory = global$4.getItem(STORAGE_KEY);\n if (unparsedHistory === null) {\n return {};\n }\n let history;\n try {\n history = JSON.parse(unparsedHistory);\n } catch (e) {\n if (e instanceof SyntaxError) {\n console.log('Local storage ' + STORAGE_KEY + ' was not valid JSON', e);\n return {};\n }\n throw e;\n }\n if (!isRecordOfUrlArray(history)) {\n console.log('Local storage ' + STORAGE_KEY + ' was not valid format', history);\n return {};\n }\n return history;\n };\n const setAllHistory = history => {\n if (!isRecordOfUrlArray(history)) {\n throw new Error('Bad format for history:\\n' + JSON.stringify(history));\n }\n global$4.setItem(STORAGE_KEY, JSON.stringify(history));\n };\n const getHistory = fileType => {\n const history = getAllHistory();\n return get$h(history, fileType).getOr([]);\n };\n const addToHistory = (url, fileType) => {\n if (!isHttpUrl(url)) {\n return;\n }\n const history = getAllHistory();\n const items = get$h(history, fileType).getOr([]);\n const itemsWithoutUrl = filter$2(items, item => item !== url);\n history[fileType] = [url].concat(itemsWithoutUrl).slice(0, HISTORY_LENGTH);\n setAllHistory(history);\n };\n\n const isTruthy = value => !!value;\n const makeMap = value => map$1(global$1.makeMap(value, /[, ]/), isTruthy);\n const getPicker = editor => Optional.from(getFilePickerCallback(editor));\n const getPickerTypes = editor => {\n const optFileTypes = Optional.from(getFilePickerTypes(editor)).filter(isTruthy).map(makeMap);\n return getPicker(editor).fold(never, _picker => optFileTypes.fold(always, types => keys(types).length > 0 ? types : false));\n };\n const getPickerSetting = (editor, filetype) => {\n const pickerTypes = getPickerTypes(editor);\n if (isBoolean(pickerTypes)) {\n return pickerTypes ? getPicker(editor) : Optional.none();\n } else {\n return pickerTypes[filetype] ? getPicker(editor) : Optional.none();\n }\n };\n const getUrlPicker = (editor, filetype) => getPickerSetting(editor, filetype).map(picker => entry => Future.nu(completer => {\n const handler = (value, meta) => {\n if (!isString(value)) {\n throw new Error('Expected value to be string');\n }\n if (meta !== undefined && !isObject(meta)) {\n throw new Error('Expected meta to be a object');\n }\n const r = {\n value,\n meta\n };\n completer(r);\n };\n const meta = {\n filetype,\n fieldname: entry.fieldname,\n ...Optional.from(entry.meta).getOr({})\n };\n picker.call(editor, handler, entry.value, meta);\n }));\n const getTextSetting = value => Optional.from(value).filter(isString).getOrUndefined();\n const getLinkInformation = editor => {\n if (!useTypeaheadUrls(editor)) {\n return Optional.none();\n }\n return Optional.some({\n targets: LinkTargets.find(editor.getBody()),\n anchorTop: getTextSetting(getAnchorTop(editor)),\n anchorBottom: getTextSetting(getAnchorBottom(editor))\n });\n };\n const getValidationHandler = editor => Optional.from(getFilePickerValidatorHandler(editor));\n const UrlInputBackstage = editor => ({\n getHistory,\n addToHistory,\n getLinkInformation: () => getLinkInformation(editor),\n getValidationHandler: () => getValidationHandler(editor),\n getUrlPicker: filetype => getUrlPicker(editor, filetype)\n });\n\n const init$5 = (lazySinks, editor, lazyAnchorbar, lazyBottomAnchorBar) => {\n const contextMenuState = Cell(false);\n const toolbar = HeaderBackstage(editor);\n const providers = {\n icons: () => editor.ui.registry.getAll().icons,\n menuItems: () => editor.ui.registry.getAll().menuItems,\n translate: global$5.translate,\n isDisabled: () => !editor.ui.isEnabled(),\n getOption: editor.options.get,\n tooltips: TooltipsBackstage(lazySinks.dialog),\n checkUiComponentContext: specContext => {\n if (isDisabled(editor)) {\n return {\n contextType: 'disabled',\n shouldDisable: true\n };\n }\n const [key, value = ''] = specContext.split(':');\n const contexts = editor.ui.registry.getAll().contexts;\n const enabledInContext = get$h(contexts, key).fold(() => get$h(contexts, 'mode').map(pred => pred('design')).getOr(false), pred => value.charAt(0) === '!' ? !pred(value.slice(1)) : pred(value));\n return {\n contextType: key,\n shouldDisable: !enabledInContext\n };\n }\n };\n const urlinput = UrlInputBackstage(editor);\n const styles = init$6(editor);\n const colorinput = ColorInputBackstage(editor);\n const dialogSettings = DialogBackstage(editor);\n const isContextMenuOpen = () => contextMenuState.get();\n const setContextMenuState = state => contextMenuState.set(state);\n const commonBackstage = {\n shared: {\n providers,\n anchors: getAnchors(editor, lazyAnchorbar, lazyBottomAnchorBar, toolbar.isPositionedAtTop),\n header: toolbar\n },\n urlinput,\n styles,\n colorinput,\n dialog: dialogSettings,\n isContextMenuOpen,\n setContextMenuState\n };\n const getCompByName = _name => Optional.none();\n const popupBackstage = {\n ...commonBackstage,\n shared: {\n ...commonBackstage.shared,\n interpreter: s => interpretWithoutForm(s, {}, popupBackstage, getCompByName),\n getSink: lazySinks.popup\n }\n };\n const dialogBackstage = {\n ...commonBackstage,\n shared: {\n ...commonBackstage.shared,\n interpreter: s => interpretWithoutForm(s, {}, dialogBackstage, getCompByName),\n getSink: lazySinks.dialog\n }\n };\n return {\n popup: popupBackstage,\n dialog: dialogBackstage\n };\n };\n\n const setup$b = (editor, mothership, uiMotherships) => {\n const broadcastEvent = (name, evt) => {\n each$1([\n mothership,\n ...uiMotherships\n ], m => {\n m.broadcastEvent(name, evt);\n });\n };\n const broadcastOn = (channel, message) => {\n each$1([\n mothership,\n ...uiMotherships\n ], m => {\n m.broadcastOn([channel], message);\n });\n };\n const fireDismissPopups = evt => broadcastOn(dismissPopups(), { target: evt.target });\n const doc = getDocument();\n const onTouchstart = bind(doc, 'touchstart', fireDismissPopups);\n const onTouchmove = bind(doc, 'touchmove', evt => broadcastEvent(documentTouchmove(), evt));\n const onTouchend = bind(doc, 'touchend', evt => broadcastEvent(documentTouchend(), evt));\n const onMousedown = bind(doc, 'mousedown', fireDismissPopups);\n const onMouseup = bind(doc, 'mouseup', evt => {\n if (evt.raw.button === 0) {\n broadcastOn(mouseReleased(), { target: evt.target });\n }\n });\n const onContentClick = raw => broadcastOn(dismissPopups(), { target: SugarElement.fromDom(raw.target) });\n const onContentMouseup = raw => {\n if (raw.button === 0) {\n broadcastOn(mouseReleased(), { target: SugarElement.fromDom(raw.target) });\n }\n };\n const onContentMousedown = () => {\n each$1(editor.editorManager.get(), loopEditor => {\n if (editor !== loopEditor) {\n loopEditor.dispatch('DismissPopups', { relatedTarget: editor });\n }\n });\n };\n const onWindowScroll = evt => broadcastEvent(windowScroll(), fromRawEvent(evt));\n const onWindowResize = evt => {\n broadcastOn(repositionPopups(), {});\n broadcastEvent(windowResize(), fromRawEvent(evt));\n };\n const dos = getRootNode(SugarElement.fromDom(editor.getElement()));\n const onElementScroll = capture(dos, 'scroll', evt => {\n requestAnimationFrame(() => {\n const c = editor.getContainer();\n if (c !== undefined && c !== null) {\n const optScrollingContext = detectWhenSplitUiMode(editor, mothership.element);\n const scrollers = optScrollingContext.map(sc => [\n sc.element,\n ...sc.others\n ]).getOr([]);\n if (exists(scrollers, s => eq(s, evt.target))) {\n editor.dispatch('ElementScroll', { target: evt.target.dom });\n broadcastEvent(externalElementScroll(), evt);\n }\n }\n });\n });\n const onEditorResize = () => broadcastOn(repositionPopups(), {});\n const onEditorProgress = evt => {\n if (evt.state) {\n broadcastOn(dismissPopups(), { target: SugarElement.fromDom(editor.getContainer()) });\n }\n };\n const onDismissPopups = event => {\n broadcastOn(dismissPopups(), { target: SugarElement.fromDom(event.relatedTarget.getContainer()) });\n };\n const onFocusIn = event => editor.dispatch('focusin', event);\n const onFocusOut = event => editor.dispatch('focusout', event);\n editor.on('PostRender', () => {\n editor.on('click', onContentClick);\n editor.on('tap', onContentClick);\n editor.on('mouseup', onContentMouseup);\n editor.on('mousedown', onContentMousedown);\n editor.on('ScrollWindow', onWindowScroll);\n editor.on('ResizeWindow', onWindowResize);\n editor.on('ResizeEditor', onEditorResize);\n editor.on('AfterProgressState', onEditorProgress);\n editor.on('DismissPopups', onDismissPopups);\n each$1([\n mothership,\n ...uiMotherships\n ], gui => {\n gui.element.dom.addEventListener('focusin', onFocusIn);\n gui.element.dom.addEventListener('focusout', onFocusOut);\n });\n });\n editor.on('remove', () => {\n editor.off('click', onContentClick);\n editor.off('tap', onContentClick);\n editor.off('mouseup', onContentMouseup);\n editor.off('mousedown', onContentMousedown);\n editor.off('ScrollWindow', onWindowScroll);\n editor.off('ResizeWindow', onWindowResize);\n editor.off('ResizeEditor', onEditorResize);\n editor.off('AfterProgressState', onEditorProgress);\n editor.off('DismissPopups', onDismissPopups);\n each$1([\n mothership,\n ...uiMotherships\n ], gui => {\n gui.element.dom.removeEventListener('focusin', onFocusIn);\n gui.element.dom.removeEventListener('focusout', onFocusOut);\n });\n onMousedown.unbind();\n onTouchstart.unbind();\n onTouchmove.unbind();\n onTouchend.unbind();\n onMouseup.unbind();\n onElementScroll.unbind();\n });\n editor.on('detach', () => {\n each$1([\n mothership,\n ...uiMotherships\n ], detachSystem);\n each$1([\n mothership,\n ...uiMotherships\n ], m => m.destroy());\n });\n };\n\n const parts$a = AlloyParts;\n const partType = PartType;\n\n const schema$f = constant$1([\n defaulted('shell', false),\n required$1('makeItem'),\n defaulted('setupItem', noop),\n SketchBehaviours.field('listBehaviours', [Replacing])\n ]);\n const customListDetail = () => ({ behaviours: derive$1([Replacing.config({})]) });\n const itemsPart = optional({\n name: 'items',\n overrides: customListDetail\n });\n const parts$9 = constant$1([itemsPart]);\n const name = constant$1('CustomList');\n\n const factory$f = (detail, components, _spec, _external) => {\n const setItems = (list, items) => {\n getListContainer(list).fold(() => {\n console.error('Custom List was defined to not be a shell, but no item container was specified in components');\n throw new Error('Custom List was defined to not be a shell, but no item container was specified in components');\n }, container => {\n const itemComps = Replacing.contents(container);\n const numListsRequired = items.length;\n const numListsToAdd = numListsRequired - itemComps.length;\n const itemsToAdd = numListsToAdd > 0 ? range$2(numListsToAdd, () => detail.makeItem()) : [];\n const itemsToRemove = itemComps.slice(numListsRequired);\n each$1(itemsToRemove, item => Replacing.remove(container, item));\n each$1(itemsToAdd, item => Replacing.append(container, item));\n const builtLists = Replacing.contents(container);\n each$1(builtLists, (item, i) => {\n detail.setupItem(list, item, items[i], i);\n });\n });\n };\n const extra = detail.shell ? {\n behaviours: [Replacing.config({})],\n components: []\n } : {\n behaviours: [],\n components\n };\n const getListContainer = component => detail.shell ? Optional.some(component) : getPart(component, detail, 'items');\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: extra.components,\n behaviours: augment(detail.listBehaviours, extra.behaviours),\n apis: { setItems }\n };\n };\n const CustomList = composite({\n name: name(),\n configFields: schema$f(),\n partFields: parts$9(),\n factory: factory$f,\n apis: {\n setItems: (apis, list, items) => {\n apis.setItems(list, items);\n }\n }\n });\n\n const schema$e = constant$1([\n required$1('dom'),\n defaulted('shell', true),\n field('toolbarBehaviours', [Replacing])\n ]);\n const enhanceGroups = () => ({ behaviours: derive$1([Replacing.config({})]) });\n const parts$8 = constant$1([optional({\n name: 'groups',\n overrides: enhanceGroups\n })]);\n\n const factory$e = (detail, components, _spec, _externals) => {\n const setGroups = (toolbar, groups) => {\n getGroupContainer(toolbar).fold(() => {\n console.error('Toolbar was defined to not be a shell, but no groups container was specified in components');\n throw new Error('Toolbar was defined to not be a shell, but no groups container was specified in components');\n }, container => {\n Replacing.set(container, groups);\n });\n };\n const getGroupContainer = component => detail.shell ? Optional.some(component) : getPart(component, detail, 'groups');\n const extra = detail.shell ? {\n behaviours: [Replacing.config({})],\n components: []\n } : {\n behaviours: [],\n components\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: extra.components,\n behaviours: augment(detail.toolbarBehaviours, extra.behaviours),\n apis: {\n setGroups,\n refresh: noop\n },\n domModification: { attributes: { role: 'group' } }\n };\n };\n const Toolbar = composite({\n name: 'Toolbar',\n configFields: schema$e(),\n partFields: parts$8(),\n factory: factory$e,\n apis: {\n setGroups: (apis, toolbar, groups) => {\n apis.setGroups(toolbar, groups);\n }\n }\n });\n\n const setup$a = noop;\n const isDocked$1 = never;\n const getBehaviours$1 = constant$1([]);\n\n var StaticHeader = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setup: setup$a,\n isDocked: isDocked$1,\n getBehaviours: getBehaviours$1\n });\n\n const toolbarHeightChange = constant$1(generate$6('toolbar-height-change'));\n\n const visibility = {\n fadeInClass: 'tox-editor-dock-fadein',\n fadeOutClass: 'tox-editor-dock-fadeout',\n transitionClass: 'tox-editor-dock-transition'\n };\n const editorStickyOnClass = 'tox-tinymce--toolbar-sticky-on';\n const editorStickyOffClass = 'tox-tinymce--toolbar-sticky-off';\n const scrollFromBehindHeader = (e, containerHeader) => {\n const doc = owner$4(containerHeader);\n const win = defaultView(containerHeader);\n const viewHeight = win.dom.innerHeight;\n const scrollPos = get$c(doc);\n const markerElement = SugarElement.fromDom(e.elm);\n const markerPos = absolute$2(markerElement);\n const markerHeight = get$e(markerElement);\n const markerTop = markerPos.y;\n const markerBottom = markerTop + markerHeight;\n const editorHeaderPos = absolute$3(containerHeader);\n const editorHeaderHeight = get$e(containerHeader);\n const editorHeaderTop = editorHeaderPos.top;\n const editorHeaderBottom = editorHeaderTop + editorHeaderHeight;\n const editorHeaderDockedAtTop = Math.abs(editorHeaderTop - scrollPos.top) < 2;\n const editorHeaderDockedAtBottom = Math.abs(editorHeaderBottom - (scrollPos.top + viewHeight)) < 2;\n if (editorHeaderDockedAtTop && markerTop < editorHeaderBottom) {\n to(scrollPos.left, markerTop - editorHeaderHeight, doc);\n } else if (editorHeaderDockedAtBottom && markerBottom > editorHeaderTop) {\n const y = markerTop - viewHeight + markerHeight + editorHeaderHeight;\n to(scrollPos.left, y, doc);\n }\n };\n const isDockedMode = (header, mode) => contains$2(Docking.getModes(header), mode);\n const updateIframeContentFlow = header => {\n const getOccupiedHeight = elm => getOuter$2(elm) + (parseInt(get$f(elm, 'margin-top'), 10) || 0) + (parseInt(get$f(elm, 'margin-bottom'), 10) || 0);\n const elm = header.element;\n parentElement(elm).each(parentElem => {\n const padding = 'padding-' + Docking.getModes(header)[0];\n if (Docking.isDocked(header)) {\n const parentWidth = get$d(parentElem);\n set$8(elm, 'width', parentWidth + 'px');\n set$8(parentElem, padding, getOccupiedHeight(elm) + 'px');\n } else {\n remove$7(elm, 'width');\n remove$7(parentElem, padding);\n }\n });\n };\n const updateSinkVisibility = (sinkElem, visible) => {\n if (visible) {\n remove$3(sinkElem, visibility.fadeOutClass);\n add$1(sinkElem, [\n visibility.transitionClass,\n visibility.fadeInClass\n ]);\n } else {\n remove$3(sinkElem, visibility.fadeInClass);\n add$1(sinkElem, [\n visibility.fadeOutClass,\n visibility.transitionClass\n ]);\n }\n };\n const updateEditorClasses = (editor, docked) => {\n const editorContainer = SugarElement.fromDom(editor.getContainer());\n if (docked) {\n add$2(editorContainer, editorStickyOnClass);\n remove$3(editorContainer, editorStickyOffClass);\n } else {\n add$2(editorContainer, editorStickyOffClass);\n remove$3(editorContainer, editorStickyOnClass);\n }\n };\n const restoreFocus = (headerElem, focusedElem) => {\n const ownerDoc = owner$4(focusedElem);\n active$1(ownerDoc).filter(activeElm => !eq(focusedElem, activeElm)).filter(activeElm => eq(activeElm, SugarElement.fromDom(ownerDoc.dom.body)) || contains(headerElem, activeElm)).each(() => focus$3(focusedElem));\n };\n const findFocusedElem = (rootElm, lazySink) => search(rootElm).orThunk(() => lazySink().toOptional().bind(sink => search(sink.element)));\n const setup$9 = (editor, sharedBackstage, lazyHeader) => {\n if (!editor.inline) {\n if (!sharedBackstage.header.isPositionedAtTop()) {\n editor.on('ResizeEditor', () => {\n lazyHeader().each(Docking.reset);\n });\n }\n editor.on('ResizeWindow ResizeEditor', () => {\n lazyHeader().each(updateIframeContentFlow);\n });\n editor.on('SkinLoaded', () => {\n lazyHeader().each(comp => {\n Docking.isDocked(comp) ? Docking.reset(comp) : Docking.refresh(comp);\n });\n });\n editor.on('FullscreenStateChanged', () => {\n lazyHeader().each(Docking.reset);\n });\n }\n editor.on('AfterScrollIntoView', e => {\n lazyHeader().each(header => {\n Docking.refresh(header);\n const headerElem = header.element;\n if (isVisible(headerElem)) {\n scrollFromBehindHeader(e, headerElem);\n }\n });\n });\n editor.on('PostRender', () => {\n updateEditorClasses(editor, false);\n });\n };\n const isDocked = lazyHeader => lazyHeader().map(Docking.isDocked).getOr(false);\n const getIframeBehaviours = () => [Receiving.config({ channels: { [toolbarHeightChange()]: { onReceive: updateIframeContentFlow } } })];\n const getBehaviours = (editor, sharedBackstage) => {\n const focusedElm = value$4();\n const lazySink = sharedBackstage.getSink;\n const runOnSinkElement = f => {\n lazySink().each(sink => f(sink.element));\n };\n const onDockingSwitch = comp => {\n if (!editor.inline) {\n updateIframeContentFlow(comp);\n }\n updateEditorClasses(editor, Docking.isDocked(comp));\n comp.getSystem().broadcastOn([repositionPopups()], {});\n lazySink().each(sink => sink.getSystem().broadcastOn([repositionPopups()], {}));\n };\n const additionalBehaviours = editor.inline ? [] : getIframeBehaviours();\n return [\n Focusing.config({}),\n Docking.config({\n contextual: {\n lazyContext: comp => {\n const headerHeight = getOuter$2(comp.element);\n const container = editor.inline ? editor.getContentAreaContainer() : editor.getContainer();\n return Optional.from(container).map(c => {\n const box = box$1(SugarElement.fromDom(c));\n const optScrollingContext = detectWhenSplitUiMode(editor, comp.element);\n return optScrollingContext.fold(() => {\n const boxHeight = box.height - headerHeight;\n const topBound = box.y + (isDockedMode(comp, 'top') ? 0 : headerHeight);\n return bounds(box.x, topBound, box.width, boxHeight);\n }, scrollEnv => {\n const constrainedBounds = constrain(box, getBoundsFrom(scrollEnv));\n const constrainedBoundsY = isDockedMode(comp, 'top') ? constrainedBounds.y : constrainedBounds.y + headerHeight;\n return bounds(constrainedBounds.x, constrainedBoundsY, constrainedBounds.width, constrainedBounds.height - headerHeight);\n });\n });\n },\n onShow: () => {\n runOnSinkElement(elem => updateSinkVisibility(elem, true));\n },\n onShown: comp => {\n runOnSinkElement(elem => remove$2(elem, [\n visibility.transitionClass,\n visibility.fadeInClass\n ]));\n focusedElm.get().each(elem => {\n restoreFocus(comp.element, elem);\n focusedElm.clear();\n });\n },\n onHide: comp => {\n findFocusedElem(comp.element, lazySink).fold(focusedElm.clear, focusedElm.set);\n runOnSinkElement(elem => updateSinkVisibility(elem, false));\n },\n onHidden: () => {\n runOnSinkElement(elem => remove$2(elem, [visibility.transitionClass]));\n },\n ...visibility\n },\n lazyViewport: comp => {\n const optScrollingContext = detectWhenSplitUiMode(editor, comp.element);\n return optScrollingContext.fold(() => {\n const boundsWithoutOffset = win();\n const offset = getStickyToolbarOffset(editor);\n const top = boundsWithoutOffset.y + (isDockedMode(comp, 'top') && !isFullscreen(editor) ? offset : 0);\n const height = boundsWithoutOffset.height - (isDockedMode(comp, 'bottom') ? offset : 0);\n return {\n bounds: bounds(boundsWithoutOffset.x, top, boundsWithoutOffset.width, height),\n optScrollEnv: Optional.none()\n };\n }, sc => {\n const combinedBounds = getBoundsFrom(sc);\n return {\n bounds: combinedBounds,\n optScrollEnv: Optional.some({\n currentScrollTop: sc.element.dom.scrollTop,\n scrollElmTop: absolute$3(sc.element).top\n })\n };\n });\n },\n modes: [sharedBackstage.header.getDockingMode()],\n onDocked: onDockingSwitch,\n onUndocked: onDockingSwitch\n }),\n ...additionalBehaviours\n ];\n };\n\n var StickyHeader = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setup: setup$9,\n isDocked: isDocked,\n getBehaviours: getBehaviours\n });\n\n const renderHeader = spec => {\n const editor = spec.editor;\n const getBehaviours$2 = spec.sticky ? getBehaviours : getBehaviours$1;\n return {\n uid: spec.uid,\n dom: spec.dom,\n components: spec.components,\n behaviours: derive$1(getBehaviours$2(editor, spec.sharedBackstage))\n };\n };\n\n const groupToolbarButtonSchema = objOf([\n type,\n requiredOf('items', oneOf([\n arrOfObj([\n name$1,\n requiredArrayOf('items', string)\n ]),\n string\n ]))\n ].concat(baseToolbarButtonFields));\n const createGroupToolbarButton = spec => asRaw('GroupToolbarButton', groupToolbarButtonSchema, spec);\n\n const baseMenuButtonFields = [\n optionString('text'),\n optionString('tooltip'),\n optionString('icon'),\n defaultedOf('search', false, oneOf([\n boolean,\n objOf([optionString('placeholder')])\n ], x => {\n if (isBoolean(x)) {\n return x ? Optional.some({ placeholder: Optional.none() }) : Optional.none();\n } else {\n return Optional.some(x);\n }\n })),\n requiredFunction('fetch'),\n defaultedFunction('onSetup', () => noop),\n defaultedString('context', 'mode:design')\n ];\n\n const MenuButtonSchema = objOf([\n type,\n ...baseMenuButtonFields\n ]);\n const createMenuButton = spec => asRaw('menubutton', MenuButtonSchema, spec);\n\n const splitButtonSchema = objOf([\n type,\n optionalTooltip,\n optionalIcon,\n optionalText,\n optionalSelect,\n fetch$1,\n onSetup,\n defaultedStringEnum('presets', 'normal', [\n 'normal',\n 'color',\n 'listpreview'\n ]),\n defaultedColumns(1),\n onAction,\n onItemAction,\n defaultedString('context', 'mode:design')\n ]);\n const createSplitButton = spec => asRaw('SplitButton', splitButtonSchema, spec);\n\n const factory$d = (detail, spec) => {\n const setMenus = (comp, menus) => {\n const newMenus = map$2(menus, m => {\n const buttonSpec = {\n type: 'menubutton',\n text: m.text,\n fetch: callback => {\n callback(m.getItems());\n },\n context: 'any'\n };\n const internal = createMenuButton(buttonSpec).mapError(errInfo => formatError(errInfo)).getOrDie();\n return renderMenuButton(internal, 'tox-mbtn', spec.backstage, Optional.some('menuitem'));\n });\n Replacing.set(comp, newMenus);\n };\n const apis = {\n focus: Keying.focusIn,\n setMenus\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: [],\n behaviours: derive$1([\n Replacing.config({}),\n config('menubar-events', [\n runOnAttached(component => {\n detail.onSetup(component);\n }),\n run$1(mouseover(), (comp, se) => {\n descendant(comp.element, '.' + 'tox-mbtn--active').each(activeButton => {\n closest$1(se.event.target, '.' + 'tox-mbtn').each(hoveredButton => {\n if (!eq(activeButton, hoveredButton)) {\n comp.getSystem().getByDom(activeButton).each(activeComp => {\n comp.getSystem().getByDom(hoveredButton).each(hoveredComp => {\n Dropdown.expand(hoveredComp);\n Dropdown.close(activeComp);\n Focusing.focus(hoveredComp);\n });\n });\n }\n });\n });\n }),\n run$1(focusShifted(), (comp, se) => {\n se.event.prevFocus.bind(prev => comp.getSystem().getByDom(prev).toOptional()).each(prev => {\n se.event.newFocus.bind(nu => comp.getSystem().getByDom(nu).toOptional()).each(nu => {\n if (Dropdown.isOpen(prev)) {\n Dropdown.expand(nu);\n Dropdown.close(prev);\n }\n });\n });\n })\n ]),\n Keying.config({\n mode: 'flow',\n selector: '.' + 'tox-mbtn',\n onEscape: comp => {\n detail.onEscape(comp);\n return Optional.some(true);\n }\n }),\n Tabstopping.config({})\n ]),\n apis,\n domModification: { attributes: { role: 'menubar' } }\n };\n };\n var SilverMenubar = single({\n factory: factory$d,\n name: 'silver.Menubar',\n configFields: [\n required$1('dom'),\n required$1('uid'),\n required$1('onEscape'),\n required$1('backstage'),\n defaulted('onSetup', noop)\n ],\n apis: {\n focus: (apis, comp) => {\n apis.focus(comp);\n },\n setMenus: (apis, comp, menus) => {\n apis.setMenus(comp, menus);\n }\n }\n });\n\n const promotionMessage = '\\u26A1\\ufe0fUpgrade';\n const promotionLink = 'https://www.tiny.cloud/tinymce-self-hosted-premium-features/?utm_campaign=self_hosted_upgrade_promo&utm_source=tiny&utm_medium=referral';\n const renderPromotion = spec => {\n return {\n uid: spec.uid,\n dom: spec.dom,\n components: [{\n dom: {\n tag: 'a',\n attributes: {\n 'href': promotionLink,\n 'rel': 'noopener',\n 'target': '_blank',\n 'aria-hidden': 'true'\n },\n classes: ['tox-promotion-link'],\n innerHtml: promotionMessage\n }\n }]\n };\n };\n\n const owner = 'container';\n const schema$d = [field('slotBehaviours', [])];\n const getPartName = name => '';\n const sketch = sSpec => {\n const parts = (() => {\n const record = [];\n const slot = (name, config) => {\n record.push(name);\n return generateOne$1(owner, getPartName(name), config);\n };\n return {\n slot,\n record: constant$1(record)\n };\n })();\n const spec = sSpec(parts);\n const partNames = parts.record();\n const fieldParts = map$2(partNames, n => required({\n name: n,\n pname: getPartName(n)\n }));\n return composite$1(owner, schema$d, fieldParts, make$1, spec);\n };\n const make$1 = (detail, components) => {\n const getSlotNames = _ => getAllPartNames(detail);\n const getSlot = (container, key) => getPart(container, detail, key);\n const onSlot = (f, def) => (container, key) => getPart(container, detail, key).map(slot => f(slot, key)).getOr(def);\n const onSlots = f => (container, keys) => {\n each$1(keys, key => f(container, key));\n };\n const doShowing = (comp, _key) => get$g(comp.element, 'aria-hidden') !== 'true';\n const doShow = (comp, key) => {\n if (!doShowing(comp)) {\n const element = comp.element;\n remove$7(element, 'display');\n remove$8(element, 'aria-hidden');\n emitWith(comp, slotVisibility(), {\n name: key,\n visible: true\n });\n }\n };\n const doHide = (comp, key) => {\n if (doShowing(comp)) {\n const element = comp.element;\n set$8(element, 'display', 'none');\n set$9(element, 'aria-hidden', 'true');\n emitWith(comp, slotVisibility(), {\n name: key,\n visible: false\n });\n }\n };\n const isShowing = onSlot(doShowing, false);\n const hideSlot = onSlot(doHide);\n const hideSlots = onSlots(hideSlot);\n const hideAllSlots = container => hideSlots(container, getSlotNames());\n const showSlot = onSlot(doShow);\n const apis = {\n getSlotNames,\n getSlot,\n isShowing,\n hideSlot,\n hideAllSlots,\n showSlot\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: get$4(detail.slotBehaviours),\n apis\n };\n };\n const slotApis = map$1({\n getSlotNames: (apis, c) => apis.getSlotNames(c),\n getSlot: (apis, c, key) => apis.getSlot(c, key),\n isShowing: (apis, c, key) => apis.isShowing(c, key),\n hideSlot: (apis, c, key) => apis.hideSlot(c, key),\n hideAllSlots: (apis, c) => apis.hideAllSlots(c),\n showSlot: (apis, c, key) => apis.showSlot(c, key)\n }, value => makeApi(value));\n const SlotContainer = {\n ...slotApis,\n ...{ sketch }\n };\n\n const sidebarSchema = objOf([\n optionalIcon,\n optionalTooltip,\n defaultedFunction('onShow', noop),\n defaultedFunction('onHide', noop),\n onSetup\n ]);\n const createSidebar = spec => asRaw('sidebar', sidebarSchema, spec);\n\n const setup$8 = editor => {\n const {sidebars} = editor.ui.registry.getAll();\n each$1(keys(sidebars), name => {\n const spec = sidebars[name];\n const isActive = () => is$1(Optional.from(editor.queryCommandValue('ToggleSidebar')), name);\n editor.ui.registry.addToggleButton(name, {\n icon: spec.icon,\n tooltip: spec.tooltip,\n onAction: buttonApi => {\n editor.execCommand('ToggleSidebar', false, name);\n buttonApi.setActive(isActive());\n },\n onSetup: buttonApi => {\n buttonApi.setActive(isActive());\n const handleToggle = () => buttonApi.setActive(isActive());\n editor.on('ToggleSidebar', handleToggle);\n return () => {\n editor.off('ToggleSidebar', handleToggle);\n };\n },\n context: 'any'\n });\n });\n };\n const getApi = comp => ({ element: () => comp.element.dom });\n const makePanels = (parts, panelConfigs) => {\n const specs = map$2(keys(panelConfigs), name => {\n const spec = panelConfigs[name];\n const bridged = getOrDie(createSidebar(spec));\n return {\n name,\n getApi,\n onSetup: bridged.onSetup,\n onShow: bridged.onShow,\n onHide: bridged.onHide\n };\n });\n return map$2(specs, spec => {\n const editorOffCell = Cell(noop);\n return parts.slot(spec.name, {\n dom: {\n tag: 'div',\n classes: ['tox-sidebar__pane']\n },\n behaviours: SimpleBehaviours.unnamedEvents([\n onControlAttached(spec, editorOffCell),\n onControlDetached(spec, editorOffCell),\n run$1(slotVisibility(), (sidepanel, se) => {\n const data = se.event;\n const optSidePanelSpec = find$5(specs, config => config.name === data.name);\n optSidePanelSpec.each(sidePanelSpec => {\n const handler = data.visible ? sidePanelSpec.onShow : sidePanelSpec.onHide;\n handler(sidePanelSpec.getApi(sidepanel));\n });\n })\n ])\n });\n });\n };\n const makeSidebar = panelConfigs => SlotContainer.sketch(parts => ({\n dom: {\n tag: 'div',\n classes: ['tox-sidebar__pane-container']\n },\n components: makePanels(parts, panelConfigs),\n slotBehaviours: SimpleBehaviours.unnamedEvents([runOnAttached(slotContainer => SlotContainer.hideAllSlots(slotContainer))])\n }));\n const setSidebar = (sidebar, panelConfigs, showSidebar) => {\n const optSlider = Composing.getCurrent(sidebar);\n optSlider.each(slider => {\n Replacing.set(slider, [makeSidebar(panelConfigs)]);\n const configKey = showSidebar === null || showSidebar === void 0 ? void 0 : showSidebar.toLowerCase();\n if (isString(configKey) && has$2(panelConfigs, configKey)) {\n Composing.getCurrent(slider).each(slotContainer => {\n SlotContainer.showSlot(slotContainer, configKey);\n Sliding.immediateGrow(slider);\n remove$7(slider.element, 'width');\n updateSidebarRoleOnToggle(sidebar.element, 'region');\n });\n }\n });\n };\n const updateSidebarRoleOnToggle = (sidebar, sidebarState) => {\n set$9(sidebar, 'role', sidebarState);\n };\n const toggleSidebar = (sidebar, name) => {\n const optSlider = Composing.getCurrent(sidebar);\n optSlider.each(slider => {\n const optSlotContainer = Composing.getCurrent(slider);\n optSlotContainer.each(slotContainer => {\n if (Sliding.hasGrown(slider)) {\n if (SlotContainer.isShowing(slotContainer, name)) {\n Sliding.shrink(slider);\n updateSidebarRoleOnToggle(sidebar.element, 'presentation');\n } else {\n SlotContainer.hideAllSlots(slotContainer);\n SlotContainer.showSlot(slotContainer, name);\n updateSidebarRoleOnToggle(sidebar.element, 'region');\n }\n } else {\n SlotContainer.hideAllSlots(slotContainer);\n SlotContainer.showSlot(slotContainer, name);\n Sliding.grow(slider);\n updateSidebarRoleOnToggle(sidebar.element, 'region');\n }\n });\n });\n };\n const whichSidebar = sidebar => {\n const optSlider = Composing.getCurrent(sidebar);\n return optSlider.bind(slider => {\n const sidebarOpen = Sliding.isGrowing(slider) || Sliding.hasGrown(slider);\n if (sidebarOpen) {\n const optSlotContainer = Composing.getCurrent(slider);\n return optSlotContainer.bind(slotContainer => find$5(SlotContainer.getSlotNames(slotContainer), name => SlotContainer.isShowing(slotContainer, name)));\n } else {\n return Optional.none();\n }\n });\n };\n const fixSize = generate$6('FixSizeEvent');\n const autoSize = generate$6('AutoSizeEvent');\n const renderSidebar = spec => ({\n uid: spec.uid,\n dom: {\n tag: 'div',\n classes: ['tox-sidebar'],\n attributes: { role: 'presentation' }\n },\n components: [{\n dom: {\n tag: 'div',\n classes: ['tox-sidebar__slider']\n },\n components: [],\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({}),\n Sliding.config({\n dimension: { property: 'width' },\n closedClass: 'tox-sidebar--sliding-closed',\n openClass: 'tox-sidebar--sliding-open',\n shrinkingClass: 'tox-sidebar--sliding-shrinking',\n growingClass: 'tox-sidebar--sliding-growing',\n onShrunk: slider => {\n const optSlotContainer = Composing.getCurrent(slider);\n optSlotContainer.each(SlotContainer.hideAllSlots);\n emit(slider, autoSize);\n },\n onGrown: slider => {\n emit(slider, autoSize);\n },\n onStartGrow: slider => {\n emitWith(slider, fixSize, { width: getRaw(slider.element, 'width').getOr('') });\n },\n onStartShrink: slider => {\n emitWith(slider, fixSize, { width: get$d(slider.element) + 'px' });\n }\n }),\n Replacing.config({}),\n Composing.config({\n find: comp => {\n const children = Replacing.contents(comp);\n return head(children);\n }\n })\n ])\n }],\n behaviours: derive$1([\n ComposingConfigs.childAt(0),\n config('sidebar-sliding-events', [\n run$1(fixSize, (comp, se) => {\n set$8(comp.element, 'width', se.event.width);\n }),\n run$1(autoSize, (comp, _se) => {\n remove$7(comp.element, 'width');\n })\n ])\n ])\n });\n\n const block = (component, config, state, getBusySpec) => {\n set$9(component.element, 'aria-busy', true);\n const root = config.getRoot(component).getOr(component);\n const blockerBehaviours = derive$1([\n Keying.config({\n mode: 'special',\n onTab: () => Optional.some(true),\n onShiftTab: () => Optional.some(true)\n }),\n Focusing.config({})\n ]);\n const blockSpec = getBusySpec(root, blockerBehaviours);\n const blocker = root.getSystem().build(blockSpec);\n Replacing.append(root, premade(blocker));\n if (blocker.hasConfigured(Keying) && config.focus) {\n Keying.focusIn(blocker);\n }\n if (!state.isBlocked()) {\n config.onBlock(component);\n }\n state.blockWith(() => Replacing.remove(root, blocker));\n };\n const unblock = (component, config, state) => {\n remove$8(component.element, 'aria-busy');\n if (state.isBlocked()) {\n config.onUnblock(component);\n }\n state.clear();\n };\n const isBlocked = (component, blockingConfig, blockingState) => blockingState.isBlocked();\n\n var BlockingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n block: block,\n unblock: unblock,\n isBlocked: isBlocked\n });\n\n var BlockingSchema = [\n defaultedFunction('getRoot', Optional.none),\n defaultedBoolean('focus', true),\n onHandler('onBlock'),\n onHandler('onUnblock')\n ];\n\n const init$4 = () => {\n const blocker = destroyable();\n const blockWith = destroy => {\n blocker.set({ destroy });\n };\n return nu$7({\n readState: blocker.isSet,\n blockWith,\n clear: blocker.clear,\n isBlocked: blocker.isSet\n });\n };\n\n var BlockingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$4\n });\n\n const Blocking = create$4({\n fields: BlockingSchema,\n name: 'blocking',\n apis: BlockingApis,\n state: BlockingState\n });\n\n const getBusySpec$1 = providerBackstage => (_root, _behaviours) => ({\n dom: {\n tag: 'div',\n attributes: {\n 'aria-label': providerBackstage.translate('Loading...'),\n 'tabindex': '0'\n },\n classes: ['tox-throbber__busy-spinner']\n },\n components: [{ dom: fromHtml('
    ') }]\n });\n const focusBusyComponent = throbber => Composing.getCurrent(throbber).each(comp => focus$3(comp.element, true));\n const toggleEditorTabIndex = (editor, state) => {\n const tabIndexAttr = 'tabindex';\n const dataTabIndexAttr = `data-mce-${ tabIndexAttr }`;\n Optional.from(editor.iframeElement).map(SugarElement.fromDom).each(iframe => {\n if (state) {\n getOpt(iframe, tabIndexAttr).each(tabIndex => set$9(iframe, dataTabIndexAttr, tabIndex));\n set$9(iframe, tabIndexAttr, -1);\n } else {\n remove$8(iframe, tabIndexAttr);\n getOpt(iframe, dataTabIndexAttr).each(tabIndex => {\n set$9(iframe, tabIndexAttr, tabIndex);\n remove$8(iframe, dataTabIndexAttr);\n });\n }\n });\n };\n const toggleThrobber = (editor, comp, state, providerBackstage) => {\n const element = comp.element;\n toggleEditorTabIndex(editor, state);\n if (state) {\n Blocking.block(comp, getBusySpec$1(providerBackstage));\n remove$7(element, 'display');\n remove$8(element, 'aria-hidden');\n if (editor.hasFocus()) {\n focusBusyComponent(comp);\n }\n } else {\n const throbberFocus = Composing.getCurrent(comp).exists(busyComp => hasFocus(busyComp.element));\n Blocking.unblock(comp);\n set$8(element, 'display', 'none');\n set$9(element, 'aria-hidden', 'true');\n if (throbberFocus) {\n editor.focus();\n }\n }\n };\n const renderThrobber = spec => ({\n uid: spec.uid,\n dom: {\n tag: 'div',\n attributes: { 'aria-hidden': 'true' },\n classes: ['tox-throbber'],\n styles: { display: 'none' }\n },\n behaviours: derive$1([\n Replacing.config({}),\n Blocking.config({ focus: false }),\n Composing.config({ find: comp => head(comp.components()) })\n ]),\n components: []\n });\n const isFocusEvent = event => event.type === 'focusin';\n const isPasteBinTarget = event => {\n if (isFocusEvent(event)) {\n const node = event.composed ? head(event.composedPath()) : Optional.from(event.target);\n return node.map(SugarElement.fromDom).filter(isElement$1).exists(targetElm => has(targetElm, 'mce-pastebin'));\n } else {\n return false;\n }\n };\n const setup$7 = (editor, lazyThrobber, sharedBackstage) => {\n const throbberState = Cell(false);\n const timer = value$4();\n const stealFocus = e => {\n if (throbberState.get() && !isPasteBinTarget(e)) {\n e.preventDefault();\n focusBusyComponent(lazyThrobber());\n editor.editorManager.setActive(editor);\n }\n };\n if (!editor.inline) {\n editor.on('PreInit', () => {\n editor.dom.bind(editor.getWin(), 'focusin', stealFocus);\n editor.on('BeforeExecCommand', e => {\n if (e.command.toLowerCase() === 'mcefocus' && e.value !== true) {\n stealFocus(e);\n }\n });\n });\n }\n const toggle = state => {\n if (state !== throbberState.get()) {\n throbberState.set(state);\n toggleThrobber(editor, lazyThrobber(), state, sharedBackstage.providers);\n fireAfterProgressState(editor, state);\n }\n };\n editor.on('ProgressState', e => {\n timer.on(clearTimeout);\n if (isNumber(e.time)) {\n const timerId = global$9.setEditorTimeout(editor, () => toggle(e.state), e.time);\n timer.set(timerId);\n } else {\n toggle(e.state);\n timer.clear();\n }\n });\n };\n\n const generate$1 = (xs, f) => {\n const init = {\n len: 0,\n list: []\n };\n const r = foldl(xs, (b, a) => {\n const value = f(a, b.len);\n return value.fold(constant$1(b), v => ({\n len: v.finish,\n list: b.list.concat([v])\n }));\n }, init);\n return r.list;\n };\n\n const output = (within, extra, withinWidth) => ({\n within,\n extra,\n withinWidth\n });\n const apportion = (units, total, len) => {\n const parray = generate$1(units, (unit, current) => {\n const width = len(unit);\n return Optional.some({\n element: unit,\n start: current,\n finish: current + width,\n width\n });\n });\n const within = filter$2(parray, unit => unit.finish <= total);\n const withinWidth = foldr(within, (acc, el) => acc + el.width, 0);\n const extra = parray.slice(within.length);\n return {\n within,\n extra,\n withinWidth\n };\n };\n const toUnit = parray => map$2(parray, unit => unit.element);\n const fitLast = (within, extra, withinWidth) => {\n const fits = toUnit(within.concat(extra));\n return output(fits, [], withinWidth);\n };\n const overflow = (within, extra, overflower, withinWidth) => {\n const fits = toUnit(within).concat([overflower]);\n return output(fits, toUnit(extra), withinWidth);\n };\n const fitAll = (within, extra, withinWidth) => output(toUnit(within), [], withinWidth);\n const tryFit = (total, units, len) => {\n const divide = apportion(units, total, len);\n return divide.extra.length === 0 ? Optional.some(divide) : Optional.none();\n };\n const partition = (total, units, len, overflower) => {\n const divide = tryFit(total, units, len).getOrThunk(() => apportion(units, total - len(overflower), len));\n const within = divide.within;\n const extra = divide.extra;\n const withinWidth = divide.withinWidth;\n if (extra.length === 1 && extra[0].width <= len(overflower)) {\n return fitLast(within, extra, withinWidth);\n } else if (extra.length >= 1) {\n return overflow(within, extra, overflower, withinWidth);\n } else {\n return fitAll(within, extra, withinWidth);\n }\n };\n\n const setGroups$1 = (toolbar, storedGroups) => {\n const bGroups = map$2(storedGroups, g => premade(g));\n Toolbar.setGroups(toolbar, bGroups);\n };\n const findFocusedComp = comps => findMap(comps, comp => search(comp.element).bind(focusedElm => comp.getSystem().getByDom(focusedElm).toOptional()));\n const refresh$2 = (toolbar, detail, setOverflow) => {\n const builtGroups = detail.builtGroups.get();\n if (builtGroups.length === 0) {\n return;\n }\n const primary = getPartOrDie(toolbar, detail, 'primary');\n const overflowGroup = Coupling.getCoupled(toolbar, 'overflowGroup');\n set$8(primary.element, 'visibility', 'hidden');\n const groups = builtGroups.concat([overflowGroup]);\n const focusedComp = findFocusedComp(groups);\n setOverflow([]);\n setGroups$1(primary, groups);\n const availableWidth = get$d(primary.element);\n const overflows = partition(availableWidth, detail.builtGroups.get(), comp => Math.ceil(comp.element.dom.getBoundingClientRect().width), overflowGroup);\n if (overflows.extra.length === 0) {\n Replacing.remove(primary, overflowGroup);\n setOverflow([]);\n } else {\n setGroups$1(primary, overflows.within);\n setOverflow(overflows.extra);\n }\n remove$7(primary.element, 'visibility');\n reflow(primary.element);\n focusedComp.each(Focusing.focus);\n };\n\n const schema$c = constant$1([\n field('splitToolbarBehaviours', [Coupling]),\n customField('builtGroups', () => Cell([]))\n ]);\n\n const schema$b = constant$1([\n markers$1(['overflowToggledClass']),\n optionFunction('getOverflowBounds'),\n required$1('lazySink'),\n customField('overflowGroups', () => Cell([])),\n onHandler('onOpened'),\n onHandler('onClosed')\n ].concat(schema$c()));\n const parts$7 = constant$1([\n required({\n factory: Toolbar,\n schema: schema$e(),\n name: 'primary'\n }),\n external({\n schema: schema$e(),\n name: 'overflow'\n }),\n external({ name: 'overflow-button' }),\n external({ name: 'overflow-group' })\n ]);\n\n const expandable = constant$1((element, available) => {\n setMax(element, Math.floor(available));\n });\n\n const schema$a = constant$1([\n markers$1(['toggledClass']),\n required$1('lazySink'),\n requiredFunction('fetch'),\n optionFunction('getBounds'),\n optionObjOf('fireDismissalEventInstead', [defaulted('event', dismissRequested())]),\n schema$y(),\n onHandler('onToggled')\n ]);\n const parts$6 = constant$1([\n external({\n name: 'button',\n overrides: detail => ({\n dom: { attributes: { 'aria-haspopup': 'true' } },\n buttonBehaviours: derive$1([Toggling.config({\n toggleClass: detail.markers.toggledClass,\n aria: { mode: 'expanded' },\n toggleOnExecute: false,\n onToggled: detail.onToggled\n })])\n })\n }),\n external({\n factory: Toolbar,\n schema: schema$e(),\n name: 'toolbar',\n overrides: detail => {\n return {\n toolbarBehaviours: derive$1([Keying.config({\n mode: 'cyclic',\n onEscape: comp => {\n getPart(comp, detail, 'button').each(Focusing.focus);\n return Optional.none();\n }\n })])\n };\n }\n })\n ]);\n\n const shouldSkipFocus = value$4();\n const toggleWithoutFocusing = (button, externals) => {\n shouldSkipFocus.set(true);\n toggle(button, externals);\n shouldSkipFocus.clear();\n };\n const toggle = (button, externals) => {\n const toolbarSandbox = Coupling.getCoupled(button, 'toolbarSandbox');\n if (Sandboxing.isOpen(toolbarSandbox)) {\n Sandboxing.close(toolbarSandbox);\n } else {\n Sandboxing.open(toolbarSandbox, externals.toolbar());\n }\n };\n const position = (button, toolbar, detail, layouts) => {\n const bounds = detail.getBounds.map(bounder => bounder());\n const sink = detail.lazySink(button).getOrDie();\n Positioning.positionWithinBounds(sink, toolbar, {\n anchor: {\n type: 'hotspot',\n hotspot: button,\n layouts,\n overrides: { maxWidthFunction: expandable() }\n }\n }, bounds);\n };\n const setGroups = (button, toolbar, detail, layouts, groups) => {\n Toolbar.setGroups(toolbar, groups);\n position(button, toolbar, detail, layouts);\n Toggling.on(button);\n };\n const makeSandbox = (button, spec, detail) => {\n const ariaControls = manager();\n const onOpen = (sandbox, toolbar) => {\n const skipFocus = shouldSkipFocus.get().getOr(false);\n detail.fetch().get(groups => {\n setGroups(button, toolbar, detail, spec.layouts, groups);\n ariaControls.link(button.element);\n if (!skipFocus) {\n Keying.focusIn(toolbar);\n }\n });\n };\n const onClose = () => {\n Toggling.off(button);\n if (!shouldSkipFocus.get().getOr(false)) {\n Focusing.focus(button);\n }\n ariaControls.unlink(button.element);\n };\n return {\n dom: {\n tag: 'div',\n attributes: { id: ariaControls.id }\n },\n behaviours: derive$1([\n Keying.config({\n mode: 'special',\n onEscape: comp => {\n Sandboxing.close(comp);\n return Optional.some(true);\n }\n }),\n Sandboxing.config({\n onOpen,\n onClose,\n isPartOf: (container, data, queryElem) => {\n return isPartOf$1(data, queryElem) || isPartOf$1(button, queryElem);\n },\n getAttachPoint: () => {\n return detail.lazySink(button).getOrDie();\n }\n }),\n Receiving.config({\n channels: {\n ...receivingChannel$1({\n isExtraPart: never,\n ...detail.fireDismissalEventInstead.map(fe => ({ fireEventInstead: { event: fe.event } })).getOr({})\n }),\n ...receivingChannel({\n doReposition: () => {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(toolbar => {\n position(button, toolbar, detail, spec.layouts);\n });\n }\n })\n }\n })\n ])\n };\n };\n const factory$c = (detail, components, spec, externals) => ({\n ...Button.sketch({\n ...externals.button(),\n action: button => {\n toggle(button, externals);\n },\n buttonBehaviours: SketchBehaviours.augment({ dump: externals.button().buttonBehaviours }, [Coupling.config({\n others: {\n toolbarSandbox: button => {\n return makeSandbox(button, spec, detail);\n }\n }\n })])\n }),\n apis: {\n setGroups: (button, groups) => {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(toolbar => {\n setGroups(button, toolbar, detail, spec.layouts, groups);\n });\n },\n reposition: button => {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(toolbar => {\n position(button, toolbar, detail, spec.layouts);\n });\n },\n toggle: button => {\n toggle(button, externals);\n },\n toggleWithoutFocusing: button => {\n toggleWithoutFocusing(button, externals);\n },\n getToolbar: button => {\n return Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox'));\n },\n isOpen: button => {\n return Sandboxing.isOpen(Coupling.getCoupled(button, 'toolbarSandbox'));\n }\n }\n });\n const FloatingToolbarButton = composite({\n name: 'FloatingToolbarButton',\n factory: factory$c,\n configFields: schema$a(),\n partFields: parts$6(),\n apis: {\n setGroups: (apis, button, groups) => {\n apis.setGroups(button, groups);\n },\n reposition: (apis, button) => {\n apis.reposition(button);\n },\n toggle: (apis, button) => {\n apis.toggle(button);\n },\n toggleWithoutFocusing: (apis, button) => {\n apis.toggleWithoutFocusing(button);\n },\n getToolbar: (apis, button) => apis.getToolbar(button),\n isOpen: (apis, button) => apis.isOpen(button)\n }\n });\n\n const schema$9 = constant$1([\n required$1('items'),\n markers$1(['itemSelector']),\n field('tgroupBehaviours', [Keying])\n ]);\n const parts$5 = constant$1([group({\n name: 'items',\n unit: 'item'\n })]);\n\n const factory$b = (detail, components, _spec, _externals) => ({\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.tgroupBehaviours, [Keying.config({\n mode: 'flow',\n selector: detail.markers.itemSelector\n })]),\n domModification: { attributes: { role: 'toolbar' } }\n });\n const ToolbarGroup = composite({\n name: 'ToolbarGroup',\n configFields: schema$9(),\n partFields: parts$5(),\n factory: factory$b\n });\n\n const buildGroups = comps => map$2(comps, g => premade(g));\n const refresh$1 = (toolbar, memFloatingToolbarButton, detail) => {\n refresh$2(toolbar, detail, overflowGroups => {\n detail.overflowGroups.set(overflowGroups);\n memFloatingToolbarButton.getOpt(toolbar).each(floatingToolbarButton => {\n FloatingToolbarButton.setGroups(floatingToolbarButton, buildGroups(overflowGroups));\n });\n });\n };\n const factory$a = (detail, components, spec, externals) => {\n const memFloatingToolbarButton = record(FloatingToolbarButton.sketch({\n fetch: () => Future.nu(resolve => {\n resolve(buildGroups(detail.overflowGroups.get()));\n }),\n layouts: {\n onLtr: () => [\n southwest$2,\n southeast$2\n ],\n onRtl: () => [\n southeast$2,\n southwest$2\n ],\n onBottomLtr: () => [\n northwest$2,\n northeast$2\n ],\n onBottomRtl: () => [\n northeast$2,\n northwest$2\n ]\n },\n getBounds: spec.getOverflowBounds,\n lazySink: detail.lazySink,\n fireDismissalEventInstead: {},\n markers: { toggledClass: detail.markers.overflowToggledClass },\n parts: {\n button: externals['overflow-button'](),\n toolbar: externals.overflow()\n },\n onToggled: (comp, state) => detail[state ? 'onOpened' : 'onClosed'](comp)\n }));\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.splitToolbarBehaviours, [Coupling.config({\n others: {\n overflowGroup: () => {\n return ToolbarGroup.sketch({\n ...externals['overflow-group'](),\n items: [memFloatingToolbarButton.asSpec()]\n });\n }\n }\n })]),\n apis: {\n setGroups: (toolbar, groups) => {\n detail.builtGroups.set(map$2(groups, toolbar.getSystem().build));\n refresh$1(toolbar, memFloatingToolbarButton, detail);\n },\n refresh: toolbar => refresh$1(toolbar, memFloatingToolbarButton, detail),\n toggle: toolbar => {\n memFloatingToolbarButton.getOpt(toolbar).each(floatingToolbarButton => {\n FloatingToolbarButton.toggle(floatingToolbarButton);\n });\n },\n toggleWithoutFocusing: toolbar => {\n memFloatingToolbarButton.getOpt(toolbar).each(FloatingToolbarButton.toggleWithoutFocusing);\n },\n isOpen: toolbar => memFloatingToolbarButton.getOpt(toolbar).map(FloatingToolbarButton.isOpen).getOr(false),\n reposition: toolbar => {\n memFloatingToolbarButton.getOpt(toolbar).each(floatingToolbarButton => {\n FloatingToolbarButton.reposition(floatingToolbarButton);\n });\n },\n getOverflow: toolbar => memFloatingToolbarButton.getOpt(toolbar).bind(FloatingToolbarButton.getToolbar)\n },\n domModification: { attributes: { role: 'group' } }\n };\n };\n const SplitFloatingToolbar = composite({\n name: 'SplitFloatingToolbar',\n configFields: schema$b(),\n partFields: parts$7(),\n factory: factory$a,\n apis: {\n setGroups: (apis, toolbar, groups) => {\n apis.setGroups(toolbar, groups);\n },\n refresh: (apis, toolbar) => {\n apis.refresh(toolbar);\n },\n reposition: (apis, toolbar) => {\n apis.reposition(toolbar);\n },\n toggle: (apis, toolbar) => {\n apis.toggle(toolbar);\n },\n toggleWithoutFocusing: (apis, toolbar) => {\n apis.toggle(toolbar);\n },\n isOpen: (apis, toolbar) => apis.isOpen(toolbar),\n getOverflow: (apis, toolbar) => apis.getOverflow(toolbar)\n }\n });\n\n const schema$8 = constant$1([\n markers$1([\n 'closedClass',\n 'openClass',\n 'shrinkingClass',\n 'growingClass',\n 'overflowToggledClass'\n ]),\n onHandler('onOpened'),\n onHandler('onClosed')\n ].concat(schema$c()));\n const parts$4 = constant$1([\n required({\n factory: Toolbar,\n schema: schema$e(),\n name: 'primary'\n }),\n required({\n factory: Toolbar,\n schema: schema$e(),\n name: 'overflow',\n overrides: detail => {\n return {\n toolbarBehaviours: derive$1([\n Sliding.config({\n dimension: { property: 'height' },\n closedClass: detail.markers.closedClass,\n openClass: detail.markers.openClass,\n shrinkingClass: detail.markers.shrinkingClass,\n growingClass: detail.markers.growingClass,\n onShrunk: comp => {\n getPart(comp, detail, 'overflow-button').each(button => {\n Toggling.off(button);\n });\n detail.onClosed(comp);\n },\n onGrown: comp => {\n detail.onOpened(comp);\n },\n onStartGrow: comp => {\n getPart(comp, detail, 'overflow-button').each(Toggling.on);\n }\n }),\n Keying.config({\n mode: 'acyclic',\n onEscape: comp => {\n getPart(comp, detail, 'overflow-button').each(Focusing.focus);\n return Optional.some(true);\n }\n })\n ])\n };\n }\n }),\n external({\n name: 'overflow-button',\n overrides: detail => ({\n buttonBehaviours: derive$1([Toggling.config({\n toggleClass: detail.markers.overflowToggledClass,\n aria: { mode: 'expanded' },\n toggleOnExecute: false\n })])\n })\n }),\n external({ name: 'overflow-group' })\n ]);\n\n const isOpen = (toolbar, detail) => getPart(toolbar, detail, 'overflow').map(Sliding.hasGrown).getOr(false);\n const toggleToolbar = (toolbar, detail, skipFocus) => {\n getPart(toolbar, detail, 'overflow-button').each(oveflowButton => {\n getPart(toolbar, detail, 'overflow').each(overf => {\n refresh(toolbar, detail);\n if (Sliding.hasShrunk(overf)) {\n const fn = detail.onOpened;\n detail.onOpened = comp => {\n if (!skipFocus) {\n Keying.focusIn(overf);\n }\n fn(comp);\n detail.onOpened = fn;\n };\n } else {\n const fn = detail.onClosed;\n detail.onClosed = comp => {\n if (!skipFocus) {\n Focusing.focus(oveflowButton);\n }\n fn(comp);\n detail.onClosed = fn;\n };\n }\n Sliding.toggleGrow(overf);\n });\n });\n };\n const refresh = (toolbar, detail) => {\n getPart(toolbar, detail, 'overflow').each(overflow => {\n refresh$2(toolbar, detail, groups => {\n const builtGroups = map$2(groups, g => premade(g));\n Toolbar.setGroups(overflow, builtGroups);\n });\n getPart(toolbar, detail, 'overflow-button').each(button => {\n if (Sliding.hasGrown(overflow)) {\n Toggling.on(button);\n }\n });\n Sliding.refresh(overflow);\n });\n };\n const factory$9 = (detail, components, spec, externals) => {\n const toolbarToggleEvent = 'alloy.toolbar.toggle';\n const doSetGroups = (toolbar, groups) => {\n const built = map$2(groups, toolbar.getSystem().build);\n detail.builtGroups.set(built);\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: augment(detail.splitToolbarBehaviours, [\n Coupling.config({\n others: {\n overflowGroup: toolbar => {\n return ToolbarGroup.sketch({\n ...externals['overflow-group'](),\n items: [Button.sketch({\n ...externals['overflow-button'](),\n action: _button => {\n emit(toolbar, toolbarToggleEvent);\n }\n })]\n });\n }\n }\n }),\n config('toolbar-toggle-events', [run$1(toolbarToggleEvent, toolbar => {\n toggleToolbar(toolbar, detail, false);\n })])\n ]),\n apis: {\n setGroups: (toolbar, groups) => {\n doSetGroups(toolbar, groups);\n refresh(toolbar, detail);\n },\n refresh: toolbar => refresh(toolbar, detail),\n toggle: toolbar => {\n toggleToolbar(toolbar, detail, false);\n },\n toggleWithoutFocusing: toolbar => {\n toggleToolbar(toolbar, detail, true);\n },\n isOpen: toolbar => isOpen(toolbar, detail)\n },\n domModification: { attributes: { role: 'group' } }\n };\n };\n const SplitSlidingToolbar = composite({\n name: 'SplitSlidingToolbar',\n configFields: schema$8(),\n partFields: parts$4(),\n factory: factory$9,\n apis: {\n setGroups: (apis, toolbar, groups) => {\n apis.setGroups(toolbar, groups);\n },\n refresh: (apis, toolbar) => {\n apis.refresh(toolbar);\n },\n toggle: (apis, toolbar) => {\n apis.toggle(toolbar);\n },\n isOpen: (apis, toolbar) => apis.isOpen(toolbar)\n }\n });\n\n const renderToolbarGroupCommon = toolbarGroup => {\n const attributes = toolbarGroup.label.isNone() ? toolbarGroup.title.fold(() => ({}), title => ({ attributes: { 'aria-label': title } })) : toolbarGroup.label.fold(() => ({}), label => ({ attributes: { 'aria-label': label } }));\n return {\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__group'].concat(toolbarGroup.label.isSome() ? ['tox-toolbar__group_with_label'] : []),\n ...attributes\n },\n components: [\n ...toolbarGroup.label.map(label => {\n return {\n dom: {\n tag: 'span',\n classes: [\n 'tox-label',\n 'tox-label--context-toolbar'\n ]\n },\n components: [text$2(label)]\n };\n }).toArray(),\n ToolbarGroup.parts.items({})\n ],\n items: toolbarGroup.items,\n markers: { itemSelector: '*:not(.tox-split-button) > .tox-tbtn:not([disabled]), ' + '.tox-split-button:not([disabled]), ' + '.tox-toolbar-nav-item:not([disabled]), ' + '.tox-number-input:not([disabled])' },\n tgroupBehaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({ ignore: true })\n ])\n };\n };\n const renderToolbarGroup = toolbarGroup => ToolbarGroup.sketch(renderToolbarGroupCommon(toolbarGroup));\n const getToolbarBehaviours = (toolbarSpec, modeName) => {\n const onAttached = runOnAttached(component => {\n const groups = map$2(toolbarSpec.initGroups, renderToolbarGroup);\n Toolbar.setGroups(component, groups);\n });\n return derive$1([\n DisablingConfigs.toolbarButton(() => toolbarSpec.providers.checkUiComponentContext('any').shouldDisable),\n toggleOnReceive(() => toolbarSpec.providers.checkUiComponentContext('any')),\n Keying.config({\n mode: modeName,\n onEscape: toolbarSpec.onEscape,\n visibilitySelector: '.tox-toolbar__overflow',\n selector: '.tox-toolbar__group'\n }),\n config('toolbar-events', [onAttached])\n ]);\n };\n const renderMoreToolbarCommon = toolbarSpec => {\n const modeName = toolbarSpec.cyclicKeying ? 'cyclic' : 'acyclic';\n return {\n uid: toolbarSpec.uid,\n dom: {\n tag: 'div',\n classes: ['tox-toolbar-overlord']\n },\n parts: {\n 'overflow-group': renderToolbarGroupCommon({\n title: Optional.none(),\n label: Optional.none(),\n items: []\n }),\n 'overflow-button': renderIconButtonSpec({\n context: 'any',\n name: 'more',\n icon: Optional.some('more-drawer'),\n enabled: true,\n tooltip: Optional.some('Reveal or hide additional toolbar items'),\n primary: false,\n buttonType: Optional.none(),\n borderless: false\n }, Optional.none(), toolbarSpec.providers, [], 'overflow-button')\n },\n splitToolbarBehaviours: getToolbarBehaviours(toolbarSpec, modeName)\n };\n };\n const renderFloatingMoreToolbar = toolbarSpec => {\n const baseSpec = renderMoreToolbarCommon(toolbarSpec);\n const overflowXOffset = 4;\n const primary = SplitFloatingToolbar.parts.primary({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__primary']\n }\n });\n return SplitFloatingToolbar.sketch({\n ...baseSpec,\n lazySink: toolbarSpec.getSink,\n getOverflowBounds: () => {\n const headerElem = toolbarSpec.moreDrawerData.lazyHeader().element;\n const headerBounds = absolute$2(headerElem);\n const docElem = documentElement(headerElem);\n const docBounds = absolute$2(docElem);\n const height = Math.max(docElem.dom.scrollHeight, docBounds.height);\n return bounds(headerBounds.x + overflowXOffset, docBounds.y, headerBounds.width - overflowXOffset * 2, height);\n },\n parts: {\n ...baseSpec.parts,\n overflow: {\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__overflow'],\n attributes: toolbarSpec.attributes\n }\n }\n },\n components: [primary],\n markers: { overflowToggledClass: 'tox-tbtn--enabled' },\n onOpened: comp => toolbarSpec.onToggled(comp, true),\n onClosed: comp => toolbarSpec.onToggled(comp, false)\n });\n };\n const renderSlidingMoreToolbar = toolbarSpec => {\n const primary = SplitSlidingToolbar.parts.primary({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__primary']\n }\n });\n const overflow = SplitSlidingToolbar.parts.overflow({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__overflow']\n }\n });\n const baseSpec = renderMoreToolbarCommon(toolbarSpec);\n return SplitSlidingToolbar.sketch({\n ...baseSpec,\n components: [\n primary,\n overflow\n ],\n markers: {\n openClass: 'tox-toolbar__overflow--open',\n closedClass: 'tox-toolbar__overflow--closed',\n growingClass: 'tox-toolbar__overflow--growing',\n shrinkingClass: 'tox-toolbar__overflow--shrinking',\n overflowToggledClass: 'tox-tbtn--enabled'\n },\n onOpened: comp => {\n comp.getSystem().broadcastOn([toolbarHeightChange()], { type: 'opened' });\n toolbarSpec.onToggled(comp, true);\n },\n onClosed: comp => {\n comp.getSystem().broadcastOn([toolbarHeightChange()], { type: 'closed' });\n toolbarSpec.onToggled(comp, false);\n }\n });\n };\n const renderToolbar = toolbarSpec => {\n const modeName = toolbarSpec.cyclicKeying ? 'cyclic' : 'acyclic';\n return Toolbar.sketch({\n uid: toolbarSpec.uid,\n dom: {\n tag: 'div',\n classes: ['tox-toolbar'].concat(toolbarSpec.type === ToolbarMode$1.scrolling ? ['tox-toolbar--scrolling'] : [])\n },\n components: [Toolbar.parts.groups({})],\n toolbarBehaviours: getToolbarBehaviours(toolbarSpec, modeName)\n });\n };\n\n const baseButtonFields = [\n optionalText,\n optionalIcon,\n optionString('tooltip'),\n defaultedStringEnum('buttonType', 'secondary', [\n 'primary',\n 'secondary'\n ]),\n defaultedBoolean('borderless', false),\n requiredFunction('onAction'),\n defaultedString('context', 'mode:design')\n ];\n const normalButtonFields = [\n ...baseButtonFields,\n text,\n requiredStringEnum('type', ['button'])\n ];\n const toggleButtonFields = [\n ...baseButtonFields,\n defaultedBoolean('active', false),\n requiredStringEnum('type', ['togglebutton'])\n ];\n const schemaWithoutGroupButton = {\n button: normalButtonFields,\n togglebutton: toggleButtonFields\n };\n const groupFields = [\n requiredStringEnum('type', ['group']),\n defaultedArrayOf('buttons', [], choose$1('type', schemaWithoutGroupButton))\n ];\n const viewButtonSchema = choose$1('type', {\n ...schemaWithoutGroupButton,\n group: groupFields\n });\n\n const viewSchema = objOf([\n defaultedArrayOf('buttons', [], viewButtonSchema),\n requiredFunction('onShow'),\n requiredFunction('onHide')\n ]);\n const createView = spec => asRaw('view', viewSchema, spec);\n\n const renderButton = (spec, providers) => {\n var _a, _b;\n const isToggleButton = spec.type === 'togglebutton';\n const optMemIcon = spec.icon.map(memIcon => renderReplaceableIconFromPack(memIcon, providers.icons)).map(record);\n const getAction = () => comp => {\n const setIcon = newIcon => {\n optMemIcon.map(memIcon => memIcon.getOpt(comp).each(displayIcon => {\n Replacing.set(displayIcon, [renderReplaceableIconFromPack(newIcon, providers.icons)]);\n }));\n };\n const setActive = state => {\n const elm = comp.element;\n if (state) {\n add$2(elm, 'tox-button--enabled');\n set$9(elm, 'aria-pressed', true);\n } else {\n remove$3(elm, 'tox-button--enabled');\n remove$8(elm, 'aria-pressed');\n }\n };\n const isActive = () => has(comp.element, 'tox-button--enabled');\n const focus = () => focus$3(comp.element);\n if (isToggleButton) {\n return spec.onAction({\n setIcon,\n setActive,\n isActive,\n focus\n });\n }\n if (spec.type === 'button') {\n return spec.onAction({ setIcon });\n }\n };\n const action = getAction();\n const buttonSpec = {\n ...spec,\n name: isToggleButton ? spec.text.getOr(spec.icon.getOr('')) : (_a = spec.text) !== null && _a !== void 0 ? _a : spec.icon.getOr(''),\n primary: spec.buttonType === 'primary',\n buttonType: Optional.from(spec.buttonType),\n tooltip: spec.tooltip,\n icon: spec.icon,\n enabled: true,\n borderless: spec.borderless\n };\n const buttonTypeClasses = calculateClassesFromButtonType((_b = spec.buttonType) !== null && _b !== void 0 ? _b : 'secondary');\n const optTranslatedText = isToggleButton ? spec.text.map(providers.translate) : Optional.some(providers.translate(spec.text));\n const optTranslatedTextComponed = optTranslatedText.map(text$2);\n const ariaLabelAttributes = buttonSpec.tooltip.or(optTranslatedText).map(al => ({ 'aria-label': providers.translate(al) })).getOr({});\n const optIconSpec = optMemIcon.map(memIcon => memIcon.asSpec());\n const components = componentRenderPipeline([\n optIconSpec,\n optTranslatedTextComponed\n ]);\n const hasIconAndText = spec.icon.isSome() && optTranslatedTextComponed.isSome();\n const dom = {\n tag: 'button',\n classes: buttonTypeClasses.concat(...spec.icon.isSome() && !hasIconAndText ? ['tox-button--icon'] : []).concat(...hasIconAndText ? ['tox-button--icon-and-text'] : []).concat(...spec.borderless ? ['tox-button--naked'] : []).concat(...spec.type === 'togglebutton' && spec.active ? ['tox-button--enabled'] : []),\n attributes: ariaLabelAttributes\n };\n const extraBehaviours = [];\n const iconButtonSpec = renderCommonSpec(buttonSpec, Optional.some(action), extraBehaviours, dom, components, spec.tooltip, providers);\n return Button.sketch(iconButtonSpec);\n };\n\n const renderViewButton = (spec, providers) => renderButton(spec, providers);\n const renderButtonsGroup = (spec, providers) => {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-view__toolbar__group']\n },\n components: map$2(spec.buttons, button => renderViewButton(button, providers))\n };\n };\n const deviceDetection = detect$1().deviceType;\n const isPhone = deviceDetection.isPhone();\n const isTablet = deviceDetection.isTablet();\n const renderViewHeader = spec => {\n let hasGroups = false;\n const endButtons = map$2(spec.buttons, btnspec => {\n if (btnspec.type === 'group') {\n hasGroups = true;\n return renderButtonsGroup(btnspec, spec.providers);\n } else {\n return renderViewButton(btnspec, spec.providers);\n }\n });\n return {\n uid: spec.uid,\n dom: {\n tag: 'div',\n classes: [\n !hasGroups ? 'tox-view__header' : 'tox-view__toolbar',\n ...isPhone || isTablet ? [\n 'tox-view--mobile',\n 'tox-view--scrolling'\n ] : []\n ]\n },\n behaviours: derive$1([\n Focusing.config({}),\n Keying.config({\n mode: 'flow',\n selector: 'button, .tox-button',\n focusInside: FocusInsideModes.OnEnterOrSpaceMode\n })\n ]),\n components: hasGroups ? endButtons : [\n Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-view__header-start']\n },\n components: []\n }),\n Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-view__header-end']\n },\n components: endButtons\n })\n ]\n };\n };\n const renderViewPane = spec => {\n return {\n uid: spec.uid,\n behaviours: derive$1([\n Focusing.config({}),\n Tabstopping.config({})\n ]),\n dom: {\n tag: 'div',\n classes: ['tox-view__pane']\n }\n };\n };\n const factory$8 = (detail, components, _spec, _externals) => {\n const apis = {\n getPane: comp => parts$a.getPart(comp, detail, 'pane'),\n getOnShow: _comp => detail.viewConfig.onShow,\n getOnHide: _comp => detail.viewConfig.onHide\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n behaviours: derive$1([\n Focusing.config({}),\n Keying.config({\n mode: 'cyclic',\n focusInside: FocusInsideModes.OnEnterOrSpaceMode\n })\n ]),\n apis\n };\n };\n var View = composite({\n name: 'silver.View',\n configFields: [required$1('viewConfig')],\n partFields: [\n optional({\n factory: { sketch: renderViewHeader },\n schema: [\n required$1('buttons'),\n required$1('providers')\n ],\n name: 'header'\n }),\n optional({\n factory: { sketch: renderViewPane },\n schema: [],\n name: 'pane'\n })\n ],\n factory: factory$8,\n apis: {\n getPane: (apis, comp) => apis.getPane(comp),\n getOnShow: (apis, comp) => apis.getOnShow(comp),\n getOnHide: (apis, comp) => apis.getOnHide(comp)\n }\n });\n\n const makeViews = (parts, viewConfigs, providers) => {\n return mapToArray(viewConfigs, (config, name) => {\n const internalViewConfig = getOrDie(createView(config));\n return parts.slot(name, View.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-view']\n },\n viewConfig: internalViewConfig,\n components: [\n ...internalViewConfig.buttons.length > 0 ? [View.parts.header({\n buttons: internalViewConfig.buttons,\n providers\n })] : [],\n View.parts.pane({})\n ]\n }));\n });\n };\n const makeSlotContainer = (viewConfigs, providers) => SlotContainer.sketch(parts => ({\n dom: {\n tag: 'div',\n classes: ['tox-view-wrap__slot-container']\n },\n components: makeViews(parts, viewConfigs, providers),\n slotBehaviours: SimpleBehaviours.unnamedEvents([runOnAttached(slotContainer => SlotContainer.hideAllSlots(slotContainer))])\n }));\n const getCurrentName = slotContainer => {\n return find$5(SlotContainer.getSlotNames(slotContainer), name => SlotContainer.isShowing(slotContainer, name));\n };\n const hideContainer = comp => {\n const element = comp.element;\n set$8(element, 'display', 'none');\n set$9(element, 'aria-hidden', 'true');\n };\n const showContainer = comp => {\n const element = comp.element;\n remove$7(element, 'display');\n remove$8(element, 'aria-hidden');\n };\n const makeViewInstanceApi = slot => ({ getContainer: constant$1(slot) });\n const runOnPaneWithInstanceApi = (slotContainer, name, get) => {\n SlotContainer.getSlot(slotContainer, name).each(view => {\n View.getPane(view).each(pane => {\n const onCallback = get(view);\n onCallback(makeViewInstanceApi(pane.element.dom));\n });\n });\n };\n const runOnShow = (slotContainer, name) => runOnPaneWithInstanceApi(slotContainer, name, View.getOnShow);\n const runOnHide = (slotContainer, name) => runOnPaneWithInstanceApi(slotContainer, name, View.getOnHide);\n const factory$7 = (detail, spec) => {\n const setViews = (comp, viewConfigs) => {\n Replacing.set(comp, [makeSlotContainer(viewConfigs, spec.backstage.shared.providers)]);\n };\n const whichView = comp => {\n return Composing.getCurrent(comp).bind(getCurrentName);\n };\n const toggleView = (comp, showMainView, hideMainView, name) => {\n return Composing.getCurrent(comp).exists(slotContainer => {\n const optCurrentSlotName = getCurrentName(slotContainer);\n const isTogglingCurrentView = optCurrentSlotName.exists(current => name === current);\n const exists = SlotContainer.getSlot(slotContainer, name).isSome();\n if (exists) {\n SlotContainer.hideAllSlots(slotContainer);\n if (!isTogglingCurrentView) {\n hideMainView();\n showContainer(comp);\n SlotContainer.showSlot(slotContainer, name);\n runOnShow(slotContainer, name);\n } else {\n hideContainer(comp);\n showMainView();\n }\n optCurrentSlotName.each(prevName => runOnHide(slotContainer, prevName));\n }\n return exists;\n });\n };\n const apis = {\n setViews,\n whichView,\n toggleView\n };\n return {\n uid: detail.uid,\n dom: {\n tag: 'div',\n classes: ['tox-view-wrap'],\n attributes: { 'aria-hidden': 'true' },\n styles: { display: 'none' }\n },\n components: [],\n behaviours: derive$1([\n Replacing.config({}),\n Composing.config({\n find: comp => {\n const children = Replacing.contents(comp);\n return head(children);\n }\n })\n ]),\n apis\n };\n };\n var ViewWrapper = single({\n factory: factory$7,\n name: 'silver.ViewWrapper',\n configFields: [required$1('backstage')],\n apis: {\n setViews: (apis, comp, views) => apis.setViews(comp, views),\n toggleView: (apis, comp, outerContainer, editorCont, name) => apis.toggleView(comp, outerContainer, editorCont, name),\n whichView: (apis, comp) => apis.whichView(comp)\n }\n });\n\n const factory$6 = (detail, components, _spec) => {\n let toolbarDrawerOpenState = false;\n const toggleStatusbar = editorContainer => {\n sibling(editorContainer, '.tox-statusbar').each(statusBar => {\n if (get$f(statusBar, 'display') === 'none' && get$g(statusBar, 'aria-hidden') === 'true') {\n remove$7(statusBar, 'display');\n remove$8(statusBar, 'aria-hidden');\n } else {\n set$8(statusBar, 'display', 'none');\n set$9(statusBar, 'aria-hidden', 'true');\n }\n });\n };\n const apis = {\n getSocket: comp => {\n return parts$a.getPart(comp, detail, 'socket');\n },\n setSidebar: (comp, panelConfigs, showSidebar) => {\n parts$a.getPart(comp, detail, 'sidebar').each(sidebar => setSidebar(sidebar, panelConfigs, showSidebar));\n },\n toggleSidebar: (comp, name) => {\n parts$a.getPart(comp, detail, 'sidebar').each(sidebar => toggleSidebar(sidebar, name));\n },\n whichSidebar: comp => {\n return parts$a.getPart(comp, detail, 'sidebar').bind(whichSidebar).getOrNull();\n },\n getHeader: comp => {\n return parts$a.getPart(comp, detail, 'header');\n },\n getToolbar: comp => {\n return parts$a.getPart(comp, detail, 'toolbar');\n },\n setToolbar: (comp, groups) => {\n parts$a.getPart(comp, detail, 'toolbar').each(toolbar => {\n const renderedGroups = map$2(groups, renderToolbarGroup);\n toolbar.getApis().setGroups(toolbar, renderedGroups);\n });\n },\n setToolbars: (comp, toolbars) => {\n parts$a.getPart(comp, detail, 'multiple-toolbar').each(mToolbar => {\n const renderedToolbars = map$2(toolbars, g => map$2(g, renderToolbarGroup));\n CustomList.setItems(mToolbar, renderedToolbars);\n });\n },\n refreshToolbar: comp => {\n const toolbar = parts$a.getPart(comp, detail, 'toolbar');\n toolbar.each(toolbar => toolbar.getApis().refresh(toolbar));\n },\n toggleToolbarDrawer: comp => {\n parts$a.getPart(comp, detail, 'toolbar').each(toolbar => {\n mapFrom(toolbar.getApis().toggle, toggle => toggle(toolbar));\n });\n },\n toggleToolbarDrawerWithoutFocusing: comp => {\n parts$a.getPart(comp, detail, 'toolbar').each(toolbar => {\n mapFrom(toolbar.getApis().toggleWithoutFocusing, toggleWithoutFocusing => toggleWithoutFocusing(toolbar));\n });\n },\n isToolbarDrawerToggled: comp => {\n return parts$a.getPart(comp, detail, 'toolbar').bind(toolbar => Optional.from(toolbar.getApis().isOpen).map(isOpen => isOpen(toolbar))).getOr(false);\n },\n getThrobber: comp => {\n return parts$a.getPart(comp, detail, 'throbber');\n },\n focusToolbar: comp => {\n const optToolbar = parts$a.getPart(comp, detail, 'toolbar').orThunk(() => parts$a.getPart(comp, detail, 'multiple-toolbar'));\n optToolbar.each(toolbar => {\n Keying.focusIn(toolbar);\n });\n },\n setMenubar: (comp, menus) => {\n parts$a.getPart(comp, detail, 'menubar').each(menubar => {\n SilverMenubar.setMenus(menubar, menus);\n });\n },\n focusMenubar: comp => {\n parts$a.getPart(comp, detail, 'menubar').each(menubar => {\n SilverMenubar.focus(menubar);\n });\n },\n setViews: (comp, viewConfigs) => {\n parts$a.getPart(comp, detail, 'viewWrapper').each(wrapper => {\n ViewWrapper.setViews(wrapper, viewConfigs);\n });\n },\n toggleView: (comp, name) => {\n return parts$a.getPart(comp, detail, 'viewWrapper').exists(wrapper => ViewWrapper.toggleView(wrapper, () => apis.showMainView(comp), () => apis.hideMainView(comp), name));\n },\n whichView: comp => {\n return parts$a.getPart(comp, detail, 'viewWrapper').bind(ViewWrapper.whichView).getOrNull();\n },\n hideMainView: comp => {\n toolbarDrawerOpenState = apis.isToolbarDrawerToggled(comp);\n if (toolbarDrawerOpenState) {\n apis.toggleToolbarDrawer(comp);\n }\n parts$a.getPart(comp, detail, 'editorContainer').each(editorContainer => {\n const element = editorContainer.element;\n toggleStatusbar(element);\n set$8(element, 'display', 'none');\n set$9(element, 'aria-hidden', 'true');\n });\n },\n showMainView: comp => {\n if (toolbarDrawerOpenState) {\n apis.toggleToolbarDrawer(comp);\n }\n parts$a.getPart(comp, detail, 'editorContainer').each(editorContainer => {\n const element = editorContainer.element;\n toggleStatusbar(element);\n remove$7(element, 'display');\n remove$8(element, 'aria-hidden');\n });\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n apis,\n behaviours: detail.behaviours\n };\n };\n const partMenubar = partType.optional({\n factory: SilverMenubar,\n name: 'menubar',\n schema: [required$1('backstage')]\n });\n const toolbarFactory = spec => {\n if (spec.type === ToolbarMode$1.sliding) {\n return renderSlidingMoreToolbar;\n } else if (spec.type === ToolbarMode$1.floating) {\n return renderFloatingMoreToolbar;\n } else {\n return renderToolbar;\n }\n };\n const partMultipleToolbar = partType.optional({\n factory: {\n sketch: spec => CustomList.sketch({\n uid: spec.uid,\n dom: spec.dom,\n listBehaviours: derive$1([Keying.config({\n mode: 'acyclic',\n selector: '.tox-toolbar'\n })]),\n makeItem: () => renderToolbar({\n type: spec.type,\n uid: generate$6('multiple-toolbar-item'),\n cyclicKeying: false,\n initGroups: [],\n providers: spec.providers,\n onEscape: () => {\n spec.onEscape();\n return Optional.some(true);\n }\n }),\n setupItem: (_mToolbar, tc, data, _index) => {\n Toolbar.setGroups(tc, data);\n },\n shell: true\n })\n },\n name: 'multiple-toolbar',\n schema: [\n required$1('dom'),\n required$1('onEscape')\n ]\n });\n const partToolbar = partType.optional({\n factory: {\n sketch: spec => {\n const renderer = toolbarFactory(spec);\n const toolbarSpec = {\n type: spec.type,\n uid: spec.uid,\n onEscape: () => {\n spec.onEscape();\n return Optional.some(true);\n },\n onToggled: (_comp, state) => spec.onToolbarToggled(state),\n cyclicKeying: false,\n initGroups: [],\n getSink: spec.getSink,\n providers: spec.providers,\n moreDrawerData: {\n lazyToolbar: spec.lazyToolbar,\n lazyMoreButton: spec.lazyMoreButton,\n lazyHeader: spec.lazyHeader\n },\n attributes: spec.attributes\n };\n return renderer(toolbarSpec);\n }\n },\n name: 'toolbar',\n schema: [\n required$1('dom'),\n required$1('onEscape'),\n required$1('getSink')\n ]\n });\n const partHeader = partType.optional({\n factory: { sketch: renderHeader },\n name: 'header',\n schema: [required$1('dom')]\n });\n const partPromotion = partType.optional({\n factory: { sketch: renderPromotion },\n name: 'promotion',\n schema: [required$1('dom')]\n });\n const partSocket = partType.optional({\n name: 'socket',\n schema: [required$1('dom')]\n });\n const partSidebar = partType.optional({\n factory: { sketch: renderSidebar },\n name: 'sidebar',\n schema: [required$1('dom')]\n });\n const partThrobber = partType.optional({\n factory: { sketch: renderThrobber },\n name: 'throbber',\n schema: [required$1('dom')]\n });\n const partViewWrapper = partType.optional({\n factory: ViewWrapper,\n name: 'viewWrapper',\n schema: [required$1('backstage')]\n });\n const renderEditorContainer = spec => ({\n uid: spec.uid,\n dom: {\n tag: 'div',\n classes: ['tox-editor-container']\n },\n components: spec.components\n });\n const partEditorContainer = partType.optional({\n factory: { sketch: renderEditorContainer },\n name: 'editorContainer',\n schema: []\n });\n var OuterContainer = composite({\n name: 'OuterContainer',\n factory: factory$6,\n configFields: [\n required$1('dom'),\n required$1('behaviours')\n ],\n partFields: [\n partHeader,\n partMenubar,\n partToolbar,\n partMultipleToolbar,\n partSocket,\n partSidebar,\n partPromotion,\n partThrobber,\n partViewWrapper,\n partEditorContainer\n ],\n apis: {\n getSocket: (apis, comp) => {\n return apis.getSocket(comp);\n },\n setSidebar: (apis, comp, panelConfigs, showSidebar) => {\n apis.setSidebar(comp, panelConfigs, showSidebar);\n },\n toggleSidebar: (apis, comp, name) => {\n apis.toggleSidebar(comp, name);\n },\n whichSidebar: (apis, comp) => {\n return apis.whichSidebar(comp);\n },\n getHeader: (apis, comp) => {\n return apis.getHeader(comp);\n },\n getToolbar: (apis, comp) => {\n return apis.getToolbar(comp);\n },\n setToolbar: (apis, comp, groups) => {\n apis.setToolbar(comp, groups);\n },\n setToolbars: (apis, comp, toolbars) => {\n apis.setToolbars(comp, toolbars);\n },\n refreshToolbar: (apis, comp) => {\n return apis.refreshToolbar(comp);\n },\n toggleToolbarDrawer: (apis, comp) => {\n apis.toggleToolbarDrawer(comp);\n },\n toggleToolbarDrawerWithoutFocusing: (apis, comp) => {\n apis.toggleToolbarDrawerWithoutFocusing(comp);\n },\n isToolbarDrawerToggled: (apis, comp) => {\n return apis.isToolbarDrawerToggled(comp);\n },\n getThrobber: (apis, comp) => {\n return apis.getThrobber(comp);\n },\n setMenubar: (apis, comp, menus) => {\n apis.setMenubar(comp, menus);\n },\n focusMenubar: (apis, comp) => {\n apis.focusMenubar(comp);\n },\n focusToolbar: (apis, comp) => {\n apis.focusToolbar(comp);\n },\n setViews: (apis, comp, views) => {\n apis.setViews(comp, views);\n },\n toggleView: (apis, comp, name) => {\n return apis.toggleView(comp, name);\n },\n whichView: (apis, comp) => {\n return apis.whichView(comp);\n }\n }\n });\n\n const defaultMenubar = 'file edit view insert format tools table help';\n const defaultMenus = {\n file: {\n title: 'File',\n items: 'newdocument restoredraft | preview | importword exportpdf exportword | export print | deleteallconversations'\n },\n edit: {\n title: 'Edit',\n items: 'undo redo | cut copy paste pastetext | selectall | searchreplace'\n },\n view: {\n title: 'View',\n items: 'code revisionhistory | visualaid visualchars visualblocks | spellchecker | preview fullscreen | showcomments'\n },\n insert: {\n title: 'Insert',\n items: 'image link media addcomment pageembed inserttemplate codesample inserttable accordion math | charmap emoticons hr | pagebreak nonbreaking anchor tableofcontents footnotes | mergetags | insertdatetime'\n },\n format: {\n title: 'Format',\n items: 'bold italic underline strikethrough superscript subscript codeformat | styles blocks fontfamily fontsize align lineheight | forecolor backcolor | language | removeformat'\n },\n tools: {\n title: 'Tools',\n items: 'aidialog aishortcuts | spellchecker spellcheckerlanguage | autocorrect capitalization | a11ycheck code typography wordcount addtemplate'\n },\n table: {\n title: 'Table',\n items: 'inserttable | cell row column | advtablesort | tableprops deletetable'\n },\n help: {\n title: 'Help',\n items: 'help'\n }\n };\n const make = (menu, registry, editor) => {\n const removedMenuItems = getRemovedMenuItems(editor).split(/[ ,]/);\n return {\n text: menu.title,\n getItems: () => bind$3(menu.items, i => {\n const itemName = i.toLowerCase();\n if (itemName.trim().length === 0) {\n return [];\n } else if (exists(removedMenuItems, removedMenuItem => removedMenuItem === itemName)) {\n return [];\n } else if (itemName === 'separator' || itemName === '|') {\n return [{ type: 'separator' }];\n } else if (registry.menuItems[itemName]) {\n return [registry.menuItems[itemName]];\n } else {\n return [];\n }\n })\n };\n };\n const parseItemsString = items => {\n return items.split(' ');\n };\n const identifyMenus = (editor, registry) => {\n const rawMenuData = {\n ...defaultMenus,\n ...registry.menus\n };\n const userDefinedMenus = keys(registry.menus).length > 0;\n const menubar = registry.menubar === undefined || registry.menubar === true ? parseItemsString(defaultMenubar) : parseItemsString(registry.menubar === false ? '' : registry.menubar);\n const validMenus = filter$2(menubar, menuName => {\n const isDefaultMenu = has$2(defaultMenus, menuName);\n if (userDefinedMenus) {\n return isDefaultMenu || get$h(registry.menus, menuName).exists(menu => has$2(menu, 'items'));\n } else {\n return isDefaultMenu;\n }\n });\n const menus = map$2(validMenus, menuName => {\n const menuData = rawMenuData[menuName];\n return make({\n title: menuData.title,\n items: parseItemsString(menuData.items)\n }, registry, editor);\n });\n return filter$2(menus, menu => {\n const isNotSeparator = item => isString(item) || item.type !== 'separator';\n return menu.getItems().length > 0 && exists(menu.getItems(), isNotSeparator);\n });\n };\n\n const fireSkinLoaded = editor => {\n const done = () => {\n editor._skinLoaded = true;\n fireSkinLoaded$1(editor);\n };\n return () => {\n if (editor.initialized) {\n done();\n } else {\n editor.on('init', done);\n }\n };\n };\n const fireSkinLoadError = (editor, err) => () => fireSkinLoadError$1(editor, { message: err });\n\n const getSkinResourceIdentifier = editor => {\n const skin = getSkin(editor);\n if (!skin) {\n return Optional.none();\n } else {\n return Optional.from(skin);\n }\n };\n const loadStylesheet = (editor, stylesheetUrl, styleSheetLoader) => {\n editor.on('remove', () => styleSheetLoader.unload(stylesheetUrl));\n return styleSheetLoader.load(stylesheetUrl);\n };\n const loadRawCss = (editor, key, css, styleSheetLoader) => {\n editor.on('remove', () => styleSheetLoader.unloadRawCss(key));\n return styleSheetLoader.loadRawCss(key, css);\n };\n const skinIdentifierToResourceKey = (identifier, filename) => 'ui/' + identifier + '/' + filename;\n const getResourceValue = resourceKey => Optional.from(tinymce.Resource.get(resourceKey)).filter(isString);\n const determineCSSDecision = (editor, filenameBase, skinUrl = '') => {\n const resourceKey = getSkinResourceIdentifier(editor).map(identifier => skinIdentifierToResourceKey(identifier, `${ filenameBase }.css`));\n const resourceValue = resourceKey.bind(getResourceValue);\n return lift2(resourceKey, resourceValue, (key, css) => {\n return {\n _kind: 'load-raw',\n key,\n css\n };\n }).getOrThunk(() => {\n const suffix = editor.editorManager.suffix;\n const skinUiCssUrl = skinUrl + `/${ filenameBase }${ suffix }.css`;\n return {\n _kind: 'load-stylesheet',\n url: skinUiCssUrl\n };\n });\n };\n const loadUiSkins = (editor, skinUrl) => {\n const loader = editor.ui.styleSheetLoader;\n const decision = determineCSSDecision(editor, 'skin', skinUrl);\n switch (decision._kind) {\n case 'load-raw':\n const {key, css} = decision;\n loadRawCss(editor, key, css, loader);\n return Promise.resolve();\n case 'load-stylesheet':\n const {url} = decision;\n return loadStylesheet(editor, url, loader);\n default:\n return Promise.resolve();\n }\n };\n const loadShadowDomUiSkins = (editor, skinUrl) => {\n const isInShadowRoot$1 = isInShadowRoot(SugarElement.fromDom(editor.getElement()));\n if (!isInShadowRoot$1) {\n return Promise.resolve();\n } else {\n const loader = global$8.DOM.styleSheetLoader;\n const decision = determineCSSDecision(editor, 'skin.shadowdom', skinUrl);\n switch (decision._kind) {\n case 'load-raw':\n const {key, css} = decision;\n loadRawCss(editor, key, css, loader);\n return Promise.resolve();\n case 'load-stylesheet':\n const {url} = decision;\n return loadStylesheet(editor, url, loader);\n default:\n return Promise.resolve();\n }\n }\n };\n const loadUiContentCSS = (editor, isInline, skinUrl) => {\n const filenameBase = isInline ? 'content.inline' : 'content';\n const decision = determineCSSDecision(editor, filenameBase, skinUrl);\n switch (decision._kind) {\n case 'load-raw':\n const {key, css} = decision;\n if (isInline) {\n loadRawCss(editor, key, css, editor.ui.styleSheetLoader);\n } else {\n editor.on('PostRender', () => {\n loadRawCss(editor, key, css, editor.dom.styleSheetLoader);\n });\n }\n return Promise.resolve();\n case 'load-stylesheet':\n const {url} = decision;\n if (skinUrl) {\n editor.contentCSS.push(url);\n }\n return Promise.resolve();\n default:\n return Promise.resolve();\n }\n };\n const loadUrlSkin = async (isInline, editor) => {\n const skinUrl = getSkinUrl(editor);\n await loadUiContentCSS(editor, isInline, skinUrl);\n if (!isSkinDisabled(editor) && isString(skinUrl)) {\n return Promise.all([\n loadUiSkins(editor, skinUrl),\n loadShadowDomUiSkins(editor, skinUrl)\n ]).then();\n }\n };\n const loadSkin = (isInline, editor) => {\n return loadUrlSkin(isInline, editor).then(fireSkinLoaded(editor), fireSkinLoadError(editor, 'Skin could not be loaded'));\n };\n const iframe = curry(loadSkin, false);\n const inline = curry(loadSkin, true);\n\n const makeTooltipText = (editor, labelWithPlaceholder, value) => isEmpty(value) ? editor.translate(labelWithPlaceholder) : editor.translate([\n labelWithPlaceholder,\n editor.translate(value)\n ]);\n\n const generateSelectItems = (backstage, spec) => {\n const generateItem = (rawItem, response, invalid, value) => {\n const translatedText = backstage.shared.providers.translate(rawItem.title);\n if (rawItem.type === 'separator') {\n return Optional.some({\n type: 'separator',\n text: translatedText\n });\n } else if (rawItem.type === 'submenu') {\n const items = bind$3(rawItem.getStyleItems(), si => validate(si, response, value));\n if (response === 0 && items.length <= 0) {\n return Optional.none();\n } else {\n return Optional.some({\n type: 'nestedmenuitem',\n text: translatedText,\n enabled: items.length > 0,\n getSubmenuItems: () => bind$3(rawItem.getStyleItems(), si => validate(si, response, value))\n });\n }\n } else {\n return Optional.some({\n type: 'togglemenuitem',\n text: translatedText,\n icon: rawItem.icon,\n active: rawItem.isSelected(value),\n enabled: !invalid,\n onAction: spec.onAction(rawItem),\n ...rawItem.getStylePreview().fold(() => ({}), preview => ({ meta: { style: preview } }))\n });\n }\n };\n const validate = (item, response, value) => {\n const invalid = item.type === 'formatter' && spec.isInvalid(item);\n if (response === 0) {\n return invalid ? [] : generateItem(item, response, false, value).toArray();\n } else {\n return generateItem(item, response, invalid, value).toArray();\n }\n };\n const validateItems = preItems => {\n const value = spec.getCurrentValue();\n const response = spec.shouldHide ? 0 : 1;\n return bind$3(preItems, item => validate(item, response, value));\n };\n const getFetch = (backstage, getStyleItems) => (comp, callback) => {\n const preItems = getStyleItems();\n const items = validateItems(preItems);\n const menu = build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, {\n isHorizontalMenu: false,\n search: Optional.none()\n });\n callback(menu);\n };\n return {\n validateItems,\n getFetch\n };\n };\n const createMenuItems = (backstage, spec) => {\n const dataset = spec.dataset;\n const getStyleItems = dataset.type === 'basic' ? () => map$2(dataset.data, d => processBasic(d, spec.isSelectedFor, spec.getPreviewFor)) : dataset.getData;\n return {\n items: generateSelectItems(backstage, spec),\n getStyleItems\n };\n };\n const createSelectButton = (editor, backstage, spec, getTooltip, textUpdateEventName, btnName) => {\n const {items, getStyleItems} = createMenuItems(backstage, spec);\n const tooltipString = Cell(spec.tooltip);\n const getApi = comp => ({\n getComponent: constant$1(comp),\n setTooltip: tooltip => {\n const translatedTooltip = backstage.shared.providers.translate(tooltip);\n set$9(comp.element, 'aria-label', translatedTooltip);\n tooltipString.set(tooltip);\n }\n });\n const onSetup = api => {\n const handler = e => api.setTooltip(makeTooltipText(editor, getTooltip(e.value), e.value));\n editor.on(textUpdateEventName, handler);\n return composeUnbinders(onSetupEvent(editor, 'NodeChange', api => {\n const comp = api.getComponent();\n spec.updateText(comp);\n Disabling.set(api.getComponent(), !editor.selection.isEditable());\n })(api), () => editor.off(textUpdateEventName, handler));\n };\n return renderCommonDropdown({\n context: 'mode:design',\n text: spec.icon.isSome() ? Optional.none() : spec.text,\n icon: spec.icon,\n ariaLabel: Optional.some(spec.tooltip),\n tooltip: Optional.none(),\n role: Optional.none(),\n fetch: items.getFetch(backstage, getStyleItems),\n onSetup,\n getApi,\n columns: 1,\n presets: 'normal',\n classes: spec.icon.isSome() ? [] : ['bespoke'],\n dropdownBehaviours: [Tooltipping.config({\n ...backstage.shared.providers.tooltips.getConfig({\n tooltipText: backstage.shared.providers.translate(spec.tooltip),\n onShow: comp => {\n if (spec.tooltip !== tooltipString.get()) {\n const translatedTooltip = backstage.shared.providers.translate(tooltipString.get());\n Tooltipping.setComponents(comp, backstage.shared.providers.tooltips.getComponents({ tooltipText: translatedTooltip }));\n }\n }\n })\n })]\n }, 'tox-tbtn', backstage.shared, btnName);\n };\n\n const process = rawFormats => map$2(rawFormats, item => {\n let title = item, format = item;\n const values = item.split('=');\n if (values.length > 1) {\n title = values[0];\n format = values[1];\n }\n return {\n title,\n format\n };\n });\n const buildBasicStaticDataset = data => ({\n type: 'basic',\n data\n });\n var Delimiter;\n (function (Delimiter) {\n Delimiter[Delimiter['SemiColon'] = 0] = 'SemiColon';\n Delimiter[Delimiter['Space'] = 1] = 'Space';\n }(Delimiter || (Delimiter = {})));\n const split = (rawFormats, delimiter) => {\n if (delimiter === Delimiter.SemiColon) {\n return rawFormats.replace(/;$/, '').split(';');\n } else {\n return rawFormats.split(' ');\n }\n };\n const buildBasicSettingsDataset = (editor, settingName, delimiter) => {\n const rawFormats = editor.options.get(settingName);\n const data = process(split(rawFormats, delimiter));\n return {\n type: 'basic',\n data\n };\n };\n\n const menuTitle$4 = 'Align';\n const getTooltipPlaceholder$4 = constant$1('Alignment {0}');\n const fallbackAlignment = 'left';\n const alignMenuItems = [\n {\n title: 'Left',\n icon: 'align-left',\n format: 'alignleft',\n command: 'JustifyLeft'\n },\n {\n title: 'Center',\n icon: 'align-center',\n format: 'aligncenter',\n command: 'JustifyCenter'\n },\n {\n title: 'Right',\n icon: 'align-right',\n format: 'alignright',\n command: 'JustifyRight'\n },\n {\n title: 'Justify',\n icon: 'align-justify',\n format: 'alignjustify',\n command: 'JustifyFull'\n }\n ];\n const getSpec$4 = editor => {\n const getMatchingValue = () => find$5(alignMenuItems, item => editor.formatter.match(item.format));\n const isSelectedFor = format => () => editor.formatter.match(format);\n const getPreviewFor = _format => Optional.none;\n const updateSelectMenuIcon = comp => {\n const match = getMatchingValue();\n const alignment = match.fold(constant$1(fallbackAlignment), item => item.title.toLowerCase());\n emitWith(comp, updateMenuIcon, { icon: `align-${ alignment }` });\n fireAlignTextUpdate(editor, { value: alignment });\n };\n const dataset = buildBasicStaticDataset(alignMenuItems);\n const onAction = rawItem => () => find$5(alignMenuItems, item => item.format === rawItem.format).each(item => editor.execCommand(item.command));\n return {\n tooltip: makeTooltipText(editor, getTooltipPlaceholder$4(), fallbackAlignment),\n text: Optional.none(),\n icon: Optional.some('align-left'),\n isSelectedFor,\n getCurrentValue: Optional.none,\n getPreviewFor,\n onAction,\n updateText: updateSelectMenuIcon,\n dataset,\n shouldHide: false,\n isInvalid: item => !editor.formatter.canApply(item.format)\n };\n };\n const createAlignButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$4(editor), getTooltipPlaceholder$4, 'AlignTextUpdate', 'align');\n const createAlignMenu = (editor, backstage) => {\n const menuItems = createMenuItems(backstage, getSpec$4(editor));\n editor.ui.registry.addNestedMenuItem('align', {\n text: backstage.shared.providers.translate(menuTitle$4),\n onSetup: onSetupEditableToggle(editor),\n getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n });\n };\n\n const findNearest = (editor, getStyles) => {\n const styles = getStyles();\n const formats = map$2(styles, style => style.format);\n return Optional.from(editor.formatter.closest(formats)).bind(fmt => find$5(styles, data => data.format === fmt));\n };\n\n const menuTitle$3 = 'Blocks';\n const getTooltipPlaceholder$3 = constant$1('Block {0}');\n const fallbackFormat = 'Paragraph';\n const getSpec$3 = editor => {\n const isSelectedFor = format => () => editor.formatter.match(format);\n const getPreviewFor = format => () => {\n const fmt = editor.formatter.get(format);\n if (fmt) {\n return Optional.some({\n tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n });\n } else {\n return Optional.none();\n }\n };\n const updateSelectMenuText = comp => {\n const detectedFormat = findNearest(editor, () => dataset.data);\n const text = detectedFormat.fold(constant$1(fallbackFormat), fmt => fmt.title);\n emitWith(comp, updateMenuText, { text });\n fireBlocksTextUpdate(editor, { value: text });\n };\n const dataset = buildBasicSettingsDataset(editor, 'block_formats', Delimiter.SemiColon);\n return {\n tooltip: makeTooltipText(editor, getTooltipPlaceholder$3(), fallbackFormat),\n text: Optional.some(fallbackFormat),\n icon: Optional.none(),\n isSelectedFor,\n getCurrentValue: Optional.none,\n getPreviewFor,\n onAction: onActionToggleFormat$1(editor),\n updateText: updateSelectMenuText,\n dataset,\n shouldHide: false,\n isInvalid: item => !editor.formatter.canApply(item.format)\n };\n };\n const createBlocksButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$3(editor), getTooltipPlaceholder$3, 'BlocksTextUpdate', 'blocks');\n const createBlocksMenu = (editor, backstage) => {\n const menuItems = createMenuItems(backstage, getSpec$3(editor));\n editor.ui.registry.addNestedMenuItem('blocks', {\n text: menuTitle$3,\n onSetup: onSetupEditableToggle(editor),\n getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n });\n };\n\n const menuTitle$2 = 'Fonts';\n const getTooltipPlaceholder$2 = constant$1('Font {0}');\n const systemFont = 'System Font';\n const systemStackFonts = [\n '-apple-system',\n 'Segoe UI',\n 'Roboto',\n 'Helvetica Neue',\n 'sans-serif'\n ];\n const splitFonts = fontFamily => {\n const fonts = fontFamily.split(/\\s*,\\s*/);\n return map$2(fonts, font => font.replace(/^['\"]+|['\"]+$/g, ''));\n };\n const matchesStack = (fonts, stack) => stack.length > 0 && forall(stack, font => fonts.indexOf(font.toLowerCase()) > -1);\n const isSystemFontStack = (fontFamily, userStack) => {\n if (fontFamily.indexOf('-apple-system') === 0 || userStack.length > 0) {\n const fonts = splitFonts(fontFamily.toLowerCase());\n return matchesStack(fonts, systemStackFonts) || matchesStack(fonts, userStack);\n } else {\n return false;\n }\n };\n const getSpec$2 = editor => {\n const getMatchingValue = () => {\n const getFirstFont = fontFamily => fontFamily ? splitFonts(fontFamily)[0] : '';\n const fontFamily = editor.queryCommandValue('FontName');\n const items = dataset.data;\n const font = fontFamily ? fontFamily.toLowerCase() : '';\n const userStack = getDefaultFontStack(editor);\n const matchOpt = find$5(items, item => {\n const format = item.format;\n return format.toLowerCase() === font || getFirstFont(format).toLowerCase() === getFirstFont(font).toLowerCase();\n }).orThunk(() => {\n return someIf(isSystemFontStack(font, userStack), {\n title: systemFont,\n format: font\n });\n });\n return {\n matchOpt,\n font: fontFamily\n };\n };\n const isSelectedFor = item => valueOpt => valueOpt.exists(value => value.format === item);\n const getCurrentValue = () => {\n const {matchOpt} = getMatchingValue();\n return matchOpt;\n };\n const getPreviewFor = item => () => Optional.some({\n tag: 'div',\n styles: item.indexOf('dings') === -1 ? { 'font-family': item } : {}\n });\n const onAction = rawItem => () => {\n editor.undoManager.transact(() => {\n editor.focus();\n editor.execCommand('FontName', false, rawItem.format);\n });\n };\n const updateSelectMenuText = comp => {\n const {matchOpt, font} = getMatchingValue();\n const text = matchOpt.fold(constant$1(font), item => item.title);\n emitWith(comp, updateMenuText, { text });\n fireFontFamilyTextUpdate(editor, { value: text });\n };\n const dataset = buildBasicSettingsDataset(editor, 'font_family_formats', Delimiter.SemiColon);\n return {\n tooltip: makeTooltipText(editor, getTooltipPlaceholder$2(), systemFont),\n text: Optional.some(systemFont),\n icon: Optional.none(),\n isSelectedFor,\n getCurrentValue,\n getPreviewFor,\n onAction,\n updateText: updateSelectMenuText,\n dataset,\n shouldHide: false,\n isInvalid: never\n };\n };\n const createFontFamilyButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$2(editor), getTooltipPlaceholder$2, 'FontFamilyTextUpdate', 'fontfamily');\n const createFontFamilyMenu = (editor, backstage) => {\n const menuItems = createMenuItems(backstage, getSpec$2(editor));\n editor.ui.registry.addNestedMenuItem('fontfamily', {\n text: backstage.shared.providers.translate(menuTitle$2),\n onSetup: onSetupEditableToggle(editor),\n getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n });\n };\n\n const units = {\n unsupportedLength: [\n 'em',\n 'ex',\n 'cap',\n 'ch',\n 'ic',\n 'rem',\n 'lh',\n 'rlh',\n 'vw',\n 'vh',\n 'vi',\n 'vb',\n 'vmin',\n 'vmax',\n 'cm',\n 'mm',\n 'Q',\n 'in',\n 'pc',\n 'pt',\n 'px'\n ],\n fixed: [\n 'px',\n 'pt'\n ],\n relative: ['%'],\n empty: ['']\n };\n const pattern = (() => {\n const decimalDigits = '[0-9]+';\n const signedInteger = '[+-]?' + decimalDigits;\n const exponentPart = '[eE]' + signedInteger;\n const dot = '\\\\.';\n const opt = input => `(?:${ input })?`;\n const unsignedDecimalLiteral = [\n 'Infinity',\n decimalDigits + dot + opt(decimalDigits) + opt(exponentPart),\n dot + decimalDigits + opt(exponentPart),\n decimalDigits + opt(exponentPart)\n ].join('|');\n const float = `[+-]?(?:${ unsignedDecimalLiteral })`;\n return new RegExp(`^(${ float })(.*)$`);\n })();\n const isUnit = (unit, accepted) => exists(accepted, acc => exists(units[acc], check => unit === check));\n const parse = (input, accepted) => {\n const match = Optional.from(pattern.exec(input));\n return match.bind(array => {\n const value = Number(array[1]);\n const unitRaw = array[2];\n if (isUnit(unitRaw, accepted)) {\n return Optional.some({\n value,\n unit: unitRaw\n });\n } else {\n return Optional.none();\n }\n });\n };\n const normalise = (input, accepted) => parse(input, accepted).map(({value, unit}) => value + unit);\n\n const Keys = {\n tab: constant$1(9),\n escape: constant$1(27),\n enter: constant$1(13),\n backspace: constant$1(8),\n delete: constant$1(46),\n left: constant$1(37),\n up: constant$1(38),\n right: constant$1(39),\n down: constant$1(40),\n space: constant$1(32),\n home: constant$1(36),\n end: constant$1(35),\n pageUp: constant$1(33),\n pageDown: constant$1(34)\n };\n\n const createBespokeNumberInput = (editor, backstage, spec, btnName) => {\n let currentComp = Optional.none();\n const getValueFromCurrentComp = comp => comp.map(alloyComp => Representing.getValue(alloyComp)).getOr('');\n const onSetup = onSetupEvent(editor, 'NodeChange SwitchMode DisabledStateChange', api => {\n const comp = api.getComponent();\n currentComp = Optional.some(comp);\n spec.updateInputValue(comp);\n Disabling.set(comp, !editor.selection.isEditable() || isDisabled(editor));\n });\n const getApi = comp => ({ getComponent: constant$1(comp) });\n const editorOffCell = Cell(noop);\n const customEvents = generate$6('custom-number-input-events');\n const changeValue = (f, fromInput, focusBack) => {\n const text = getValueFromCurrentComp(currentComp);\n const newValue = spec.getNewValue(text, f);\n const lenghtDelta = text.length - `${ newValue }`.length;\n const oldStart = currentComp.map(comp => comp.element.dom.selectionStart - lenghtDelta);\n const oldEnd = currentComp.map(comp => comp.element.dom.selectionEnd - lenghtDelta);\n spec.onAction(newValue, focusBack);\n currentComp.each(comp => {\n Representing.setValue(comp, newValue);\n if (fromInput) {\n oldStart.each(oldStart => comp.element.dom.selectionStart = oldStart);\n oldEnd.each(oldEnd => comp.element.dom.selectionEnd = oldEnd);\n }\n });\n };\n const decrease = (fromInput, focusBack) => changeValue((n, s) => n - s, fromInput, focusBack);\n const increase = (fromInput, focusBack) => changeValue((n, s) => n + s, fromInput, focusBack);\n const goToParent = comp => parentElement(comp.element).fold(Optional.none, parent => {\n focus$3(parent);\n return Optional.some(true);\n });\n const focusInput = comp => {\n if (hasFocus(comp.element)) {\n firstChild(comp.element).each(input => focus$3(input));\n return Optional.some(true);\n } else {\n return Optional.none();\n }\n };\n const makeStepperButton = (action, title, tooltip, classes) => {\n const editorOffCellStepButton = Cell(noop);\n const translatedTooltip = backstage.shared.providers.translate(tooltip);\n const altExecuting = generate$6('altExecuting');\n const onSetup = onSetupEvent(editor, 'NodeChange SwitchMode DisabledStateChange', api => {\n Disabling.set(api.getComponent(), !editor.selection.isEditable() || isDisabled(editor));\n });\n const onClick = comp => {\n if (!Disabling.isDisabled(comp)) {\n action(true);\n }\n };\n return Button.sketch({\n dom: {\n tag: 'button',\n attributes: {\n 'aria-label': translatedTooltip,\n 'data-mce-name': title\n },\n classes: classes.concat(title)\n },\n components: [renderIconFromPack$1(title, backstage.shared.providers.icons)],\n buttonBehaviours: derive$1([\n Disabling.config({}),\n Tooltipping.config(backstage.shared.providers.tooltips.getConfig({ tooltipText: translatedTooltip })),\n config(altExecuting, [\n onControlAttached({\n onSetup,\n getApi\n }, editorOffCellStepButton),\n onControlDetached({ getApi }, editorOffCellStepButton),\n run$1(keydown(), (comp, se) => {\n if (se.event.raw.keyCode === Keys.space() || se.event.raw.keyCode === Keys.enter()) {\n if (!Disabling.isDisabled(comp)) {\n action(false);\n }\n }\n }),\n run$1(click(), onClick),\n run$1(touchend(), onClick)\n ])\n ]),\n eventOrder: {\n [keydown()]: [\n altExecuting,\n 'keying'\n ],\n [click()]: [\n altExecuting,\n 'alloy.base.behaviour'\n ],\n [touchend()]: [\n altExecuting,\n 'alloy.base.behaviour'\n ],\n [attachedToDom()]: [\n 'alloy.base.behaviour',\n altExecuting,\n 'tooltipping'\n ],\n [detachedFromDom()]: [\n altExecuting,\n 'tooltipping'\n ]\n }\n });\n };\n const memMinus = record(makeStepperButton(focusBack => decrease(false, focusBack), 'minus', 'Decrease font size', []));\n const memPlus = record(makeStepperButton(focusBack => increase(false, focusBack), 'plus', 'Increase font size', []));\n const memInput = record({\n dom: {\n tag: 'div',\n classes: ['tox-input-wrapper']\n },\n components: [Input.sketch({\n inputBehaviours: derive$1([\n Disabling.config({}),\n config(customEvents, [\n onControlAttached({\n onSetup,\n getApi\n }, editorOffCell),\n onControlDetached({ getApi }, editorOffCell)\n ]),\n config('input-update-display-text', [\n run$1(updateMenuText, (comp, se) => {\n Representing.setValue(comp, se.event.text);\n }),\n run$1(focusout(), comp => {\n spec.onAction(Representing.getValue(comp));\n }),\n run$1(change(), comp => {\n spec.onAction(Representing.getValue(comp));\n })\n ]),\n Keying.config({\n mode: 'special',\n onEnter: _comp => {\n changeValue(identity, true, true);\n return Optional.some(true);\n },\n onEscape: goToParent,\n onUp: _comp => {\n increase(true, false);\n return Optional.some(true);\n },\n onDown: _comp => {\n decrease(true, false);\n return Optional.some(true);\n },\n onLeft: (_comp, se) => {\n se.cut();\n return Optional.none();\n },\n onRight: (_comp, se) => {\n se.cut();\n return Optional.none();\n }\n })\n ])\n })],\n behaviours: derive$1([\n Focusing.config({}),\n Keying.config({\n mode: 'special',\n onEnter: focusInput,\n onSpace: focusInput,\n onEscape: goToParent\n }),\n config('input-wrapper-events', [run$1(mouseover(), comp => {\n each$1([\n memMinus,\n memPlus\n ], button => {\n const buttonNode = SugarElement.fromDom(button.get(comp).element.dom);\n if (hasFocus(buttonNode)) {\n blur$1(buttonNode);\n }\n });\n })])\n ])\n });\n return {\n dom: {\n tag: 'div',\n classes: ['tox-number-input'],\n attributes: { ...isNonNullable(btnName) ? { 'data-mce-name': btnName } : {} }\n },\n components: [\n memMinus.asSpec(),\n memInput.asSpec(),\n memPlus.asSpec()\n ],\n behaviours: derive$1([\n Focusing.config({}),\n Keying.config({\n mode: 'flow',\n focusInside: FocusInsideModes.OnEnterOrSpaceMode,\n cycles: false,\n selector: 'button, .tox-input-wrapper',\n onEscape: wrapperComp => {\n if (hasFocus(wrapperComp.element)) {\n return Optional.none();\n } else {\n focus$3(wrapperComp.element);\n return Optional.some(true);\n }\n }\n })\n ])\n };\n };\n\n const menuTitle$1 = 'Font sizes';\n const getTooltipPlaceholder$1 = constant$1('Font size {0}');\n const fallbackFontSize = '12pt';\n const legacyFontSizes = {\n '8pt': '1',\n '10pt': '2',\n '12pt': '3',\n '14pt': '4',\n '18pt': '5',\n '24pt': '6',\n '36pt': '7'\n };\n const keywordFontSizes = {\n 'xx-small': '7pt',\n 'x-small': '8pt',\n 'small': '10pt',\n 'medium': '12pt',\n 'large': '14pt',\n 'x-large': '18pt',\n 'xx-large': '24pt'\n };\n const round = (number, precision) => {\n const factor = Math.pow(10, precision);\n return Math.round(number * factor) / factor;\n };\n const toPt = (fontSize, precision) => {\n if (/[0-9.]+px$/.test(fontSize)) {\n return round(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';\n } else {\n return get$h(keywordFontSizes, fontSize).getOr(fontSize);\n }\n };\n const toLegacy = fontSize => get$h(legacyFontSizes, fontSize).getOr('');\n const getSpec$1 = editor => {\n const getMatchingValue = () => {\n let matchOpt = Optional.none();\n const items = dataset.data;\n const fontSize = editor.queryCommandValue('FontSize');\n if (fontSize) {\n for (let precision = 3; matchOpt.isNone() && precision >= 0; precision--) {\n const pt = toPt(fontSize, precision);\n const legacy = toLegacy(pt);\n matchOpt = find$5(items, item => item.format === fontSize || item.format === pt || item.format === legacy);\n }\n }\n return {\n matchOpt,\n size: fontSize\n };\n };\n const isSelectedFor = item => valueOpt => valueOpt.exists(value => value.format === item);\n const getCurrentValue = () => {\n const {matchOpt} = getMatchingValue();\n return matchOpt;\n };\n const getPreviewFor = constant$1(Optional.none);\n const onAction = rawItem => () => {\n editor.undoManager.transact(() => {\n editor.focus();\n editor.execCommand('FontSize', false, rawItem.format);\n });\n };\n const updateSelectMenuText = comp => {\n const {matchOpt, size} = getMatchingValue();\n const text = matchOpt.fold(constant$1(size), match => match.title);\n emitWith(comp, updateMenuText, { text });\n fireFontSizeTextUpdate(editor, { value: text });\n };\n const dataset = buildBasicSettingsDataset(editor, 'font_size_formats', Delimiter.Space);\n return {\n tooltip: makeTooltipText(editor, getTooltipPlaceholder$1(), fallbackFontSize),\n text: Optional.some(fallbackFontSize),\n icon: Optional.none(),\n isSelectedFor,\n getPreviewFor,\n getCurrentValue,\n onAction,\n updateText: updateSelectMenuText,\n dataset,\n shouldHide: false,\n isInvalid: never\n };\n };\n const createFontSizeButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$1(editor), getTooltipPlaceholder$1, 'FontSizeTextUpdate', 'fontsize');\n const getConfigFromUnit = unit => {\n var _a;\n const baseConfig = { step: 1 };\n const configs = {\n em: { step: 0.1 },\n cm: { step: 0.1 },\n in: { step: 0.1 },\n pc: { step: 0.1 },\n ch: { step: 0.1 },\n rem: { step: 0.1 }\n };\n return (_a = configs[unit]) !== null && _a !== void 0 ? _a : baseConfig;\n };\n const defaultValue = 16;\n const isValidValue = value => value >= 0;\n const getNumberInputSpec = editor => {\n const getCurrentValue = () => editor.queryCommandValue('FontSize');\n const updateInputValue = comp => emitWith(comp, updateMenuText, { text: getCurrentValue() });\n return {\n updateInputValue,\n onAction: (format, focusBack) => editor.execCommand('FontSize', false, format, { skip_focus: !focusBack }),\n getNewValue: (text, updateFunction) => {\n parse(text, [\n 'unsupportedLength',\n 'empty'\n ]);\n const currentValue = getCurrentValue();\n const parsedText = parse(text, [\n 'unsupportedLength',\n 'empty'\n ]).or(parse(currentValue, [\n 'unsupportedLength',\n 'empty'\n ]));\n const value = parsedText.map(res => res.value).getOr(defaultValue);\n const defaultUnit = getFontSizeInputDefaultUnit(editor);\n const unit = parsedText.map(res => res.unit).filter(u => u !== '').getOr(defaultUnit);\n const newValue = updateFunction(value, getConfigFromUnit(unit).step);\n const res = `${ isValidValue(newValue) ? newValue : value }${ unit }`;\n if (res !== currentValue) {\n fireFontSizeInputTextUpdate(editor, { value: res });\n }\n return res;\n }\n };\n };\n const createFontSizeInputButton = (editor, backstage) => createBespokeNumberInput(editor, backstage, getNumberInputSpec(editor), 'fontsizeinput');\n const createFontSizeMenu = (editor, backstage) => {\n const menuItems = createMenuItems(backstage, getSpec$1(editor));\n editor.ui.registry.addNestedMenuItem('fontsize', {\n text: menuTitle$1,\n onSetup: onSetupEditableToggle(editor),\n getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n });\n };\n\n const menuTitle = 'Formats';\n const getTooltipPlaceholder = value => isEmpty(value) ? 'Formats' : 'Format {0}';\n const getSpec = (editor, dataset) => {\n const fallbackFormat = 'Formats';\n const isSelectedFor = format => () => editor.formatter.match(format);\n const getPreviewFor = format => () => {\n const fmt = editor.formatter.get(format);\n return fmt !== undefined ? Optional.some({\n tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div',\n styles: editor.dom.parseStyle(editor.formatter.getCssText(format))\n }) : Optional.none();\n };\n const updateSelectMenuText = comp => {\n const getFormatItems = fmt => {\n if (isNestedFormat(fmt)) {\n return bind$3(fmt.items, getFormatItems);\n } else if (isFormatReference(fmt)) {\n return [{\n title: fmt.title,\n format: fmt.format\n }];\n } else {\n return [];\n }\n };\n const flattenedItems = bind$3(getStyleFormats(editor), getFormatItems);\n const detectedFormat = findNearest(editor, constant$1(flattenedItems));\n const text = detectedFormat.fold(constant$1({\n title: fallbackFormat,\n tooltipLabel: ''\n }), fmt => ({\n title: fmt.title,\n tooltipLabel: fmt.title\n }));\n emitWith(comp, updateMenuText, { text: text.title });\n fireStylesTextUpdate(editor, { value: text.tooltipLabel });\n };\n return {\n tooltip: makeTooltipText(editor, getTooltipPlaceholder(''), ''),\n text: Optional.some(fallbackFormat),\n icon: Optional.none(),\n isSelectedFor,\n getCurrentValue: Optional.none,\n getPreviewFor,\n onAction: onActionToggleFormat$1(editor),\n updateText: updateSelectMenuText,\n shouldHide: shouldAutoHideStyleFormats(editor),\n isInvalid: item => !editor.formatter.canApply(item.format),\n dataset\n };\n };\n const createStylesButton = (editor, backstage) => {\n const dataset = {\n type: 'advanced',\n ...backstage.styles\n };\n return createSelectButton(editor, backstage, getSpec(editor, dataset), getTooltipPlaceholder, 'StylesTextUpdate', 'styles');\n };\n const createStylesMenu = (editor, backstage) => {\n const dataset = {\n type: 'advanced',\n ...backstage.styles\n };\n const menuItems = createMenuItems(backstage, getSpec(editor, dataset));\n editor.ui.registry.addNestedMenuItem('styles', {\n text: menuTitle,\n onSetup: onSetupEditableToggle(editor),\n getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems())\n });\n };\n\n const schema$7 = constant$1([\n required$1('toggleClass'),\n required$1('fetch'),\n onStrictHandler('onExecute'),\n defaulted('getHotspot', Optional.some),\n defaulted('getAnchorOverrides', constant$1({})),\n schema$y(),\n onStrictHandler('onItemExecute'),\n option$3('lazySink'),\n required$1('dom'),\n onHandler('onOpen'),\n field('splitDropdownBehaviours', [\n Coupling,\n Keying,\n Focusing\n ]),\n defaulted('matchWidth', false),\n defaulted('useMinWidth', false),\n defaulted('eventOrder', {}),\n option$3('role'),\n option$3('listRole')\n ].concat(sandboxFields()));\n const arrowPart = required({\n factory: Button,\n schema: [required$1('dom')],\n name: 'arrow',\n defaults: () => {\n return { buttonBehaviours: derive$1([Focusing.revoke()]) };\n },\n overrides: detail => {\n return {\n dom: {\n tag: 'span',\n attributes: { role: 'presentation' }\n },\n action: arrow => {\n arrow.getSystem().getByUid(detail.uid).each(emitExecute);\n },\n buttonBehaviours: derive$1([Toggling.config({\n toggleOnExecute: false,\n toggleClass: detail.toggleClass\n })])\n };\n }\n });\n const buttonPart = required({\n factory: Button,\n schema: [required$1('dom')],\n name: 'button',\n defaults: () => {\n return { buttonBehaviours: derive$1([Focusing.revoke()]) };\n },\n overrides: detail => {\n return {\n dom: {\n tag: 'span',\n attributes: { role: 'presentation' }\n },\n action: btn => {\n btn.getSystem().getByUid(detail.uid).each(splitDropdown => {\n detail.onExecute(splitDropdown, btn);\n });\n }\n };\n }\n });\n const parts$3 = constant$1([\n arrowPart,\n buttonPart,\n optional({\n factory: {\n sketch: spec => {\n return {\n uid: spec.uid,\n dom: {\n tag: 'span',\n styles: { display: 'none' },\n attributes: { 'aria-hidden': 'true' },\n innerHtml: spec.text\n }\n };\n }\n },\n schema: [required$1('text')],\n name: 'aria-descriptor'\n }),\n external({\n schema: [tieredMenuMarkers()],\n name: 'menu',\n defaults: detail => {\n return {\n onExecute: (tmenu, item) => {\n tmenu.getSystem().getByUid(detail.uid).each(splitDropdown => {\n detail.onItemExecute(splitDropdown, tmenu, item);\n });\n }\n };\n }\n }),\n partType$1()\n ]);\n\n const factory$5 = (detail, components, spec, externals) => {\n const switchToMenu = sandbox => {\n Composing.getCurrent(sandbox).each(current => {\n Highlighting.highlightFirst(current);\n Keying.focusIn(current);\n });\n };\n const action = component => {\n const onOpenSync = switchToMenu;\n togglePopup(detail, identity, component, externals, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop);\n };\n const openMenu = comp => {\n action(comp);\n return Optional.some(true);\n };\n const executeOnButton = comp => {\n const button = getPartOrDie(comp, detail, 'button');\n emitExecute(button);\n return Optional.some(true);\n };\n const buttonEvents = {\n ...derive$2([runOnAttached((component, _simulatedEvent) => {\n const ariaDescriptor = getPart(component, detail, 'aria-descriptor');\n ariaDescriptor.each(descriptor => {\n const descriptorId = generate$6('aria');\n set$9(descriptor.element, 'id', descriptorId);\n set$9(component.element, 'aria-describedby', descriptorId);\n });\n })]),\n ...events$9(Optional.some(action))\n };\n const apis = {\n repositionMenus: comp => {\n if (Toggling.isOn(comp)) {\n repositionMenus(comp);\n }\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components,\n apis,\n eventOrder: {\n ...detail.eventOrder,\n [execute$5()]: [\n 'disabling',\n 'toggling',\n 'alloy.base.behaviour'\n ]\n },\n events: buttonEvents,\n behaviours: augment(detail.splitDropdownBehaviours, [\n Coupling.config({\n others: {\n sandbox: hotspot => {\n const arrow = getPartOrDie(hotspot, detail, 'arrow');\n const extras = {\n onOpen: () => {\n Toggling.on(arrow);\n Toggling.on(hotspot);\n },\n onClose: () => {\n Toggling.off(arrow);\n Toggling.off(hotspot);\n }\n };\n return makeSandbox$1(detail, hotspot, extras);\n }\n }\n }),\n Keying.config({\n mode: 'special',\n onSpace: executeOnButton,\n onEnter: executeOnButton,\n onDown: openMenu\n }),\n Focusing.config({}),\n Toggling.config({\n toggleOnExecute: false,\n aria: { mode: 'expanded' }\n })\n ]),\n domModification: {\n attributes: {\n 'role': detail.role.getOr('button'),\n 'aria-haspopup': true\n }\n }\n };\n };\n const SplitDropdown = composite({\n name: 'SplitDropdown',\n configFields: schema$7(),\n partFields: parts$3(),\n factory: factory$5,\n apis: { repositionMenus: (apis, comp) => apis.repositionMenus(comp) }\n });\n\n const getButtonApi = component => ({\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state),\n setText: text => emitWith(component, updateMenuText, { text }),\n setIcon: icon => emitWith(component, updateMenuIcon, { icon })\n });\n const getToggleApi = component => ({\n setActive: state => {\n Toggling.set(component, state);\n },\n isActive: () => Toggling.isOn(component),\n isEnabled: () => !Disabling.isDisabled(component),\n setEnabled: state => Disabling.set(component, !state),\n setText: text => emitWith(component, updateMenuText, { text }),\n setIcon: icon => emitWith(component, updateMenuIcon, { icon })\n });\n const getTooltipAttributes = (tooltip, providersBackstage) => tooltip.map(tooltip => ({ 'aria-label': providersBackstage.translate(tooltip) })).getOr({});\n const focusButtonEvent = generate$6('focus-button');\n const renderCommonStructure = (optIcon, optText, tooltip, behaviours, providersBackstage, context, btnName) => {\n const optMemDisplayText = optText.map(text => record(renderLabel$1(text, 'tox-tbtn', providersBackstage)));\n const optMemDisplayIcon = optIcon.map(icon => record(renderReplaceableIconFromPack(icon, providersBackstage.icons)));\n return {\n dom: {\n tag: 'button',\n classes: ['tox-tbtn'].concat(optText.isSome() ? ['tox-tbtn--select'] : []),\n attributes: {\n ...getTooltipAttributes(tooltip, providersBackstage),\n ...isNonNullable(btnName) ? { 'data-mce-name': btnName } : {}\n }\n },\n components: componentRenderPipeline([\n optMemDisplayIcon.map(mem => mem.asSpec()),\n optMemDisplayText.map(mem => mem.asSpec())\n ]),\n eventOrder: {\n [mousedown()]: [\n 'focusing',\n 'alloy.base.behaviour',\n commonButtonDisplayEvent\n ],\n [attachedToDom()]: [\n commonButtonDisplayEvent,\n 'toolbar-group-button-events'\n ],\n [detachedFromDom()]: [\n commonButtonDisplayEvent,\n 'toolbar-group-button-events',\n 'tooltipping'\n ]\n },\n buttonBehaviours: derive$1([\n DisablingConfigs.toolbarButton(() => providersBackstage.checkUiComponentContext(context).shouldDisable),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(context)),\n config(commonButtonDisplayEvent, [\n runOnAttached((comp, _se) => forceInitialSize(comp)),\n run$1(updateMenuText, (comp, se) => {\n optMemDisplayText.bind(mem => mem.getOpt(comp)).each(displayText => {\n Replacing.set(displayText, [text$2(providersBackstage.translate(se.event.text))]);\n });\n }),\n run$1(updateMenuIcon, (comp, se) => {\n optMemDisplayIcon.bind(mem => mem.getOpt(comp)).each(displayIcon => {\n Replacing.set(displayIcon, [renderReplaceableIconFromPack(se.event.icon, providersBackstage.icons)]);\n });\n }),\n run$1(mousedown(), (button, se) => {\n se.event.prevent();\n emit(button, focusButtonEvent);\n })\n ])\n ].concat(behaviours.getOr([])))\n };\n };\n const renderFloatingToolbarButton = (spec, backstage, identifyButtons, attributes, btnName) => {\n const sharedBackstage = backstage.shared;\n const editorOffCell = Cell(noop);\n const specialisation = {\n toolbarButtonBehaviours: [],\n getApi: getButtonApi,\n onSetup: spec.onSetup\n };\n const behaviours = [\n config('toolbar-group-button-events', [\n onControlAttached(specialisation, editorOffCell),\n onControlDetached(specialisation, editorOffCell)\n ]),\n ...spec.tooltip.map(t => Tooltipping.config(backstage.shared.providers.tooltips.getConfig({ tooltipText: backstage.shared.providers.translate(t) }))).toArray()\n ];\n return FloatingToolbarButton.sketch({\n lazySink: sharedBackstage.getSink,\n fetch: () => Future.nu(resolve => {\n resolve(map$2(identifyButtons(spec.items), renderToolbarGroup));\n }),\n markers: { toggledClass: 'tox-tbtn--enabled' },\n parts: {\n button: renderCommonStructure(spec.icon, spec.text, spec.tooltip, Optional.some(behaviours), sharedBackstage.providers, spec.context, btnName),\n toolbar: {\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__overflow'],\n attributes\n }\n }\n }\n });\n };\n const renderCommonToolbarButton = (spec, specialisation, providersBackstage, btnName) => {\n var _d;\n const editorOffCell = Cell(noop);\n const structure = renderCommonStructure(spec.icon, spec.text, spec.tooltip, Optional.none(), providersBackstage, spec.context, btnName);\n return Button.sketch({\n dom: structure.dom,\n components: structure.components,\n eventOrder: toolbarButtonEventOrder,\n buttonBehaviours: {\n ...derive$1([\n config('toolbar-button-events', [\n onToolbarButtonExecute({\n onAction: spec.onAction,\n getApi: specialisation.getApi\n }),\n onControlAttached(specialisation, editorOffCell),\n onControlDetached(specialisation, editorOffCell)\n ]),\n ...spec.tooltip.map(t => Tooltipping.config(providersBackstage.tooltips.getConfig({ tooltipText: providersBackstage.translate(t) + spec.shortcut.map(shortcut => ` (${ convertText(shortcut) })`).getOr('') }))).toArray(),\n DisablingConfigs.toolbarButton(() => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context))\n ].concat(specialisation.toolbarButtonBehaviours)),\n [commonButtonDisplayEvent]: (_d = structure.buttonBehaviours) === null || _d === void 0 ? void 0 : _d[commonButtonDisplayEvent]\n }\n });\n };\n const renderToolbarButton = (spec, providersBackstage, btnName) => renderToolbarButtonWith(spec, providersBackstage, [], btnName);\n const renderToolbarButtonWith = (spec, providersBackstage, bonusEvents, btnName) => renderCommonToolbarButton(spec, {\n toolbarButtonBehaviours: bonusEvents.length > 0 ? [config('toolbarButtonWith', bonusEvents)] : [],\n getApi: getButtonApi,\n onSetup: spec.onSetup\n }, providersBackstage, btnName);\n const renderToolbarToggleButton = (spec, providersBackstage, btnName) => renderToolbarToggleButtonWith(spec, providersBackstage, [], btnName);\n const renderToolbarToggleButtonWith = (spec, providersBackstage, bonusEvents, btnName) => renderCommonToolbarButton(spec, {\n toolbarButtonBehaviours: [\n Replacing.config({}),\n Toggling.config({\n toggleClass: 'tox-tbtn--enabled',\n aria: { mode: 'pressed' },\n toggleOnExecute: false\n })\n ].concat(bonusEvents.length > 0 ? [config('toolbarToggleButtonWith', bonusEvents)] : []),\n getApi: getToggleApi,\n onSetup: spec.onSetup\n }, providersBackstage, btnName);\n const fetchChoices = (getApi, spec, providersBackstage) => comp => Future.nu(callback => spec.fetch(callback)).map(items => Optional.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$6('menu-value'), items, value => {\n spec.onItemAction(getApi(comp), value);\n }, spec.columns, spec.presets, ItemResponse$1.CLOSE_ON_EXECUTE, spec.select.getOr(never), providersBackstage), {\n movement: deriveMenuMovement(spec.columns, spec.presets),\n menuBehaviours: SimpleBehaviours.unnamedEvents(spec.columns !== 'auto' ? [] : [runOnAttached((comp, _se) => {\n detectSize(comp, 4, classForPreset(spec.presets)).each(({numRows, numColumns}) => {\n Keying.setGridSize(comp, numRows, numColumns);\n });\n })])\n }))));\n const renderSplitButton = (spec, sharedBackstage, btnName) => {\n const tooltipString = Cell(spec.tooltip.getOr(''));\n const getApi = comp => ({\n isEnabled: () => !Disabling.isDisabled(comp),\n setEnabled: state => Disabling.set(comp, !state),\n setIconFill: (id, value) => {\n descendant(comp.element, `svg path[class=\"${ id }\"], rect[class=\"${ id }\"]`).each(underlinePath => {\n set$9(underlinePath, 'fill', value);\n });\n },\n setActive: state => {\n set$9(comp.element, 'aria-pressed', state);\n descendant(comp.element, 'span').each(button => {\n comp.getSystem().getByDom(button).each(buttonComp => Toggling.set(buttonComp, state));\n });\n },\n isActive: () => descendant(comp.element, 'span').exists(button => comp.getSystem().getByDom(button).exists(Toggling.isOn)),\n setText: text => descendant(comp.element, 'span').each(button => comp.getSystem().getByDom(button).each(buttonComp => emitWith(buttonComp, updateMenuText, { text }))),\n setIcon: icon => descendant(comp.element, 'span').each(button => comp.getSystem().getByDom(button).each(buttonComp => emitWith(buttonComp, updateMenuIcon, { icon }))),\n setTooltip: tooltip => {\n const translatedTooltip = sharedBackstage.providers.translate(tooltip);\n set$9(comp.element, 'aria-label', translatedTooltip);\n tooltipString.set(tooltip);\n }\n });\n const editorOffCell = Cell(noop);\n const specialisation = {\n getApi,\n onSetup: spec.onSetup\n };\n return SplitDropdown.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-split-button'],\n attributes: {\n 'aria-pressed': false,\n ...getTooltipAttributes(spec.tooltip, sharedBackstage.providers),\n ...isNonNullable(btnName) ? { 'data-mce-name': btnName } : {}\n }\n },\n onExecute: button => {\n const api = getApi(button);\n if (api.isEnabled()) {\n spec.onAction(api);\n }\n },\n onItemExecute: (_a, _b, _c) => {\n },\n splitDropdownBehaviours: derive$1([\n config('split-dropdown-events', [\n runOnAttached((comp, _se) => forceInitialSize(comp)),\n run$1(focusButtonEvent, Focusing.focus),\n onControlAttached(specialisation, editorOffCell),\n onControlDetached(specialisation, editorOffCell)\n ]),\n DisablingConfigs.splitButton(() => sharedBackstage.providers.isDisabled() || sharedBackstage.providers.checkUiComponentContext(spec.context).shouldDisable),\n toggleOnReceive(() => sharedBackstage.providers.checkUiComponentContext(spec.context)),\n Unselecting.config({}),\n ...spec.tooltip.map(tooltip => {\n return Tooltipping.config({\n ...sharedBackstage.providers.tooltips.getConfig({\n tooltipText: sharedBackstage.providers.translate(tooltip),\n onShow: comp => {\n if (tooltipString.get() !== tooltip) {\n const translatedTooltip = sharedBackstage.providers.translate(tooltipString.get());\n Tooltipping.setComponents(comp, sharedBackstage.providers.tooltips.getComponents({ tooltipText: translatedTooltip }));\n }\n }\n })\n });\n }).toArray()\n ]),\n eventOrder: {\n [attachedToDom()]: [\n 'alloy.base.behaviour',\n 'split-dropdown-events',\n 'tooltipping'\n ],\n [detachedFromDom()]: [\n 'split-dropdown-events',\n 'tooltipping'\n ]\n },\n toggleClass: 'tox-tbtn--enabled',\n lazySink: sharedBackstage.getSink,\n fetch: fetchChoices(getApi, spec, sharedBackstage.providers),\n parts: { menu: part(false, spec.columns, spec.presets) },\n components: [\n SplitDropdown.parts.button(renderCommonStructure(spec.icon, spec.text, Optional.none(), Optional.some([\n Toggling.config({\n toggleClass: 'tox-tbtn--enabled',\n toggleOnExecute: false\n }),\n DisablingConfigs.toolbarButton(never),\n toggleOnReceive(constant$1({\n contextType: 'any',\n shouldDisable: false\n }))\n ]), sharedBackstage.providers, spec.context)),\n SplitDropdown.parts.arrow({\n dom: {\n tag: 'button',\n classes: [\n 'tox-tbtn',\n 'tox-split-button__chevron'\n ],\n innerHtml: get$3('chevron-down', sharedBackstage.providers.icons)\n },\n buttonBehaviours: derive$1([\n DisablingConfigs.splitButton(never),\n toggleOnReceive(constant$1({\n contextType: 'any',\n shouldDisable: false\n }))\n ])\n }),\n SplitDropdown.parts['aria-descriptor']({ text: sharedBackstage.providers.translate('To open the popup, press Shift+Enter') })\n ]\n });\n };\n\n const defaultToolbar = [\n {\n name: 'history',\n items: [\n 'undo',\n 'redo'\n ]\n },\n {\n name: 'ai',\n items: [\n 'aidialog',\n 'aishortcuts'\n ]\n },\n {\n name: 'styles',\n items: ['styles']\n },\n {\n name: 'formatting',\n items: [\n 'bold',\n 'italic'\n ]\n },\n {\n name: 'alignment',\n items: [\n 'alignleft',\n 'aligncenter',\n 'alignright',\n 'alignjustify'\n ]\n },\n {\n name: 'indentation',\n items: [\n 'outdent',\n 'indent'\n ]\n },\n {\n name: 'permanent pen',\n items: ['permanentpen']\n },\n {\n name: 'comments',\n items: ['addcomment']\n }\n ];\n const renderFromBridge = (bridgeBuilder, render) => (spec, backstage, editor, btnName) => {\n const internal = bridgeBuilder(spec).mapError(errInfo => formatError(errInfo)).getOrDie();\n return render(internal, backstage, editor, btnName);\n };\n const types = {\n button: renderFromBridge(createToolbarButton, (s, backstage, _, btnName) => renderToolbarButton(s, backstage.shared.providers, btnName)),\n togglebutton: renderFromBridge(createToggleButton, (s, backstage, _, btnName) => renderToolbarToggleButton(s, backstage.shared.providers, btnName)),\n menubutton: renderFromBridge(createMenuButton, (s, backstage, _, btnName) => renderMenuButton(s, 'tox-tbtn', backstage, Optional.none(), false, btnName)),\n splitbutton: renderFromBridge(createSplitButton, (s, backstage, _, btnName) => renderSplitButton(s, backstage.shared, btnName)),\n grouptoolbarbutton: renderFromBridge(createGroupToolbarButton, (s, backstage, editor, btnName) => {\n const buttons = editor.ui.registry.getAll().buttons;\n const identify = toolbar => identifyButtons(editor, {\n buttons,\n toolbar,\n allowToolbarGroups: false\n }, backstage, Optional.none());\n const attributes = { [Attribute]: backstage.shared.header.isPositionedAtTop() ? AttributeValue.TopToBottom : AttributeValue.BottomToTop };\n switch (getToolbarMode(editor)) {\n case ToolbarMode$1.floating:\n return renderFloatingToolbarButton(s, backstage, identify, attributes, btnName);\n default:\n throw new Error('Toolbar groups are only supported when using floating toolbar mode');\n }\n })\n };\n const extractFrom = (spec, backstage, editor, btnName) => get$h(types, spec.type).fold(() => {\n console.error('skipping button defined by', spec);\n return Optional.none();\n }, render => Optional.some(render(spec, backstage, editor, btnName)));\n const bespokeButtons = {\n styles: createStylesButton,\n fontsize: createFontSizeButton,\n fontsizeinput: createFontSizeInputButton,\n fontfamily: createFontFamilyButton,\n blocks: createBlocksButton,\n align: createAlignButton\n };\n const removeUnusedDefaults = buttons => {\n const filteredItemGroups = map$2(defaultToolbar, group => {\n const items = filter$2(group.items, subItem => has$2(buttons, subItem) || has$2(bespokeButtons, subItem));\n return {\n name: group.name,\n items\n };\n });\n return filter$2(filteredItemGroups, group => group.items.length > 0);\n };\n const convertStringToolbar = strToolbar => {\n const groupsStrings = strToolbar.split('|');\n return map$2(groupsStrings, g => ({ items: g.trim().split(' ') }));\n };\n const isToolbarGroupSettingArray = toolbar => isArrayOf(toolbar, t => (has$2(t, 'name') || has$2(t, 'label')) && has$2(t, 'items'));\n const createToolbar = toolbarConfig => {\n const toolbar = toolbarConfig.toolbar;\n const buttons = toolbarConfig.buttons;\n if (toolbar === false) {\n return [];\n } else if (toolbar === undefined || toolbar === true) {\n return removeUnusedDefaults(buttons);\n } else if (isString(toolbar)) {\n return convertStringToolbar(toolbar);\n } else if (isToolbarGroupSettingArray(toolbar)) {\n return toolbar;\n } else {\n console.error('Toolbar type should be string, string[], boolean or ToolbarGroup[]');\n return [];\n }\n };\n const lookupButton = (editor, buttons, toolbarItem, allowToolbarGroups, backstage, prefixes) => get$h(buttons, toolbarItem.toLowerCase()).orThunk(() => prefixes.bind(ps => findMap(ps, prefix => get$h(buttons, prefix + toolbarItem.toLowerCase())))).fold(() => get$h(bespokeButtons, toolbarItem.toLowerCase()).map(r => r(editor, backstage)), spec => {\n if (spec.type === 'grouptoolbarbutton' && !allowToolbarGroups) {\n console.warn(`Ignoring the '${ toolbarItem }' toolbar button. Group toolbar buttons are only supported when using floating toolbar mode and cannot be nested.`);\n return Optional.none();\n } else {\n return extractFrom(spec, backstage, editor, toolbarItem.toLowerCase());\n }\n });\n const identifyButtons = (editor, toolbarConfig, backstage, prefixes) => {\n const toolbarGroups = createToolbar(toolbarConfig);\n const groups = map$2(toolbarGroups, group => {\n const items = bind$3(group.items, toolbarItem => {\n return toolbarItem.trim().length === 0 ? [] : lookupButton(editor, toolbarConfig.buttons, toolbarItem, toolbarConfig.allowToolbarGroups, backstage, prefixes).toArray();\n });\n return {\n title: Optional.from(editor.translate(group.name)),\n label: someIf(group.label !== undefined, editor.translate(group.label)),\n items\n };\n });\n return filter$2(groups, group => group.items.length > 0);\n };\n\n const setToolbar = (editor, uiRefs, rawUiConfig, backstage) => {\n const outerContainer = uiRefs.mainUi.outerContainer;\n const toolbarConfig = rawUiConfig.toolbar;\n const toolbarButtonsConfig = rawUiConfig.buttons;\n if (isArrayOf(toolbarConfig, isString)) {\n const toolbars = toolbarConfig.map(t => {\n const config = {\n toolbar: t,\n buttons: toolbarButtonsConfig,\n allowToolbarGroups: rawUiConfig.allowToolbarGroups\n };\n return identifyButtons(editor, config, backstage, Optional.none());\n });\n OuterContainer.setToolbars(outerContainer, toolbars);\n } else {\n OuterContainer.setToolbar(outerContainer, identifyButtons(editor, rawUiConfig, backstage, Optional.none()));\n }\n };\n\n const detection = detect$1();\n const isiOS12 = detection.os.isiOS() && detection.os.version.major <= 12;\n const setupEvents$1 = (editor, uiRefs) => {\n const {uiMotherships} = uiRefs;\n const dom = editor.dom;\n let contentWindow = editor.getWin();\n const initialDocEle = editor.getDoc().documentElement;\n const lastWindowDimensions = Cell(SugarPosition(contentWindow.innerWidth, contentWindow.innerHeight));\n const lastDocumentDimensions = Cell(SugarPosition(initialDocEle.offsetWidth, initialDocEle.offsetHeight));\n const resizeWindow = () => {\n const outer = lastWindowDimensions.get();\n if (outer.left !== contentWindow.innerWidth || outer.top !== contentWindow.innerHeight) {\n lastWindowDimensions.set(SugarPosition(contentWindow.innerWidth, contentWindow.innerHeight));\n fireResizeContent(editor);\n }\n };\n const resizeDocument = () => {\n const docEle = editor.getDoc().documentElement;\n const inner = lastDocumentDimensions.get();\n if (inner.left !== docEle.offsetWidth || inner.top !== docEle.offsetHeight) {\n lastDocumentDimensions.set(SugarPosition(docEle.offsetWidth, docEle.offsetHeight));\n fireResizeContent(editor);\n }\n };\n const scroll = e => {\n fireScrollContent(editor, e);\n };\n dom.bind(contentWindow, 'resize', resizeWindow);\n dom.bind(contentWindow, 'scroll', scroll);\n const elementLoad = capture(SugarElement.fromDom(editor.getBody()), 'load', resizeDocument);\n editor.on('hide', () => {\n each$1(uiMotherships, m => {\n set$8(m.element, 'display', 'none');\n });\n });\n editor.on('show', () => {\n each$1(uiMotherships, m => {\n remove$7(m.element, 'display');\n });\n });\n editor.on('NodeChange', resizeDocument);\n editor.on('remove', () => {\n elementLoad.unbind();\n dom.unbind(contentWindow, 'resize', resizeWindow);\n dom.unbind(contentWindow, 'scroll', scroll);\n contentWindow = null;\n });\n };\n const attachUiMotherships = (editor, uiRoot, uiRefs) => {\n if (isSplitUiMode(editor)) {\n attachSystemAfter(uiRefs.mainUi.mothership.element, uiRefs.popupUi.mothership);\n }\n attachSystem(uiRoot, uiRefs.dialogUi.mothership);\n };\n const render$1 = (editor, uiRefs, rawUiConfig, backstage, args) => {\n const {mainUi, uiMotherships} = uiRefs;\n const lastToolbarWidth = Cell(0);\n const outerContainer = mainUi.outerContainer;\n iframe(editor);\n const eTargetNode = SugarElement.fromDom(args.targetNode);\n const uiRoot = getContentContainer(getRootNode(eTargetNode));\n attachSystemAfter(eTargetNode, mainUi.mothership);\n attachUiMotherships(editor, uiRoot, uiRefs);\n editor.on('PostRender', () => {\n OuterContainer.setSidebar(outerContainer, rawUiConfig.sidebar, getSidebarShow(editor));\n });\n editor.on('SkinLoaded', () => {\n setToolbar(editor, uiRefs, rawUiConfig, backstage);\n lastToolbarWidth.set(editor.getWin().innerWidth);\n OuterContainer.setMenubar(outerContainer, identifyMenus(editor, rawUiConfig));\n OuterContainer.setViews(outerContainer, rawUiConfig.views);\n setupEvents$1(editor, uiRefs);\n });\n const socket = OuterContainer.getSocket(outerContainer).getOrDie('Could not find expected socket element');\n if (isiOS12) {\n setAll(socket.element, {\n 'overflow': 'scroll',\n '-webkit-overflow-scrolling': 'touch'\n });\n const limit = first(() => {\n editor.dispatch('ScrollContent');\n }, 20);\n const unbinder = bind(socket.element, 'scroll', limit.throttle);\n editor.on('remove', unbinder.unbind);\n }\n setupEventsForUi(editor, uiRefs);\n editor.addCommand('ToggleSidebar', (_ui, value) => {\n OuterContainer.toggleSidebar(outerContainer, value);\n fireToggleSidebar(editor);\n });\n editor.addQueryValueHandler('ToggleSidebar', () => {\n var _a;\n return (_a = OuterContainer.whichSidebar(outerContainer)) !== null && _a !== void 0 ? _a : '';\n });\n editor.addCommand('ToggleView', (_ui, value) => {\n if (OuterContainer.toggleView(outerContainer, value)) {\n const target = outerContainer.element;\n mainUi.mothership.broadcastOn([dismissPopups()], { target });\n each$1(uiMotherships, m => {\n m.broadcastOn([dismissPopups()], { target });\n });\n if (isNull(OuterContainer.whichView(outerContainer))) {\n editor.focus();\n editor.nodeChanged();\n OuterContainer.refreshToolbar(outerContainer);\n }\n fireToggleView(editor);\n }\n });\n editor.addQueryValueHandler('ToggleView', () => {\n var _a;\n return (_a = OuterContainer.whichView(outerContainer)) !== null && _a !== void 0 ? _a : '';\n });\n const toolbarMode = getToolbarMode(editor);\n const refreshDrawer = () => {\n OuterContainer.refreshToolbar(uiRefs.mainUi.outerContainer);\n };\n if (toolbarMode === ToolbarMode$1.sliding || toolbarMode === ToolbarMode$1.floating) {\n editor.on('ResizeWindow ResizeEditor ResizeContent', () => {\n const width = editor.getWin().innerWidth;\n if (width !== lastToolbarWidth.get()) {\n refreshDrawer();\n lastToolbarWidth.set(width);\n }\n });\n }\n const api = {\n setEnabled: state => {\n const eventType = state ? 'setEnabled' : 'setDisabled';\n broadcastEvents(uiRefs, eventType);\n },\n isEnabled: () => !Disabling.isDisabled(outerContainer)\n };\n return {\n iframeContainer: socket.element.dom,\n editorContainer: outerContainer.element.dom,\n api\n };\n };\n\n var Iframe = /*#__PURE__*/Object.freeze({\n __proto__: null,\n render: render$1\n });\n\n const parseToInt = val => {\n const re = /^[0-9\\.]+(|px)$/i;\n if (re.test('' + val)) {\n return Optional.some(parseInt('' + val, 10));\n }\n return Optional.none();\n };\n const numToPx = val => isNumber(val) ? val + 'px' : val;\n const calcCappedSize = (size, minSize, maxSize) => {\n const minOverride = minSize.filter(min => size < min);\n const maxOverride = maxSize.filter(max => size > max);\n return minOverride.or(maxOverride).getOr(size);\n };\n\n const getHeight = editor => {\n const baseHeight = getHeightOption(editor);\n const minHeight = getMinHeightOption(editor);\n const maxHeight = getMaxHeightOption(editor);\n return parseToInt(baseHeight).map(height => calcCappedSize(height, minHeight, maxHeight));\n };\n const getHeightWithFallback = editor => {\n const height = getHeight(editor);\n return height.getOr(getHeightOption(editor));\n };\n const getWidth = editor => {\n const baseWidth = getWidthOption(editor);\n const minWidth = getMinWidthOption(editor);\n const maxWidth = getMaxWidthOption(editor);\n return parseToInt(baseWidth).map(width => calcCappedSize(width, minWidth, maxWidth));\n };\n const getWidthWithFallback = editor => {\n const width = getWidth(editor);\n return width.getOr(getWidthOption(editor));\n };\n\n const {ToolbarLocation, ToolbarMode} = Options;\n const maximumDistanceToEdge = 40;\n const InlineHeader = (editor, targetElm, uiRefs, backstage, floatContainer) => {\n const {mainUi, uiMotherships} = uiRefs;\n const DOM = global$8.DOM;\n const useFixedToolbarContainer = useFixedContainer(editor);\n const isSticky = isStickyToolbar(editor);\n const editorMaxWidthOpt = getMaxWidthOption(editor).or(getWidth(editor));\n const headerBackstage = backstage.shared.header;\n const isPositionedAtTop = headerBackstage.isPositionedAtTop;\n const minimumToolbarWidth = 150;\n const toolbarMode = getToolbarMode(editor);\n const isSplitToolbar = toolbarMode === ToolbarMode.sliding || toolbarMode === ToolbarMode.floating;\n const visible = Cell(false);\n const isVisible = () => visible.get() && !editor.removed;\n const calcToolbarOffset = toolbar => isSplitToolbar ? toolbar.fold(constant$1(0), tbar => tbar.components().length > 1 ? get$e(tbar.components()[1].element) : 0) : 0;\n const calcMode = container => {\n switch (getToolbarLocation(editor)) {\n case ToolbarLocation.auto:\n const toolbar = OuterContainer.getToolbar(mainUi.outerContainer);\n const offset = calcToolbarOffset(toolbar);\n const toolbarHeight = get$e(container.element) - offset;\n const targetBounds = box$1(targetElm);\n const roomAtTop = targetBounds.y > toolbarHeight;\n if (roomAtTop) {\n return 'top';\n } else {\n const doc = documentElement(targetElm);\n const docHeight = Math.max(doc.dom.scrollHeight, get$e(doc));\n const roomAtBottom = targetBounds.bottom < docHeight - toolbarHeight;\n if (roomAtBottom) {\n return 'bottom';\n } else {\n const winBounds = win();\n const isRoomAtBottomViewport = winBounds.bottom < targetBounds.bottom - toolbarHeight;\n return isRoomAtBottomViewport ? 'bottom' : 'top';\n }\n }\n case ToolbarLocation.bottom:\n return 'bottom';\n case ToolbarLocation.top:\n default:\n return 'top';\n }\n };\n const setupMode = mode => {\n floatContainer.on(container => {\n Docking.setModes(container, [mode]);\n headerBackstage.setDockingMode(mode);\n const verticalDir = isPositionedAtTop() ? AttributeValue.TopToBottom : AttributeValue.BottomToTop;\n set$9(container.element, Attribute, verticalDir);\n });\n };\n const updateChromeWidth = () => {\n floatContainer.on(container => {\n const maxWidth = editorMaxWidthOpt.getOrThunk(() => {\n return getBounds$3().width - viewport$1(targetElm).left - 10;\n });\n set$8(container.element, 'max-width', maxWidth + 'px');\n });\n };\n const updateChromePosition = (isOuterContainerWidthRestored, prevScroll) => {\n floatContainer.on(container => {\n const toolbar = OuterContainer.getToolbar(mainUi.outerContainer);\n const offset = calcToolbarOffset(toolbar);\n const targetBounds = box$1(targetElm);\n const offsetParent = getOffsetParent$1(editor, mainUi.outerContainer.element);\n const getLeft = () => offsetParent.fold(() => targetBounds.x, offsetParent => {\n const offsetBox = box$1(offsetParent);\n const isOffsetParentBody = eq(offsetParent, body());\n return isOffsetParentBody ? targetBounds.x : targetBounds.x - offsetBox.x;\n });\n const getTop = () => offsetParent.fold(() => isPositionedAtTop() ? Math.max(targetBounds.y - get$e(container.element) + offset, 0) : targetBounds.bottom, offsetParent => {\n var _a;\n const offsetBox = box$1(offsetParent);\n const scrollDelta = (_a = offsetParent.dom.scrollTop) !== null && _a !== void 0 ? _a : 0;\n const isOffsetParentBody = eq(offsetParent, body());\n const topValue = isOffsetParentBody ? Math.max(targetBounds.y - get$e(container.element) + offset, 0) : targetBounds.y - offsetBox.y + scrollDelta - get$e(container.element) + offset;\n return isPositionedAtTop() ? topValue : targetBounds.bottom;\n });\n const left = getLeft();\n const widthProperties = someIf(isOuterContainerWidthRestored, Math.ceil(mainUi.outerContainer.element.dom.getBoundingClientRect().width)).filter(w => w > minimumToolbarWidth).map(toolbarWidth => {\n const scroll = prevScroll.getOr(get$c());\n const availableWidth = window.innerWidth - (left - scroll.left);\n const width = Math.max(Math.min(toolbarWidth, availableWidth), minimumToolbarWidth);\n if (availableWidth < toolbarWidth) {\n set$8(mainUi.outerContainer.element, 'width', width + 'px');\n }\n return { width: width + 'px' };\n }).getOr({ width: 'max-content' });\n const baseProperties = {\n position: 'absolute',\n left: Math.round(left) + 'px',\n top: getTop() + 'px'\n };\n setAll(mainUi.outerContainer.element, {\n ...baseProperties,\n ...widthProperties\n });\n });\n };\n const getOffsetParent$1 = (editor, element) => isSplitUiMode(editor) ? getOffsetParent(element) : Optional.none();\n const repositionPopups$1 = () => {\n each$1(uiMotherships, m => {\n m.broadcastOn([repositionPopups()], {});\n });\n };\n const restoreOuterContainerWidth = () => {\n if (!useFixedToolbarContainer) {\n const toolbarCurrentRightsidePosition = absolute$3(mainUi.outerContainer.element).left + getOuter$1(mainUi.outerContainer.element);\n if (toolbarCurrentRightsidePosition >= window.innerWidth - maximumDistanceToEdge || getRaw(mainUi.outerContainer.element, 'width').isSome()) {\n set$8(mainUi.outerContainer.element, 'position', 'absolute');\n set$8(mainUi.outerContainer.element, 'left', '0px');\n remove$7(mainUi.outerContainer.element, 'width');\n return true;\n }\n }\n return false;\n };\n const update = stickyAction => {\n if (!isVisible()) {\n return;\n }\n if (!useFixedToolbarContainer) {\n updateChromeWidth();\n }\n const prevScroll = get$c();\n const isOuterContainerWidthRestored = useFixedToolbarContainer ? false : restoreOuterContainerWidth();\n if (isSplitToolbar) {\n OuterContainer.refreshToolbar(mainUi.outerContainer);\n }\n if (!useFixedToolbarContainer) {\n const currentScroll = get$c();\n const optScroll = someIf(prevScroll.left !== currentScroll.left, prevScroll);\n updateChromePosition(isOuterContainerWidthRestored, optScroll);\n optScroll.each(scroll => {\n to(scroll.left, currentScroll.top);\n });\n }\n if (isSticky) {\n floatContainer.on(stickyAction);\n }\n repositionPopups$1();\n };\n const doUpdateMode = () => {\n if (useFixedToolbarContainer || !isSticky || !isVisible()) {\n return false;\n }\n return floatContainer.get().exists(fc => {\n const currentMode = headerBackstage.getDockingMode();\n const newMode = calcMode(fc);\n if (newMode !== currentMode) {\n setupMode(newMode);\n return true;\n } else {\n return false;\n }\n });\n };\n const show = () => {\n visible.set(true);\n set$8(mainUi.outerContainer.element, 'display', 'flex');\n DOM.addClass(editor.getBody(), 'mce-edit-focus');\n each$1(uiMotherships, m => {\n remove$7(m.element, 'display');\n });\n doUpdateMode();\n if (isSplitUiMode(editor)) {\n update(elem => Docking.isDocked(elem) ? Docking.reset(elem) : Docking.refresh(elem));\n } else {\n update(Docking.refresh);\n }\n };\n const hide = () => {\n visible.set(false);\n set$8(mainUi.outerContainer.element, 'display', 'none');\n DOM.removeClass(editor.getBody(), 'mce-edit-focus');\n each$1(uiMotherships, m => {\n set$8(m.element, 'display', 'none');\n });\n };\n const updateMode = () => {\n const changedMode = doUpdateMode();\n if (changedMode) {\n update(Docking.reset);\n }\n };\n return {\n isVisible,\n isPositionedAtTop,\n show,\n hide,\n update,\n updateMode,\n repositionPopups: repositionPopups$1\n };\n };\n\n const getTargetPosAndBounds = (targetElm, isToolbarTop) => {\n const bounds = box$1(targetElm);\n return {\n pos: isToolbarTop ? bounds.y : bounds.bottom,\n bounds\n };\n };\n const setupEvents = (editor, targetElm, ui, toolbarPersist) => {\n const prevPosAndBounds = Cell(getTargetPosAndBounds(targetElm, ui.isPositionedAtTop()));\n const resizeContent = e => {\n const {pos, bounds} = getTargetPosAndBounds(targetElm, ui.isPositionedAtTop());\n const {\n pos: prevPos,\n bounds: prevBounds\n } = prevPosAndBounds.get();\n const hasResized = bounds.height !== prevBounds.height || bounds.width !== prevBounds.width;\n prevPosAndBounds.set({\n pos,\n bounds\n });\n if (hasResized) {\n fireResizeContent(editor, e);\n }\n if (ui.isVisible()) {\n if (prevPos !== pos) {\n ui.update(Docking.reset);\n } else if (hasResized) {\n ui.updateMode();\n ui.repositionPopups();\n }\n }\n };\n if (!toolbarPersist) {\n editor.on('activate', ui.show);\n editor.on('deactivate', ui.hide);\n }\n editor.on('SkinLoaded ResizeWindow', () => ui.update(Docking.reset));\n editor.on('NodeChange keydown', e => {\n requestAnimationFrame(() => resizeContent(e));\n });\n let lastScrollX = 0;\n const updateUi = last(() => ui.update(Docking.refresh), 33);\n editor.on('ScrollWindow', () => {\n const newScrollX = get$c().left;\n if (newScrollX !== lastScrollX) {\n lastScrollX = newScrollX;\n updateUi.throttle();\n }\n ui.updateMode();\n });\n if (isSplitUiMode(editor)) {\n editor.on('ElementScroll', _args => {\n ui.update(Docking.refresh);\n });\n }\n const elementLoad = unbindable();\n elementLoad.set(capture(SugarElement.fromDom(editor.getBody()), 'load', e => resizeContent(e.raw)));\n editor.on('remove', () => {\n elementLoad.clear();\n });\n };\n const render = (editor, uiRefs, rawUiConfig, backstage, args) => {\n const {mainUi} = uiRefs;\n const floatContainer = value$4();\n const targetElm = SugarElement.fromDom(args.targetNode);\n const ui = InlineHeader(editor, targetElm, uiRefs, backstage, floatContainer);\n const toolbarPersist = isToolbarPersist(editor);\n inline(editor);\n const render = () => {\n if (floatContainer.isSet()) {\n ui.show();\n return;\n }\n floatContainer.set(OuterContainer.getHeader(mainUi.outerContainer).getOrDie());\n const uiContainer = getUiContainer(editor);\n if (isSplitUiMode(editor)) {\n attachSystemAfter(targetElm, mainUi.mothership);\n attachSystemAfter(targetElm, uiRefs.popupUi.mothership);\n } else {\n attachSystem(uiContainer, mainUi.mothership);\n }\n attachSystem(uiContainer, uiRefs.dialogUi.mothership);\n const setup = () => {\n setToolbar(editor, uiRefs, rawUiConfig, backstage);\n OuterContainer.setMenubar(mainUi.outerContainer, identifyMenus(editor, rawUiConfig));\n ui.show();\n setupEvents(editor, targetElm, ui, toolbarPersist);\n editor.nodeChanged();\n };\n if (toolbarPersist) {\n editor.once('SkinLoaded', setup);\n } else {\n setup();\n }\n };\n editor.on('show', render);\n editor.on('hide', ui.hide);\n if (!toolbarPersist) {\n editor.on('focus', render);\n editor.on('blur', ui.hide);\n }\n editor.on('init', () => {\n if (editor.hasFocus() || toolbarPersist) {\n render();\n }\n });\n setupEventsForUi(editor, uiRefs);\n const api = {\n show: render,\n hide: ui.hide,\n setEnabled: state => {\n const eventType = state ? 'setEnabled' : 'setDisabled';\n broadcastEvents(uiRefs, eventType);\n },\n isEnabled: () => !Disabling.isDisabled(mainUi.outerContainer)\n };\n return {\n editorContainer: mainUi.outerContainer.element.dom,\n api\n };\n };\n\n var Inline = /*#__PURE__*/Object.freeze({\n __proto__: null,\n render: render\n });\n\n const LazyUiReferences = () => {\n const dialogUi = value$4();\n const popupUi = value$4();\n const mainUi = value$4();\n const lazyGetInOuterOrDie = (label, f) => () => mainUi.get().bind(oc => f(oc.outerContainer)).getOrDie(`Could not find ${ label } element in OuterContainer`);\n const getUiMotherships = () => {\n const optDialogMothership = dialogUi.get().map(ui => ui.mothership);\n const optPopupMothership = popupUi.get().map(ui => ui.mothership);\n return optDialogMothership.fold(() => optPopupMothership.toArray(), dm => optPopupMothership.fold(() => [dm], pm => eq(dm.element, pm.element) ? [dm] : [\n dm,\n pm\n ]));\n };\n return {\n dialogUi,\n popupUi,\n mainUi,\n getUiMotherships,\n lazyGetInOuterOrDie\n };\n };\n\n const showContextToolbarEvent = 'contexttoolbar-show';\n const hideContextToolbarEvent = 'contexttoolbar-hide';\n\n const contextFormInputSelector = '.tox-toolbar-slider__input,.tox-toolbar-textfield';\n const focusIn = contextbar => {\n InlineView.getContent(contextbar).each(comp => {\n descendant(comp.element, contextFormInputSelector).fold(() => Keying.focusIn(comp), focus$3);\n });\n };\n const focusParent = comp => search(comp.element).each(focus => {\n ancestor(focus, '[tabindex=\"-1\"]').each(parent => {\n focus$3(parent);\n });\n });\n\n const forwardSlideEvent = generate$6('forward-slide');\n const backSlideEvent = generate$6('backward-slide');\n const changeSlideEvent = generate$6('change-slide-event');\n const resizingClass = 'tox-pop--resizing';\n const renderContextToolbar = spec => {\n const stack = Cell([]);\n return InlineView.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-pop']\n },\n fireDismissalEventInstead: { event: 'doNotDismissYet' },\n onShow: comp => {\n stack.set([]);\n InlineView.getContent(comp).each(c => {\n remove$7(c.element, 'visibility');\n });\n remove$3(comp.element, resizingClass);\n remove$7(comp.element, 'width');\n },\n onHide: () => {\n spec.onHide();\n },\n inlineBehaviours: derive$1([\n config('context-toolbar-events', [\n runOnSource(transitionend(), (comp, se) => {\n if (se.event.raw.propertyName === 'width') {\n remove$3(comp.element, resizingClass);\n remove$7(comp.element, 'width');\n }\n }),\n run$1(changeSlideEvent, (comp, se) => {\n const elem = comp.element;\n remove$7(elem, 'width');\n const currentWidth = get$d(elem);\n remove$7(elem, 'left');\n remove$7(elem, 'right');\n remove$7(elem, 'max-width');\n InlineView.setContent(comp, se.event.contents);\n add$2(elem, resizingClass);\n const newWidth = get$d(elem);\n set$8(elem, 'transition', 'none');\n InlineView.reposition(comp);\n remove$7(elem, 'transition');\n set$8(elem, 'width', currentWidth + 'px');\n se.event.focus.fold(() => focusIn(comp), f => {\n focus$3(f);\n if (search(elem).isNone()) {\n focusIn(comp);\n }\n });\n setTimeout(() => {\n set$8(comp.element, 'width', newWidth + 'px');\n }, 0);\n }),\n run$1(forwardSlideEvent, (comp, se) => {\n InlineView.getContent(comp).each(oldContents => {\n stack.set(stack.get().concat([{\n bar: oldContents,\n focus: active$1(getRootNode(comp.element))\n }]));\n });\n emitWith(comp, changeSlideEvent, {\n contents: se.event.forwardContents,\n focus: Optional.none()\n });\n }),\n run$1(backSlideEvent, (comp, _se) => {\n spec.onBack();\n last$1(stack.get()).each(last => {\n stack.set(stack.get().slice(0, stack.get().length - 1));\n emitWith(comp, changeSlideEvent, {\n contents: premade(last.bar),\n focus: last.focus\n });\n });\n })\n ]),\n Keying.config({\n mode: 'special',\n onEscape: comp => last$1(stack.get()).fold(() => spec.onEscape(), _ => {\n emit(comp, backSlideEvent);\n return Optional.some(true);\n })\n })\n ]),\n lazySink: () => Result.value(spec.sink)\n });\n };\n\n const getFormApi = (input, focusfallbackElement) => {\n const valueState = value$4();\n return {\n setInputEnabled: state => {\n if (!state && focusfallbackElement) {\n focus$3(focusfallbackElement);\n }\n Disabling.set(input, !state);\n },\n isInputEnabled: () => !Disabling.isDisabled(input),\n hide: () => {\n if (!valueState.isSet()) {\n valueState.set(Representing.getValue(input));\n }\n emit(input, sandboxClose());\n },\n back: () => {\n if (!valueState.isSet()) {\n valueState.set(Representing.getValue(input));\n }\n emit(input, backSlideEvent);\n },\n getValue: () => {\n return valueState.get().getOrThunk(() => Representing.getValue(input));\n },\n setValue: value => {\n if (valueState.isSet()) {\n valueState.set(value);\n } else {\n Representing.setValue(input, value);\n }\n }\n };\n };\n\n const runOnExecute = (memInput, original) => run$1(internalToolbarButtonExecute, (comp, se) => {\n const input = memInput.get(comp);\n const formApi = getFormApi(input, comp.element);\n original.onAction(formApi, se.event.buttonApi);\n });\n const renderContextButton = (memInput, button, providers) => {\n const {primary, ...rest} = button.original;\n const bridged = getOrDie(createToolbarButton({\n ...rest,\n type: 'button',\n onAction: noop\n }));\n return renderToolbarButtonWith(bridged, providers, [runOnExecute(memInput, button)]);\n };\n const renderContextToggleButton = (memInput, button, providers) => {\n const {primary, ...rest} = button.original;\n const bridged = getOrDie(createToggleButton({\n ...rest,\n type: 'togglebutton',\n onAction: noop\n }));\n return renderToolbarToggleButtonWith(bridged, providers, [runOnExecute(memInput, button)]);\n };\n const isToggleButton = button => button.type === 'contextformtogglebutton';\n const generateOne = (memInput, button, providersBackstage) => {\n if (isToggleButton(button)) {\n return renderContextToggleButton(memInput, button, providersBackstage);\n } else {\n return renderContextButton(memInput, button, providersBackstage);\n }\n };\n const generate = (memInput, buttons, providersBackstage) => {\n const mementos = map$2(buttons, button => record(generateOne(memInput, button, providersBackstage)));\n const asSpecs = () => map$2(mementos, mem => mem.asSpec());\n const findPrimary = compInSystem => findMap(buttons, (button, i) => {\n if (button.primary) {\n return Optional.from(mementos[i]).bind(mem => mem.getOpt(compInSystem)).filter(not(Disabling.isDisabled));\n } else {\n return Optional.none();\n }\n });\n return {\n asSpecs,\n findPrimary\n };\n };\n\n const renderContextFormSizeInput = (ctx, providersBackstage, onEnter) => {\n const {width, height} = ctx.initValue();\n let converter = noSizeConversion;\n const enabled = true;\n const ratioEvent = generate$6('ratio-event');\n const getApi = getFormApi;\n const makeIcon = iconName => render$3(iconName, {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-lock-icon__' + iconName\n ]\n }, providersBackstage.icons);\n const disabled = () => !enabled;\n const label = ctx.label.getOr('Constrain proportions');\n const translatedLabel = providersBackstage.translate(label);\n const pLock = FormCoupledInputs.parts.lock({\n dom: {\n tag: 'button',\n classes: [\n 'tox-lock',\n 'tox-button',\n 'tox-button--naked',\n 'tox-button--icon'\n ],\n attributes: {\n 'aria-label': translatedLabel,\n 'data-mce-name': label\n }\n },\n components: [\n makeIcon('lock'),\n makeIcon('unlock')\n ],\n buttonBehaviours: derive$1([\n Disabling.config({ disabled }),\n Tabstopping.config({}),\n Tooltipping.config(providersBackstage.tooltips.getConfig({ tooltipText: translatedLabel }))\n ])\n });\n const formGroup = components => ({\n dom: {\n tag: 'div',\n classes: ['tox-context-form__group']\n },\n components\n });\n const goToParent = comp => {\n const focussableWrapperOpt = ancestor(comp.element, 'div.tox-focusable-wrapper');\n return focussableWrapperOpt.fold(Optional.none, focussableWrapper => {\n focus$3(focussableWrapper);\n return Optional.some(true);\n });\n };\n const getFieldPart = isField1 => FormField.parts.field({\n factory: Input,\n inputClasses: [\n 'tox-textfield',\n 'tox-toolbar-textfield',\n 'tox-textfield-size'\n ],\n data: isField1 ? width : height,\n inputBehaviours: derive$1([\n Disabling.config({ disabled }),\n Tabstopping.config({}),\n config('size-input-toolbar-events', [run$1(focusin(), (component, _simulatedEvent) => {\n emitWith(component, ratioEvent, { isField1 });\n })]),\n Keying.config({\n mode: 'special',\n onEnter,\n onEscape: goToParent\n })\n ]),\n selectOnFocus: false\n });\n const getLabel = label => ({\n dom: {\n tag: 'label',\n classes: ['tox-label']\n },\n components: [text$2(providersBackstage.translate(label))]\n });\n const focusableWrapper = field => ({\n dom: {\n tag: 'div',\n classes: [\n 'tox-focusable-wrapper',\n 'tox-toolbar-nav-item'\n ]\n },\n components: [field],\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({}),\n Keying.config({\n mode: 'special',\n onEnter: comp => {\n const focussableInputOpt = descendant(comp.element, 'input');\n return focussableInputOpt.fold(Optional.none, focussableInput => {\n focus$3(focussableInput);\n return Optional.some(true);\n });\n }\n })\n ])\n });\n const widthField = focusableWrapper(FormCoupledInputs.parts.field1(formGroup([\n FormField.parts.label(getLabel('Width:')),\n getFieldPart(true)\n ])));\n const heightField = focusableWrapper(FormCoupledInputs.parts.field2(formGroup([\n FormField.parts.label(getLabel('Height:')),\n getFieldPart(false)\n ])));\n const editorOffCell = Cell(noop);\n const controlLifecycleHandlers = [\n onControlAttached({\n onSetup: ctx.onSetup,\n getApi\n }, editorOffCell),\n onControlDetached({ getApi }, editorOffCell)\n ];\n return FormCoupledInputs.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-context-form__group']\n },\n components: [\n widthField,\n heightField,\n formGroup([\n getLabel(nbsp),\n pLock\n ])\n ],\n field1Name: 'width',\n field2Name: 'height',\n locked: true,\n markers: { lockClass: 'tox-locked' },\n onLockedChange: (current, other, _lock) => {\n parseSize(Representing.getValue(current)).each(size => {\n converter(size).each(newSize => {\n Representing.setValue(other, formatSize(newSize));\n });\n });\n },\n onInput: current => emit(current, formInputEvent),\n coupledFieldBehaviours: derive$1([\n Focusing.config({}),\n Keying.config({\n mode: 'flow',\n focusInside: FocusInsideModes.OnEnterOrSpaceMode,\n cycles: false,\n selector: 'button, .tox-focusable-wrapper'\n }),\n Disabling.config({\n disabled,\n onDisabled: comp => {\n FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.disable);\n FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.disable);\n FormCoupledInputs.getLock(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.enable);\n FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.enable);\n FormCoupledInputs.getLock(comp).each(Disabling.enable);\n }\n }),\n toggleOnReceive(() => providersBackstage.checkUiComponentContext('mode:design')),\n config('size-input-toolbar-events2', [\n run$1(ratioEvent, (component, simulatedEvent) => {\n const isField1 = simulatedEvent.event.isField1;\n const optCurrent = isField1 ? FormCoupledInputs.getField1(component) : FormCoupledInputs.getField2(component);\n const optOther = isField1 ? FormCoupledInputs.getField2(component) : FormCoupledInputs.getField1(component);\n const value1 = optCurrent.map(Representing.getValue).getOr('');\n const value2 = optOther.map(Representing.getValue).getOr('');\n converter = makeRatioConverter(value1, value2);\n }),\n run$1(formInputEvent, input => ctx.onInput(getFormApi(input))),\n ...controlLifecycleHandlers\n ])\n ])\n });\n };\n\n const createContextFormFieldFromParts = (pLabel, pField, providers) => FormField.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-context-form__group']\n },\n components: [\n ...pLabel.toArray(),\n pField\n ],\n fieldBehaviours: derive$1([Disabling.config({\n disabled: () => providers.checkUiComponentContext('mode:design').shouldDisable,\n onDisabled: comp => {\n focusParent(comp);\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: comp => {\n FormField.getField(comp).each(Disabling.enable);\n }\n })])\n });\n\n const renderContextFormSliderInput = (ctx, providers, onEnter) => {\n const editorOffCell = Cell(noop);\n const pLabel = ctx.label.map(label => FormField.parts.label({\n dom: {\n tag: 'label',\n classes: ['tox-label']\n },\n components: [text$2(providers.translate(label))]\n }));\n const pField = FormField.parts.field({\n factory: Input,\n type: 'range',\n inputClasses: [\n 'tox-toolbar-slider__input',\n 'tox-toolbar-nav-item'\n ],\n inputAttributes: {\n min: String(ctx.min()),\n max: String(ctx.max())\n },\n data: ctx.initValue().toString(),\n fromInputValue: value => toFloat(value).getOr(ctx.min()),\n toInputValue: value => String(value),\n inputBehaviours: derive$1([\n Disabling.config({ disabled: () => providers.checkUiComponentContext('mode:design').shouldDisable }),\n toggleOnReceive(() => providers.checkUiComponentContext('mode:design')),\n Keying.config({\n mode: 'special',\n onEnter,\n onLeft: (comp, se) => {\n se.cut();\n return Optional.none();\n },\n onRight: (comp, se) => {\n se.cut();\n return Optional.none();\n }\n }),\n config('slider-events', [\n onControlAttached({\n onSetup: ctx.onSetup,\n getApi: getFormApi,\n onBeforeSetup: Keying.focusIn\n }, editorOffCell),\n onControlDetached({ getApi: getFormApi }, editorOffCell),\n run$1(input(), comp => {\n ctx.onInput(getFormApi(comp));\n })\n ])\n ])\n });\n return createContextFormFieldFromParts(pLabel, pField, providers);\n };\n\n const renderContextFormTextInput = (ctx, providers, onEnter) => {\n const editorOffCell = Cell(noop);\n const pLabel = ctx.label.map(label => FormField.parts.label({\n dom: {\n tag: 'label',\n classes: ['tox-label']\n },\n components: [text$2(providers.translate(label))]\n }));\n const placeholder = ctx.placeholder.map(p => ({ placeholder: providers.translate(p) })).getOr({});\n const inputAttributes = { ...placeholder };\n const pField = FormField.parts.field({\n factory: Input,\n inputClasses: [\n 'tox-toolbar-textfield',\n 'tox-toolbar-nav-item'\n ],\n inputAttributes,\n data: ctx.initValue(),\n selectOnFocus: true,\n inputBehaviours: derive$1([\n Disabling.config({ disabled: () => providers.checkUiComponentContext('mode:design').shouldDisable }),\n toggleOnReceive(() => providers.checkUiComponentContext('mode:design')),\n Keying.config({\n mode: 'special',\n onEnter,\n onLeft: (comp, se) => {\n se.cut();\n return Optional.none();\n },\n onRight: (comp, se) => {\n se.cut();\n return Optional.none();\n }\n }),\n config('input-events', [\n onControlAttached({\n onSetup: ctx.onSetup,\n getApi: 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","// Exports the \"silver\" theme for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/themes/silver')\n// ES2015:\n// import 'tinymce/themes/silver'\nrequire('./theme.js');","/**\n * TinyMCE version 7.7.0 (TBD)\n */\n\n(function () {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.ModelManager');\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType$1 = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq$2 = t => a => t === a;\n const isString = isType$1('string');\n const isObject = isType$1('object');\n const isArray = isType$1('array');\n const isNull = eq$2(null);\n const isBoolean = isSimpleType('boolean');\n const isUndefined = eq$2(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isNumber = isSimpleType('number');\n\n const noop = () => {\n };\n const compose = (fa, fb) => {\n return (...args) => {\n return fa(fb.apply(null, args));\n };\n };\n const compose1 = (fbc, fab) => a => fbc(fab(a));\n const constant = value => {\n return () => {\n return value;\n };\n };\n const identity = x => {\n return x;\n };\n const tripleEquals = (a, b) => {\n return a === b;\n };\n function curry(fn, ...initialArgs) {\n return (...restArgs) => {\n const all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n const not = f => t => !f(t);\n const die = msg => {\n return () => {\n throw new Error(msg);\n };\n };\n const apply = f => {\n return f();\n };\n const never = constant(false);\n const always = constant(true);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativeSlice = Array.prototype.slice;\n const nativeIndexOf = Array.prototype.indexOf;\n const nativePush = Array.prototype.push;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const contains$2 = (xs, x) => rawIndexOf(xs, x) > -1;\n const exists = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n const range$1 = (num, f) => {\n const r = [];\n for (let i = 0; i < num; i++) {\n r.push(f(i));\n }\n return r;\n };\n const map$1 = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each$2 = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const eachr = (xs, f) => {\n for (let i = xs.length - 1; i >= 0; i--) {\n const x = xs[i];\n f(x, i);\n }\n };\n const partition = (xs, pred) => {\n const pass = [];\n const fail = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n const arr = pred(x, i) ? pass : fail;\n arr.push(x);\n }\n return {\n pass,\n fail\n };\n };\n const filter$2 = (xs, pred) => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n const foldr = (xs, f, acc) => {\n eachr(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const foldl = (xs, f, acc) => {\n each$2(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const findUntil = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n const find$1 = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\n const findIndex = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(i);\n }\n }\n return Optional.none();\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind$2 = (xs, f) => flatten(map$1(xs, f));\n const forall = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; ++i) {\n const x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n const reverse = xs => {\n const r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n const mapToObject = (xs, f) => {\n const r = {};\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n const sort$1 = (xs, comparator) => {\n const copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n const get$d = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n const head = xs => get$d(xs, 0);\n const last$2 = xs => get$d(xs, xs.length - 1);\n const findMap = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n const r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n const keys = Object.keys;\n const hasOwnProperty = Object.hasOwnProperty;\n const each$1 = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const map = (obj, f) => {\n return tupleMap(obj, (x, i) => ({\n k: i,\n v: f(x, i)\n }));\n };\n const tupleMap = (obj, f) => {\n const r = {};\n each$1(obj, (x, i) => {\n const tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n const objAcc = r => (x, i) => {\n r[i] = x;\n };\n const internalFilter = (obj, pred, onTrue, onFalse) => {\n each$1(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const filter$1 = (obj, pred) => {\n const t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n const mapToArray = (obj, f) => {\n const r = [];\n each$1(obj, (value, name) => {\n r.push(f(value, name));\n });\n return r;\n };\n const values = obj => {\n return mapToArray(obj, identity);\n };\n const get$c = (obj, key) => {\n return has$1(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n const has$1 = (obj, key) => hasOwnProperty.call(obj, key);\n const hasNonNullableKey = (obj, key) => has$1(obj, key) && obj[key] !== undefined && obj[key] !== null;\n const isEmpty = r => {\n for (const x in r) {\n if (hasOwnProperty.call(r, x)) {\n return false;\n }\n }\n return true;\n };\n\n const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n const path = (parts, scope) => {\n let o = scope !== undefined && scope !== null ? scope : Global;\n for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n const resolve$2 = (p, scope) => {\n const parts = p.split('.');\n return path(parts, scope);\n };\n\n const unsafe = (name, scope) => {\n return resolve$2(name, scope);\n };\n const getOrDie = (name, scope) => {\n const actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n\n const getPrototypeOf = Object.getPrototypeOf;\n const sandHTMLElement = scope => {\n return getOrDie('HTMLElement', scope);\n };\n const isPrototypeOf = x => {\n const scope = resolve$2('ownerDocument.defaultView', x);\n return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf(x).constructor.name));\n };\n\n const COMMENT = 8;\n const DOCUMENT = 9;\n const DOCUMENT_FRAGMENT = 11;\n const ELEMENT = 1;\n const TEXT = 3;\n\n const name = element => {\n const r = element.dom.nodeName;\n return r.toLowerCase();\n };\n const type = element => element.dom.nodeType;\n const isType = t => element => type(element) === t;\n const isComment = element => type(element) === COMMENT || name(element) === '#comment';\n const isHTMLElement = element => isElement(element) && isPrototypeOf(element.dom);\n const isElement = isType(ELEMENT);\n const isText = isType(TEXT);\n const isDocument = isType(DOCUMENT);\n const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n const isTag = tag => e => isElement(e) && name(e) === tag;\n\n const rawSet = (dom, key, value) => {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n const set$2 = (element, key, value) => {\n rawSet(element.dom, key, value);\n };\n const setAll$1 = (element, attrs) => {\n const dom = element.dom;\n each$1(attrs, (v, k) => {\n rawSet(dom, k, v);\n });\n };\n const setOptions = (element, attrs) => {\n each$1(attrs, (v, k) => {\n v.fold(() => {\n remove$7(element, k);\n }, value => {\n rawSet(element.dom, k, value);\n });\n });\n };\n const get$b = (element, key) => {\n const v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n const getOpt = (element, key) => Optional.from(get$b(element, key));\n const remove$7 = (element, key) => {\n element.dom.removeAttribute(key);\n };\n const clone$2 = element => foldl(element.dom.attributes, (acc, attr) => {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n\n const fromHtml$1 = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n const message = 'HTML does not have a single root node';\n console.error(message, html);\n throw new Error(message);\n }\n return fromDom$1(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom$1(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom$1(node);\n };\n const fromDom$1 = node => {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n const fromPoint$1 = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$1);\n const SugarElement = {\n fromHtml: fromHtml$1,\n fromTag,\n fromText,\n fromDom: fromDom$1,\n fromPoint: fromPoint$1\n };\n\n const is$2 = (element, selector) => {\n const dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n const elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n const all$1 = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map$1(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n const one = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n };\n\n const eq$1 = (e1, e2) => e1.dom === e2.dom;\n const contains$1 = (e1, e2) => {\n const d1 = e1.dom;\n const d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n const is$1 = is$2;\n\n const owner = element => SugarElement.fromDom(element.dom.ownerDocument);\n const documentOrOwner = dos => isDocument(dos) ? dos : owner(dos);\n const documentElement = element => SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n const defaultView = element => SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n const parentElement = element => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n const parents = (element, isRoot) => {\n const stop = isFunction(isRoot) ? isRoot : never;\n let dom = element.dom;\n const ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n const rawParent = dom.parentNode;\n const p = SugarElement.fromDom(rawParent);\n ret.push(p);\n if (stop(p) === true) {\n break;\n } else {\n dom = rawParent;\n }\n }\n return ret;\n };\n const prevSibling = element => Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n const children$2 = element => map$1(element.dom.childNodes, SugarElement.fromDom);\n const child$2 = (element, index) => {\n const cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n const firstChild = element => child$2(element, 0);\n\n const before$3 = (marker, element) => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n const after$5 = (marker, element) => {\n const sibling = nextSibling(marker);\n sibling.fold(() => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n append$1(v, element);\n });\n }, v => {\n before$3(v, element);\n });\n };\n const prepend = (parent, element) => {\n const firstChild$1 = firstChild(parent);\n firstChild$1.fold(() => {\n append$1(parent, element);\n }, v => {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n const append$1 = (parent, element) => {\n parent.dom.appendChild(element.dom);\n };\n const appendAt = (parent, element, index) => {\n child$2(parent, index).fold(() => {\n append$1(parent, element);\n }, v => {\n before$3(v, element);\n });\n };\n const wrap = (element, wrapper) => {\n before$3(element, wrapper);\n append$1(wrapper, element);\n };\n\n const after$4 = (marker, elements) => {\n each$2(elements, (x, i) => {\n const e = i === 0 ? marker : elements[i - 1];\n after$5(e, x);\n });\n };\n const append = (parent, elements) => {\n each$2(elements, x => {\n append$1(parent, x);\n });\n };\n\n const empty = element => {\n element.dom.textContent = '';\n each$2(children$2(element), rogue => {\n remove$6(rogue);\n });\n };\n const remove$6 = element => {\n const dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n const unwrap = wrapper => {\n const children = children$2(wrapper);\n if (children.length > 0) {\n after$4(wrapper, children);\n }\n remove$6(wrapper);\n };\n\n const clone$1 = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n const shallow = original => clone$1(original, false);\n const deep = original => clone$1(original, true);\n const shallowAs = (original, tag) => {\n const nu = SugarElement.fromTag(tag);\n const attributes = clone$2(original);\n setAll$1(nu, attributes);\n return nu;\n };\n const copy$2 = (original, tag) => {\n const nu = shallowAs(original, tag);\n const cloneChildren = children$2(deep(original));\n append(nu, cloneChildren);\n return nu;\n };\n const mutate$1 = (original, tag) => {\n const nu = shallowAs(original, tag);\n after$5(original, nu);\n const children = children$2(original);\n append(nu, children);\n remove$6(original);\n return nu;\n };\n\n const validSectionList = [\n 'tfoot',\n 'thead',\n 'tbody',\n 'colgroup'\n ];\n const isValidSection = parentName => contains$2(validSectionList, parentName);\n const grid = (rows, columns) => ({\n rows,\n columns\n });\n const address = (row, column) => ({\n row,\n column\n });\n const detail = (element, rowspan, colspan) => ({\n element,\n rowspan,\n colspan\n });\n const detailnew = (element, rowspan, colspan, isNew) => ({\n element,\n rowspan,\n colspan,\n isNew\n });\n const extended = (element, rowspan, colspan, row, column, isLocked) => ({\n element,\n rowspan,\n colspan,\n row,\n column,\n isLocked\n });\n const rowdetail = (element, cells, section) => ({\n element,\n cells,\n section\n });\n const rowdetailnew = (element, cells, section, isNew) => ({\n element,\n cells,\n section,\n isNew\n });\n const elementnew = (element, isNew, isLocked) => ({\n element,\n isNew,\n isLocked\n });\n const rowcells = (element, cells, section, isNew) => ({\n element,\n cells,\n section,\n isNew\n });\n const bounds = (startRow, startCol, finishRow, finishCol) => ({\n startRow,\n startCol,\n finishRow,\n finishCol\n });\n const columnext = (element, colspan, column) => ({\n element,\n colspan,\n column\n });\n const colgroup = (element, columns) => ({\n element,\n columns\n });\n\n const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n const getRootNode = e => SugarElement.fromDom(e.dom.getRootNode());\n const getContentContainer = dos => isShadowRoot(dos) ? dos : SugarElement.fromDom(documentOrOwner(dos).dom.body);\n const getShadowRoot = e => {\n const r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n const getOriginalEventTarget = event => {\n if (isNonNullable(event.target)) {\n const el = SugarElement.fromDom(event.target);\n if (isElement(el) && isOpenShadowHost(el)) {\n if (event.composed && event.composedPath) {\n const composedPath = event.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Optional.from(event.target);\n };\n const isOpenShadowHost = element => isNonNullable(element.dom.shadowRoot);\n\n const inBody = element => {\n const dom = isText(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n const doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n };\n const body$1 = () => getBody$1(SugarElement.fromDom(document));\n const getBody$1 = doc => {\n const b = doc.dom.body;\n if (b === null || b === undefined) {\n throw new Error('Body is not available yet');\n }\n return SugarElement.fromDom(b);\n };\n\n const ancestors$4 = (scope, predicate, isRoot) => filter$2(parents(scope, isRoot), predicate);\n const children$1 = (scope, predicate) => filter$2(children$2(scope), predicate);\n const descendants$1 = (scope, predicate) => {\n let result = [];\n each$2(children$2(scope), x => {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(descendants$1(x, predicate));\n });\n return result;\n };\n\n const ancestors$3 = (scope, selector, isRoot) => ancestors$4(scope, e => is$2(e, selector), isRoot);\n const children = (scope, selector) => children$1(scope, e => is$2(e, selector));\n const descendants = (scope, selector) => all$1(selector, scope);\n\n var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n if (is(scope, a)) {\n return Optional.some(scope);\n } else if (isFunction(isRoot) && isRoot(scope)) {\n return Optional.none();\n } else {\n return ancestor(scope, a, isRoot);\n }\n };\n\n const ancestor$2 = (scope, predicate, isRoot) => {\n let element = scope.dom;\n const stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n const el = SugarElement.fromDom(element);\n if (predicate(el)) {\n return Optional.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n const closest$2 = (scope, predicate, isRoot) => {\n const is = (s, test) => test(s);\n return ClosestOrAncestor(is, ancestor$2, scope, predicate, isRoot);\n };\n const child$1 = (scope, predicate) => {\n const pred = node => predicate(SugarElement.fromDom(node));\n const result = find$1(scope.dom.childNodes, pred);\n return result.map(SugarElement.fromDom);\n };\n const descendant$1 = (scope, predicate) => {\n const descend = node => {\n for (let i = 0; i < node.childNodes.length; i++) {\n const child = SugarElement.fromDom(node.childNodes[i]);\n if (predicate(child)) {\n return Optional.some(child);\n }\n const res = descend(node.childNodes[i]);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope.dom);\n };\n\n const ancestor$1 = (scope, selector, isRoot) => ancestor$2(scope, e => is$2(e, selector), isRoot);\n const child = (scope, selector) => child$1(scope, e => is$2(e, selector));\n const descendant = (scope, selector) => one(selector, scope);\n const closest$1 = (scope, selector, isRoot) => {\n const is = (element, selector) => is$2(element, selector);\n return ClosestOrAncestor(is, ancestor$1, scope, selector, isRoot);\n };\n\n const is = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n const cat = arr => {\n const r = [];\n const push = x => {\n r.push(x);\n };\n for (let i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n const bindFrom = (a, f) => a !== undefined && a !== null ? f(a) : Optional.none();\n const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n const removeFromStart = (str, numChars) => {\n return str.substring(numChars);\n };\n\n const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n const removeLeading = (str, prefix) => {\n return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n };\n const contains = (str, substr, start = 0, end) => {\n const idx = str.indexOf(substr, start);\n if (idx !== -1) {\n return isUndefined(end) ? true : idx + substr.length <= end;\n } else {\n return false;\n }\n };\n const startsWith = (str, prefix) => {\n return checkRange(str, prefix, 0);\n };\n const endsWith = (str, suffix) => {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n const blank = r => s => s.replace(r, '');\n const trim = blank(/^\\s+|\\s+$/g);\n const isNotEmpty = s => s.length > 0;\n const toFloat = value => {\n const num = parseFloat(value);\n return isNaN(num) ? Optional.none() : Optional.some(num);\n };\n\n const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n const internalSet = (dom, property, value) => {\n if (!isString(value)) {\n console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n const internalRemove = (dom, property) => {\n if (isSupported(dom)) {\n dom.style.removeProperty(property);\n }\n };\n const set$1 = (element, property, value) => {\n const dom = element.dom;\n internalSet(dom, property, value);\n };\n const setAll = (element, css) => {\n const dom = element.dom;\n each$1(css, (v, k) => {\n internalSet(dom, k, v);\n });\n };\n const get$a = (element, property) => {\n const dom = element.dom;\n const styles = window.getComputedStyle(dom);\n const r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n const getUnsafeProperty = (dom, property) => isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n const getRaw$2 = (element, property) => {\n const dom = element.dom;\n const raw = getUnsafeProperty(dom, property);\n return Optional.from(raw).filter(r => r.length > 0);\n };\n const remove$5 = (element, property) => {\n const dom = element.dom;\n internalRemove(dom, property);\n if (is(getOpt(element, 'style').map(trim), '')) {\n remove$7(element, 'style');\n }\n };\n const copy$1 = (source, target) => {\n const sourceDom = source.dom;\n const targetDom = target.dom;\n if (isSupported(sourceDom) && isSupported(targetDom)) {\n targetDom.style.cssText = sourceDom.style.cssText;\n }\n };\n\n const getAttrValue = (cell, name, fallback = 0) => getOpt(cell, name).map(value => parseInt(value, 10)).getOr(fallback);\n const getSpan = (cell, type) => getAttrValue(cell, type, 1);\n const hasColspan = cellOrCol => {\n if (isTag('col')(cellOrCol)) {\n return getAttrValue(cellOrCol, 'span', 1) > 1;\n } else {\n return getSpan(cellOrCol, 'colspan') > 1;\n }\n };\n const hasRowspan = cell => getSpan(cell, 'rowspan') > 1;\n const getCssValue = (element, property) => parseInt(get$a(element, property), 10);\n const minWidth = constant(10);\n const minHeight = constant(10);\n\n const firstLayer = (scope, selector) => {\n return filterFirstLayer(scope, selector, always);\n };\n const filterFirstLayer = (scope, selector, predicate) => {\n return bind$2(children$2(scope), x => {\n if (is$2(x, selector)) {\n return predicate(x) ? [x] : [];\n } else {\n return filterFirstLayer(x, selector, predicate);\n }\n });\n };\n\n const lookup = (tags, element, isRoot = never) => {\n if (isRoot(element)) {\n return Optional.none();\n }\n if (contains$2(tags, name(element))) {\n return Optional.some(element);\n }\n const isRootOrUpperTable = elm => is$2(elm, 'table') || isRoot(elm);\n return ancestor$1(element, tags.join(','), isRootOrUpperTable);\n };\n const cell = (element, isRoot) => lookup([\n 'td',\n 'th'\n ], element, isRoot);\n const cells$1 = ancestor => firstLayer(ancestor, 'th,td');\n const columns$1 = ancestor => {\n if (is$2(ancestor, 'colgroup')) {\n return children(ancestor, 'col');\n } else {\n return bind$2(columnGroups(ancestor), columnGroup => children(columnGroup, 'col'));\n }\n };\n const table = (element, isRoot) => closest$1(element, 'table', isRoot);\n const rows$1 = ancestor => firstLayer(ancestor, 'tr');\n const columnGroups = ancestor => table(ancestor).fold(constant([]), table => children(table, 'colgroup'));\n\n const fromRowsOrColGroups = (elems, getSection) => map$1(elems, row => {\n if (name(row) === 'colgroup') {\n const cells = map$1(columns$1(row), column => {\n const colspan = getAttrValue(column, 'span', 1);\n return detail(column, 1, colspan);\n });\n return rowdetail(row, cells, 'colgroup');\n } else {\n const cells = map$1(cells$1(row), cell => {\n const rowspan = getAttrValue(cell, 'rowspan', 1);\n const colspan = getAttrValue(cell, 'colspan', 1);\n return detail(cell, rowspan, colspan);\n });\n return rowdetail(row, cells, getSection(row));\n }\n });\n const getParentSection = group => parent(group).map(parent => {\n const parentName = name(parent);\n return isValidSection(parentName) ? parentName : 'tbody';\n }).getOr('tbody');\n const fromTable$1 = table => {\n const rows = rows$1(table);\n const columnGroups$1 = columnGroups(table);\n const elems = [\n ...columnGroups$1,\n ...rows\n ];\n return fromRowsOrColGroups(elems, getParentSection);\n };\n const fromPastedRows = (elems, section) => fromRowsOrColGroups(elems, () => section);\n\n const cached = f => {\n let called = false;\n let r;\n return (...args) => {\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n const DeviceType = (os, browser, userAgent, mediaMatch) => {\n const isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n const isiPhone = os.isiOS() && !isiPad;\n const isMobile = os.isiOS() || os.isAndroid();\n const isTouch = isMobile || mediaMatch('(pointer:coarse)');\n const isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n const isPhone = isiPhone || isMobile && !isTablet;\n const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n const isDesktop = !isPhone && !isTablet && !iOSwebview;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview),\n isDesktop: constant(isDesktop)\n };\n };\n\n const firstMatch = (regexes, s) => {\n for (let i = 0; i < regexes.length; i++) {\n const x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n const find = (regexes, agent) => {\n const r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n const group = i => {\n return Number(agent.replace(r, '$' + i));\n };\n return nu$2(group(1), group(2));\n };\n const detect$5 = (versionRegexes, agent) => {\n const cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$2();\n }\n return find(versionRegexes, cleanedAgent);\n };\n const unknown$2 = () => {\n return nu$2(0, 0);\n };\n const nu$2 = (major, minor) => {\n return {\n major,\n minor\n };\n };\n const Version = {\n nu: nu$2,\n detect: detect$5,\n unknown: unknown$2\n };\n\n const detectBrowser$1 = (browsers, userAgentData) => {\n return findMap(userAgentData.brands, uaBrand => {\n const lcBrand = uaBrand.brand.toLowerCase();\n return find$1(browsers, browser => {\n var _a;\n return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n }).map(info => ({\n current: info.name,\n version: Version.nu(parseInt(uaBrand.version, 10), 0)\n }));\n });\n };\n\n const detect$4 = (candidates, userAgent) => {\n const agent = String(userAgent).toLowerCase();\n return find$1(candidates, candidate => {\n return candidate.search(agent);\n });\n };\n const detectBrowser = (browsers, userAgent) => {\n return detect$4(browsers, userAgent).map(browser => {\n const version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version\n };\n });\n };\n const detectOs = (oses, userAgent) => {\n return detect$4(oses, userAgent).map(os => {\n const version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version\n };\n });\n };\n\n const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n const checkContains = target => {\n return uastring => {\n return contains(uastring, target);\n };\n };\n const browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: uastring => {\n return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chromium',\n brand: 'Chromium',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: uastring => {\n return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: uastring => {\n return contains(uastring, 'msie') || contains(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: uastring => {\n return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');\n }\n }\n ];\n const oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: uastring => {\n return contains(uastring, 'iphone') || contains(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'macOS',\n search: checkContains('mac os x'),\n versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n },\n {\n name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n const PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n const edge = 'Edge';\n const chromium = 'Chromium';\n const ie = 'IE';\n const opera = 'Opera';\n const firefox = 'Firefox';\n const safari = 'Safari';\n const unknown$1 = () => {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$1 = info => {\n const current = info.current;\n const version = info.version;\n const isBrowser = name => () => current === name;\n return {\n current,\n version,\n isEdge: isBrowser(edge),\n isChromium: isBrowser(chromium),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n const Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chromium: constant(chromium),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n const windows = 'Windows';\n const ios = 'iOS';\n const android = 'Android';\n const linux = 'Linux';\n const macos = 'macOS';\n const solaris = 'Solaris';\n const freebsd = 'FreeBSD';\n const chromeos = 'ChromeOS';\n const unknown = () => {\n return nu({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu = info => {\n const current = info.current;\n const version = info.version;\n const isOS = name => () => current === name;\n return {\n current,\n version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isMacOS: isOS(macos),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n const OperatingSystem = {\n unknown,\n nu,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n macos: constant(macos),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n const detect$3 = (userAgent, userAgentDataOpt, mediaMatch) => {\n const browsers = PlatformInfo.browsers();\n const oses = PlatformInfo.oses();\n const browser = userAgentDataOpt.bind(userAgentData => detectBrowser$1(browsers, userAgentData)).orThunk(() => detectBrowser(browsers, userAgent)).fold(Browser.unknown, Browser.nu);\n const os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n const deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n return {\n browser,\n os,\n deviceType\n };\n };\n const PlatformDetection = { detect: detect$3 };\n\n const mediaMatch = query => window.matchMedia(query).matches;\n let platform = cached(() => PlatformDetection.detect(window.navigator.userAgent, Optional.from(window.navigator.userAgentData), mediaMatch));\n const detect$2 = () => platform();\n\n const Dimension = (name, getOffset) => {\n const set = (element, h) => {\n if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n }\n const dom = element.dom;\n if (isSupported(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n const get = element => {\n const r = getOffset(element);\n if (r <= 0 || r === null) {\n const css = get$a(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n const getOuter = get;\n const aggregate = (element, properties) => foldl(properties, (acc, property) => {\n const val = get$a(element, property);\n const value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n const max = (element, value, properties) => {\n const cumulativeInclusions = aggregate(element, properties);\n const absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set,\n get,\n getOuter,\n aggregate,\n max\n };\n };\n\n const toNumber = (px, fallback) => toFloat(px).getOr(fallback);\n const getProp = (element, name, fallback) => toNumber(get$a(element, name), fallback);\n const calcContentBoxSize = (element, size, upper, lower) => {\n const paddingUpper = getProp(element, `padding-${ upper }`, 0);\n const paddingLower = getProp(element, `padding-${ lower }`, 0);\n const borderUpper = getProp(element, `border-${ upper }-width`, 0);\n const borderLower = getProp(element, `border-${ lower }-width`, 0);\n return size - paddingUpper - paddingLower - borderUpper - borderLower;\n };\n const getCalculatedWidth = (element, boxSizing) => {\n const dom = element.dom;\n const width = dom.getBoundingClientRect().width || dom.offsetWidth;\n return boxSizing === 'border-box' ? width : calcContentBoxSize(element, width, 'left', 'right');\n };\n const getHeight$1 = element => getProp(element, 'height', element.dom.offsetHeight);\n const getWidth = element => getProp(element, 'width', element.dom.offsetWidth);\n const getInnerWidth = element => getCalculatedWidth(element, 'content-box');\n\n const api$2 = Dimension('width', element => element.dom.offsetWidth);\n const get$9 = element => api$2.get(element);\n const getOuter$2 = element => api$2.getOuter(element);\n const getInner = getInnerWidth;\n const getRuntime$1 = getWidth;\n\n const addCells = (gridRow, index, cells) => {\n const existingCells = gridRow.cells;\n const before = existingCells.slice(0, index);\n const after = existingCells.slice(index);\n const newCells = before.concat(cells).concat(after);\n return setCells(gridRow, newCells);\n };\n const addCell = (gridRow, index, cell) => addCells(gridRow, index, [cell]);\n const mutateCell = (gridRow, index, cell) => {\n const cells = gridRow.cells;\n cells[index] = cell;\n };\n const setCells = (gridRow, cells) => rowcells(gridRow.element, cells, gridRow.section, gridRow.isNew);\n const mapCells = (gridRow, f) => {\n const cells = gridRow.cells;\n const r = map$1(cells, f);\n return rowcells(gridRow.element, r, gridRow.section, gridRow.isNew);\n };\n const getCell = (gridRow, index) => gridRow.cells[index];\n const getCellElement = (gridRow, index) => getCell(gridRow, index).element;\n const cellLength = gridRow => gridRow.cells.length;\n const extractGridDetails = grid => {\n const result = partition(grid, row => row.section === 'colgroup');\n return {\n rows: result.fail,\n cols: result.pass\n };\n };\n const clone = (gridRow, cloneRow, cloneCell) => {\n const newCells = map$1(gridRow.cells, cloneCell);\n return rowcells(cloneRow(gridRow.element), newCells, gridRow.section, true);\n };\n\n const LOCKED_COL_ATTR = 'data-snooker-locked-cols';\n const getLockedColumnsFromTable = table => getOpt(table, LOCKED_COL_ATTR).bind(lockedColStr => Optional.from(lockedColStr.match(/\\d+/g))).map(lockedCols => mapToObject(lockedCols, always));\n const getLockedColumnsFromGrid = grid => {\n const locked = foldl(extractGridDetails(grid).rows, (acc, row) => {\n each$2(row.cells, (cell, idx) => {\n if (cell.isLocked) {\n acc[idx] = true;\n }\n });\n return acc;\n }, {});\n const lockedArr = mapToArray(locked, (_val, key) => parseInt(key, 10));\n return sort$1(lockedArr);\n };\n\n const key = (row, column) => {\n return row + ',' + column;\n };\n const getAt = (warehouse, row, column) => Optional.from(warehouse.access[key(row, column)]);\n const findItem = (warehouse, item, comparator) => {\n const filtered = filterItems(warehouse, detail => {\n return comparator(item, detail.element);\n });\n return filtered.length > 0 ? Optional.some(filtered[0]) : Optional.none();\n };\n const filterItems = (warehouse, predicate) => {\n const all = bind$2(warehouse.all, r => {\n return r.cells;\n });\n return filter$2(all, predicate);\n };\n const generateColumns = rowData => {\n const columnsGroup = {};\n let index = 0;\n each$2(rowData.cells, column => {\n const colspan = column.colspan;\n range$1(colspan, columnIndex => {\n const colIndex = index + columnIndex;\n columnsGroup[colIndex] = columnext(column.element, colspan, colIndex);\n });\n index += colspan;\n });\n return columnsGroup;\n };\n const generate$2 = list => {\n const access = {};\n const cells = [];\n const tableOpt = head(list).map(rowData => rowData.element).bind(table);\n const lockedColumns = tableOpt.bind(getLockedColumnsFromTable).getOr({});\n let maxRows = 0;\n let maxColumns = 0;\n let rowCount = 0;\n const {\n pass: colgroupRows,\n fail: rows\n } = partition(list, rowData => rowData.section === 'colgroup');\n each$2(rows, rowData => {\n const currentRow = [];\n each$2(rowData.cells, rowCell => {\n let start = 0;\n while (access[key(rowCount, start)] !== undefined) {\n start++;\n }\n const isLocked = hasNonNullableKey(lockedColumns, start.toString());\n const current = extended(rowCell.element, rowCell.rowspan, rowCell.colspan, rowCount, start, isLocked);\n for (let occupiedColumnPosition = 0; occupiedColumnPosition < rowCell.colspan; occupiedColumnPosition++) {\n for (let occupiedRowPosition = 0; occupiedRowPosition < rowCell.rowspan; occupiedRowPosition++) {\n const rowPosition = rowCount + occupiedRowPosition;\n const columnPosition = start + occupiedColumnPosition;\n const newpos = key(rowPosition, columnPosition);\n access[newpos] = current;\n maxColumns = Math.max(maxColumns, columnPosition + 1);\n }\n }\n currentRow.push(current);\n });\n maxRows++;\n cells.push(rowdetail(rowData.element, currentRow, rowData.section));\n rowCount++;\n });\n const {columns, colgroups} = last$2(colgroupRows).map(rowData => {\n const columns = generateColumns(rowData);\n const colgroup$1 = colgroup(rowData.element, values(columns));\n return {\n colgroups: [colgroup$1],\n columns\n };\n }).getOrThunk(() => ({\n colgroups: [],\n columns: {}\n }));\n const grid$1 = grid(maxRows, maxColumns);\n return {\n grid: grid$1,\n access,\n all: cells,\n columns,\n colgroups\n };\n };\n const fromTable = table => {\n const list = fromTable$1(table);\n return generate$2(list);\n };\n const justCells = warehouse => bind$2(warehouse.all, w => w.cells);\n const justColumns = warehouse => values(warehouse.columns);\n const hasColumns = warehouse => keys(warehouse.columns).length > 0;\n const getColumnAt = (warehouse, columnIndex) => Optional.from(warehouse.columns[columnIndex]);\n const Warehouse = {\n fromTable,\n generate: generate$2,\n getAt,\n findItem,\n filterItems,\n justCells,\n justColumns,\n hasColumns,\n getColumnAt\n };\n\n const columns = (warehouse, isValidCell = always) => {\n const grid = warehouse.grid;\n const cols = range$1(grid.columns, identity);\n const rowsArr = range$1(grid.rows, identity);\n return map$1(cols, col => {\n const getBlock = () => bind$2(rowsArr, r => Warehouse.getAt(warehouse, r, col).filter(detail => detail.column === col).toArray());\n const isValid = detail => detail.colspan === 1 && isValidCell(detail.element);\n const getFallback = () => Warehouse.getAt(warehouse, 0, col);\n return decide(getBlock, isValid, getFallback);\n });\n };\n const decide = (getBlock, isValid, getFallback) => {\n const inBlock = getBlock();\n const validInBlock = find$1(inBlock, isValid);\n const detailOption = validInBlock.orThunk(() => Optional.from(inBlock[0]).orThunk(getFallback));\n return detailOption.map(detail => detail.element);\n };\n const rows = warehouse => {\n const grid = warehouse.grid;\n const rowsArr = range$1(grid.rows, identity);\n const cols = range$1(grid.columns, identity);\n return map$1(rowsArr, row => {\n const getBlock = () => bind$2(cols, c => Warehouse.getAt(warehouse, row, c).filter(detail => detail.row === row).fold(constant([]), detail => [detail]));\n const isSingle = detail => detail.rowspan === 1;\n const getFallback = () => Warehouse.getAt(warehouse, row, 0);\n return decide(getBlock, isSingle, getFallback);\n });\n };\n\n const deduce = (xs, index) => {\n if (index < 0 || index >= xs.length - 1) {\n return Optional.none();\n }\n const current = xs[index].fold(() => {\n const rest = reverse(xs.slice(0, index));\n return findMap(rest, (a, i) => a.map(aa => ({\n value: aa,\n delta: i + 1\n })));\n }, c => Optional.some({\n value: c,\n delta: 0\n }));\n const next = xs[index + 1].fold(() => {\n const rest = xs.slice(index + 1);\n return findMap(rest, (a, i) => a.map(aa => ({\n value: aa,\n delta: i + 1\n })));\n }, n => Optional.some({\n value: n,\n delta: 1\n }));\n return current.bind(c => next.map(n => {\n const extras = n.delta + c.delta;\n return Math.abs(n.value - c.value) / extras;\n }));\n };\n\n const onDirection = (isLtr, isRtl) => element => getDirection(element) === 'rtl' ? isRtl : isLtr;\n const getDirection = element => get$a(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n\n const api$1 = Dimension('height', element => {\n const dom = element.dom;\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n const get$8 = element => api$1.get(element);\n const getOuter$1 = element => api$1.getOuter(element);\n const getRuntime = getHeight$1;\n\n const r = (left, top) => {\n const translate = (x, y) => r(left + x, top + y);\n return {\n left,\n top,\n translate\n };\n };\n const SugarPosition = r;\n\n const boxPosition = dom => {\n const box = dom.getBoundingClientRect();\n return SugarPosition(box.left, box.top);\n };\n const firstDefinedOrZero = (a, b) => {\n if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n const absolute = element => {\n const doc = element.dom.ownerDocument;\n const body = doc.body;\n const win = doc.defaultView;\n const html = doc.documentElement;\n if (body === element.dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n const scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n const scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n const clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n const clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n const viewport = element => {\n const dom = element.dom;\n const doc = dom.ownerDocument;\n const body = doc.body;\n if (body === dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return SugarPosition(0, 0);\n }\n return boxPosition(dom);\n };\n\n const rowInfo = (row, y) => ({\n row,\n y\n });\n const colInfo = (col, x) => ({\n col,\n x\n });\n const rtlEdge = cell => {\n const pos = absolute(cell);\n return pos.left + getOuter$2(cell);\n };\n const ltrEdge = cell => {\n return absolute(cell).left;\n };\n const getLeftEdge = (index, cell) => {\n return colInfo(index, ltrEdge(cell));\n };\n const getRightEdge = (index, cell) => {\n return colInfo(index, rtlEdge(cell));\n };\n const getTop$1 = cell => {\n return absolute(cell).top;\n };\n const getTopEdge = (index, cell) => {\n return rowInfo(index, getTop$1(cell));\n };\n const getBottomEdge = (index, cell) => {\n return rowInfo(index, getTop$1(cell) + getOuter$1(cell));\n };\n const findPositions = (getInnerEdge, getOuterEdge, array) => {\n if (array.length === 0) {\n return [];\n }\n const lines = map$1(array.slice(1), (cellOption, index) => {\n return cellOption.map(cell => {\n return getInnerEdge(index, cell);\n });\n });\n const lastLine = array[array.length - 1].map(cell => {\n return getOuterEdge(array.length - 1, cell);\n });\n return lines.concat([lastLine]);\n };\n const negate = step => {\n return -step;\n };\n const height = {\n delta: identity,\n positions: optElements => findPositions(getTopEdge, getBottomEdge, optElements),\n edge: getTop$1\n };\n const ltr$1 = {\n delta: identity,\n edge: ltrEdge,\n positions: optElements => findPositions(getLeftEdge, getRightEdge, optElements)\n };\n const rtl$1 = {\n delta: negate,\n edge: rtlEdge,\n positions: optElements => findPositions(getRightEdge, getLeftEdge, optElements)\n };\n const detect$1 = onDirection(ltr$1, rtl$1);\n const width = {\n delta: (amount, table) => detect$1(table).delta(amount, table),\n positions: (cols, table) => detect$1(table).positions(cols, table),\n edge: cell => detect$1(cell).edge(cell)\n };\n\n const units = {\n unsupportedLength: [\n 'em',\n 'ex',\n 'cap',\n 'ch',\n 'ic',\n 'rem',\n 'lh',\n 'rlh',\n 'vw',\n 'vh',\n 'vi',\n 'vb',\n 'vmin',\n 'vmax',\n 'cm',\n 'mm',\n 'Q',\n 'in',\n 'pc',\n 'pt',\n 'px'\n ],\n fixed: [\n 'px',\n 'pt'\n ],\n relative: ['%'],\n empty: ['']\n };\n const pattern = (() => {\n const decimalDigits = '[0-9]+';\n const signedInteger = '[+-]?' + decimalDigits;\n const exponentPart = '[eE]' + signedInteger;\n const dot = '\\\\.';\n const opt = input => `(?:${ input })?`;\n const unsignedDecimalLiteral = [\n 'Infinity',\n decimalDigits + dot + opt(decimalDigits) + opt(exponentPart),\n dot + decimalDigits + opt(exponentPart),\n decimalDigits + opt(exponentPart)\n ].join('|');\n const float = `[+-]?(?:${ unsignedDecimalLiteral })`;\n return new RegExp(`^(${ float })(.*)$`);\n })();\n const isUnit = (unit, accepted) => exists(accepted, acc => exists(units[acc], check => unit === check));\n const parse = (input, accepted) => {\n const match = Optional.from(pattern.exec(input));\n return match.bind(array => {\n const value = Number(array[1]);\n const unitRaw = array[2];\n if (isUnit(unitRaw, accepted)) {\n return Optional.some({\n value,\n unit: unitRaw\n });\n } else {\n return Optional.none();\n }\n });\n };\n\n const rPercentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n const rPixelBasedSizeRegex = /(\\d+(\\.\\d+)?)px|em/;\n const isCol$2 = isTag('col');\n const isRow$2 = isTag('tr');\n const getPercentSize = (elm, outerGetter, innerGetter) => {\n const relativeParent = parentElement(elm).getOrThunk(() => getBody$1(owner(elm)));\n return outerGetter(elm) / innerGetter(relativeParent) * 100;\n };\n const setPixelWidth = (cell, amount) => {\n set$1(cell, 'width', amount + 'px');\n };\n const setPercentageWidth = (cell, amount) => {\n set$1(cell, 'width', amount + '%');\n };\n const setHeight = (cell, amount) => {\n set$1(cell, 'height', amount + 'px');\n };\n const removeHeight = cell => {\n remove$5(cell, 'height');\n };\n const getHeightValue = cell => getRuntime(cell) + 'px';\n const convert = (cell, number, getter, setter) => {\n const newSize = table(cell).map(table => {\n const total = getter(table);\n return Math.floor(number / 100 * total);\n }).getOr(number);\n setter(cell, newSize);\n return newSize;\n };\n const normalizePixelSize = (value, cell, getter, setter) => {\n const number = parseFloat(value);\n return endsWith(value, '%') && name(cell) !== 'table' ? convert(cell, number, getter, setter) : number;\n };\n const getTotalHeight = cell => {\n const value = getHeightValue(cell);\n if (!value) {\n return get$8(cell);\n }\n return normalizePixelSize(value, cell, get$8, setHeight);\n };\n const get$7 = (cell, type, f) => {\n const v = f(cell);\n const span = getSpan(cell, type);\n return v / span;\n };\n const getRaw$1 = (element, prop) => {\n return getRaw$2(element, prop).orThunk(() => {\n return getOpt(element, prop).map(val => val + 'px');\n });\n };\n const getRawWidth$1 = element => getRaw$1(element, 'width');\n const getRawHeight$1 = element => getRaw$1(element, 'height');\n const getPercentageWidth = cell => getPercentSize(cell, get$9, getInner);\n const getPixelWidth$1 = cell => isCol$2(cell) ? get$9(cell) : getRuntime$1(cell);\n const getHeight = cell => {\n return isRow$2(cell) ? get$8(cell) : get$7(cell, 'rowspan', getTotalHeight);\n };\n const getGenericWidth = cell => {\n const width = getRawWidth$1(cell);\n return width.bind(w => parse(w, [\n 'fixed',\n 'relative',\n 'empty'\n ]));\n };\n const setGenericWidth = (cell, amount, unit) => {\n set$1(cell, 'width', amount + unit);\n };\n const getPixelTableWidth = table => get$9(table) + 'px';\n const getPixelTableHeight = table => get$8(table) + 'px';\n const getPercentTableWidth = table => getPercentSize(table, get$9, getInner) + '%';\n const isPercentSizing$1 = table => getRawWidth$1(table).exists(size => rPercentageBasedSizeRegex.test(size));\n const isPixelSizing$1 = table => getRawWidth$1(table).exists(size => rPixelBasedSizeRegex.test(size));\n const isNoneSizing$1 = table => getRawWidth$1(table).isNone();\n const percentageBasedSizeRegex = constant(rPercentageBasedSizeRegex);\n\n const isCol$1 = isTag('col');\n const getRawW = cell => {\n return getRawWidth$1(cell).getOrThunk(() => getPixelWidth$1(cell) + 'px');\n };\n const getRawH = cell => {\n return getRawHeight$1(cell).getOrThunk(() => getHeight(cell) + 'px');\n };\n const justCols = warehouse => map$1(Warehouse.justColumns(warehouse), column => Optional.from(column.element));\n const isValidColumn = cell => {\n const browser = detect$2().browser;\n const supportsColWidths = browser.isChromium() || browser.isFirefox();\n return isCol$1(cell) ? supportsColWidths : true;\n };\n const getDimension = (cellOpt, index, backups, filter, getter, fallback) => cellOpt.filter(filter).fold(() => fallback(deduce(backups, index)), cell => getter(cell));\n const getWidthFrom = (warehouse, table, getWidth, fallback) => {\n const columnCells = columns(warehouse);\n const columns$1 = Warehouse.hasColumns(warehouse) ? justCols(warehouse) : columnCells;\n const backups = [Optional.some(width.edge(table))].concat(map$1(width.positions(columnCells, table), pos => pos.map(p => p.x)));\n const colFilter = not(hasColspan);\n return map$1(columns$1, (cellOption, c) => {\n return getDimension(cellOption, c, backups, colFilter, column => {\n if (isValidColumn(column)) {\n return getWidth(column);\n } else {\n const cell = bindFrom(columnCells[c], identity);\n return getDimension(cell, c, backups, colFilter, cell => fallback(Optional.some(get$9(cell))), fallback);\n }\n }, fallback);\n });\n };\n const getDeduced = deduced => {\n return deduced.map(d => {\n return d + 'px';\n }).getOr('');\n };\n const getRawWidths = (warehouse, table) => {\n return getWidthFrom(warehouse, table, getRawW, getDeduced);\n };\n const getPercentageWidths = (warehouse, table, tableSize) => {\n return getWidthFrom(warehouse, table, getPercentageWidth, deduced => {\n return deduced.fold(() => {\n return tableSize.minCellWidth();\n }, cellWidth => {\n return cellWidth / tableSize.pixelWidth() * 100;\n });\n });\n };\n const getPixelWidths = (warehouse, table, tableSize) => {\n return getWidthFrom(warehouse, table, getPixelWidth$1, deduced => {\n return deduced.getOrThunk(tableSize.minCellWidth);\n });\n };\n const getHeightFrom = (warehouse, table, getHeight, fallback) => {\n const rowCells = rows(warehouse);\n const rows$1 = map$1(warehouse.all, r => Optional.some(r.element));\n const backups = [Optional.some(height.edge(table))].concat(map$1(height.positions(rowCells, table), pos => pos.map(p => p.y)));\n return map$1(rows$1, (row, i) => getDimension(row, i, backups, always, getHeight, fallback));\n };\n const getPixelHeights = (warehouse, table) => {\n return getHeightFrom(warehouse, table, getHeight, deduced => {\n return deduced.getOrThunk(minHeight);\n });\n };\n const getRawHeights = (warehouse, table) => {\n return getHeightFrom(warehouse, table, getRawH, getDeduced);\n };\n\n const widthLookup = (table, getter) => () => {\n if (inBody(table)) {\n return getter(table);\n } else {\n return parseFloat(getRaw$2(table, 'width').getOr('0'));\n }\n };\n const noneSize = table => {\n const getWidth = widthLookup(table, get$9);\n const zero = constant(0);\n const getWidths = (warehouse, tableSize) => getPixelWidths(warehouse, table, tableSize);\n return {\n width: getWidth,\n pixelWidth: getWidth,\n getWidths,\n getCellDelta: zero,\n singleColumnWidth: constant([0]),\n minCellWidth: zero,\n setElementWidth: noop,\n adjustTableWidth: noop,\n isRelative: true,\n label: 'none'\n };\n };\n const percentageSize = table => {\n const getFloatWidth = widthLookup(table, elem => parseFloat(getPercentTableWidth(elem)));\n const getWidth = widthLookup(table, get$9);\n const getCellDelta = delta => delta / getWidth() * 100;\n const singleColumnWidth = (w, _delta) => [100 - w];\n const minCellWidth = () => minWidth() / getWidth() * 100;\n const adjustTableWidth = delta => {\n const currentWidth = getFloatWidth();\n const change = delta / 100 * currentWidth;\n const newWidth = currentWidth + change;\n setPercentageWidth(table, newWidth);\n };\n const getWidths = (warehouse, tableSize) => getPercentageWidths(warehouse, table, tableSize);\n return {\n width: getFloatWidth,\n pixelWidth: getWidth,\n getWidths,\n getCellDelta,\n singleColumnWidth,\n minCellWidth,\n setElementWidth: setPercentageWidth,\n adjustTableWidth,\n isRelative: true,\n label: 'percent'\n };\n };\n const pixelSize = table => {\n const getWidth = widthLookup(table, get$9);\n const getCellDelta = identity;\n const singleColumnWidth = (w, delta) => {\n const newNext = Math.max(minWidth(), w + delta);\n return [newNext - w];\n };\n const adjustTableWidth = delta => {\n const newWidth = getWidth() + delta;\n setPixelWidth(table, newWidth);\n };\n const getWidths = (warehouse, tableSize) => getPixelWidths(warehouse, table, tableSize);\n return {\n width: getWidth,\n pixelWidth: getWidth,\n getWidths,\n getCellDelta,\n singleColumnWidth,\n minCellWidth: minWidth,\n setElementWidth: setPixelWidth,\n adjustTableWidth,\n isRelative: false,\n label: 'pixel'\n };\n };\n const chooseSize = (element, width) => {\n const percentMatch = percentageBasedSizeRegex().exec(width);\n if (percentMatch !== null) {\n return percentageSize(element);\n } else {\n return pixelSize(element);\n }\n };\n const getTableSize = table => {\n const width = getRawWidth$1(table);\n return width.fold(() => noneSize(table), w => chooseSize(table, w));\n };\n const TableSize = {\n getTableSize,\n pixelSize,\n percentageSize,\n noneSize\n };\n\n const statsStruct = (minRow, minCol, maxRow, maxCol, allCells, selectedCells) => ({\n minRow,\n minCol,\n maxRow,\n maxCol,\n allCells,\n selectedCells\n });\n const findSelectedStats = (house, isSelected) => {\n const totalColumns = house.grid.columns;\n const totalRows = house.grid.rows;\n let minRow = totalRows;\n let minCol = totalColumns;\n let maxRow = 0;\n let maxCol = 0;\n const allCells = [];\n const selectedCells = [];\n each$1(house.access, detail => {\n allCells.push(detail);\n if (isSelected(detail)) {\n selectedCells.push(detail);\n const startRow = detail.row;\n const endRow = startRow + detail.rowspan - 1;\n const startCol = detail.column;\n const endCol = startCol + detail.colspan - 1;\n if (startRow < minRow) {\n minRow = startRow;\n } else if (endRow > maxRow) {\n maxRow = endRow;\n }\n if (startCol < minCol) {\n minCol = startCol;\n } else if (endCol > maxCol) {\n maxCol = endCol;\n }\n }\n });\n return statsStruct(minRow, minCol, maxRow, maxCol, allCells, selectedCells);\n };\n const makeCell = (list, seenSelected, rowIndex) => {\n const row = list[rowIndex].element;\n const td = SugarElement.fromTag('td');\n append$1(td, SugarElement.fromTag('br'));\n const f = seenSelected ? append$1 : prepend;\n f(row, td);\n };\n const fillInGaps = (list, house, stats, isSelected) => {\n const rows = filter$2(list, row => row.section !== 'colgroup');\n const totalColumns = house.grid.columns;\n const totalRows = house.grid.rows;\n for (let i = 0; i < totalRows; i++) {\n let seenSelected = false;\n for (let j = 0; j < totalColumns; j++) {\n if (!(i < stats.minRow || i > stats.maxRow || j < stats.minCol || j > stats.maxCol)) {\n const needCell = Warehouse.getAt(house, i, j).filter(isSelected).isNone();\n if (needCell) {\n makeCell(rows, seenSelected, i);\n } else {\n seenSelected = true;\n }\n }\n }\n }\n };\n const clean = (replica, stats, house, widthDelta) => {\n each$1(house.columns, col => {\n if (col.column < stats.minCol || col.column > stats.maxCol) {\n remove$6(col.element);\n }\n });\n const emptyRows = filter$2(firstLayer(replica, 'tr'), row => row.dom.childElementCount === 0);\n each$2(emptyRows, remove$6);\n if (stats.minCol === stats.maxCol || stats.minRow === stats.maxRow) {\n each$2(firstLayer(replica, 'th,td'), cell => {\n remove$7(cell, 'rowspan');\n remove$7(cell, 'colspan');\n });\n }\n remove$7(replica, LOCKED_COL_ATTR);\n remove$7(replica, 'data-snooker-col-series');\n const tableSize = TableSize.getTableSize(replica);\n tableSize.adjustTableWidth(widthDelta);\n };\n const getTableWidthDelta = (table, warehouse, tableSize, stats) => {\n if (stats.minCol === 0 && warehouse.grid.columns === stats.maxCol + 1) {\n return 0;\n }\n const colWidths = getPixelWidths(warehouse, table, tableSize);\n const allColsWidth = foldl(colWidths, (acc, width) => acc + width, 0);\n const selectedColsWidth = foldl(colWidths.slice(stats.minCol, stats.maxCol + 1), (acc, width) => acc + width, 0);\n const newWidth = selectedColsWidth / allColsWidth * tableSize.pixelWidth();\n const delta = newWidth - tableSize.pixelWidth();\n return tableSize.getCellDelta(delta);\n };\n const extract$1 = (table, selectedSelector) => {\n const isSelected = detail => is$2(detail.element, selectedSelector);\n const replica = deep(table);\n const list = fromTable$1(replica);\n const tableSize = TableSize.getTableSize(table);\n const replicaHouse = Warehouse.generate(list);\n const replicaStats = findSelectedStats(replicaHouse, isSelected);\n const selector = 'th:not(' + selectedSelector + ')' + ',td:not(' + selectedSelector + ')';\n const unselectedCells = filterFirstLayer(replica, 'th,td', cell => is$2(cell, selector));\n each$2(unselectedCells, remove$6);\n fillInGaps(list, replicaHouse, replicaStats, isSelected);\n const house = Warehouse.fromTable(table);\n const widthDelta = getTableWidthDelta(table, house, tableSize, replicaStats);\n clean(replica, replicaStats, replicaHouse, widthDelta);\n return replica;\n };\n\n const nbsp = '\\xA0';\n\n const NodeValue = (is, name) => {\n const get = element => {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n const set = (element, value) => {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom.nodeValue = value;\n };\n return {\n get,\n getOption,\n set\n };\n };\n\n const api = NodeValue(isText, 'text');\n const get$6 = element => api.get(element);\n const getOption = element => api.getOption(element);\n const set = (element, value) => api.set(element, value);\n\n const getEnd = element => name(element) === 'img' ? 1 : getOption(element).fold(() => children$2(element).length, v => v.length);\n const isTextNodeWithCursorPosition = el => getOption(el).filter(text => text.trim().length !== 0 || text.indexOf(nbsp) > -1).isSome();\n const isContentEditableFalse = elem => isHTMLElement(elem) && get$b(elem, 'contenteditable') === 'false';\n const elementsWithCursorPosition = [\n 'img',\n 'br'\n ];\n const isCursorPosition = elem => {\n const hasCursorPosition = isTextNodeWithCursorPosition(elem);\n return hasCursorPosition || contains$2(elementsWithCursorPosition, name(elem)) || isContentEditableFalse(elem);\n };\n\n const first = element => descendant$1(element, isCursorPosition);\n const last$1 = element => descendantRtl(element, isCursorPosition);\n const descendantRtl = (scope, predicate) => {\n const descend = element => {\n const children = children$2(element);\n for (let i = children.length - 1; i >= 0; i--) {\n const child = children[i];\n if (predicate(child)) {\n return Optional.some(child);\n }\n const res = descend(child);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope);\n };\n\n const transferableAttributes = {\n scope: [\n 'row',\n 'col'\n ]\n };\n const createCell = doc => () => {\n const td = SugarElement.fromTag('td', doc.dom);\n append$1(td, SugarElement.fromTag('br', doc.dom));\n return td;\n };\n const createCol = doc => () => {\n return SugarElement.fromTag('col', doc.dom);\n };\n const createColgroup = doc => () => {\n return SugarElement.fromTag('colgroup', doc.dom);\n };\n const createRow$1 = doc => () => {\n return SugarElement.fromTag('tr', doc.dom);\n };\n const replace$1 = (cell, tag, attrs) => {\n const replica = copy$2(cell, tag);\n each$1(attrs, (v, k) => {\n if (v === null) {\n remove$7(replica, k);\n } else {\n set$2(replica, k, v);\n }\n });\n return replica;\n };\n const pasteReplace = cell => {\n return cell;\n };\n const cloneFormats = (oldCell, newCell, formats) => {\n const first$1 = first(oldCell);\n return first$1.map(firstText => {\n const formatSelector = formats.join(',');\n const parents = ancestors$3(firstText, formatSelector, element => {\n return eq$1(element, oldCell);\n });\n return foldr(parents, (last, parent) => {\n const clonedFormat = shallow(parent);\n append$1(last, clonedFormat);\n return clonedFormat;\n }, newCell);\n }).getOr(newCell);\n };\n const cloneAppropriateAttributes = (original, clone) => {\n each$1(transferableAttributes, (validAttributes, attributeName) => getOpt(original, attributeName).filter(attribute => contains$2(validAttributes, attribute)).each(attribute => set$2(clone, attributeName, attribute)));\n };\n const cellOperations = (mutate, doc, formatsToClone) => {\n const cloneCss = (prev, clone) => {\n copy$1(prev.element, clone);\n remove$5(clone, 'height');\n if (prev.colspan !== 1) {\n remove$5(clone, 'width');\n }\n };\n const newCell = prev => {\n const td = SugarElement.fromTag(name(prev.element), doc.dom);\n const formats = formatsToClone.getOr([\n 'strong',\n 'em',\n 'b',\n 'i',\n 'span',\n 'font',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'p',\n 'div'\n ]);\n const lastNode = formats.length > 0 ? cloneFormats(prev.element, td, formats) : td;\n append$1(lastNode, SugarElement.fromTag('br'));\n cloneCss(prev, td);\n cloneAppropriateAttributes(prev.element, td);\n mutate(prev.element, td);\n return td;\n };\n const newCol = prev => {\n const col = SugarElement.fromTag(name(prev.element), doc.dom);\n cloneCss(prev, col);\n mutate(prev.element, col);\n return col;\n };\n return {\n col: newCol,\n colgroup: createColgroup(doc),\n row: createRow$1(doc),\n cell: newCell,\n replace: replace$1,\n colGap: createCol(doc),\n gap: createCell(doc)\n };\n };\n const paste$1 = doc => {\n return {\n col: createCol(doc),\n colgroup: createColgroup(doc),\n row: createRow$1(doc),\n cell: createCell(doc),\n replace: pasteReplace,\n colGap: createCol(doc),\n gap: createCell(doc)\n };\n };\n\n const fromHtml = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n return children$2(SugarElement.fromDom(div));\n };\n const fromDom = nodes => map$1(nodes, SugarElement.fromDom);\n\n const option = name => editor => editor.options.get(name);\n const defaultWidth = '100%';\n const getPixelForcedWidth = editor => {\n var _a;\n const dom = editor.dom;\n const parentBlock = (_a = dom.getParent(editor.selection.getStart(), dom.isBlock)) !== null && _a !== void 0 ? _a : editor.getBody();\n return getInner(SugarElement.fromDom(parentBlock)) + 'px';\n };\n const determineDefaultTableStyles = (editor, defaultStyles) => {\n if (isTableResponsiveForced(editor) || !shouldStyleWithCss(editor)) {\n return defaultStyles;\n } else if (isTablePixelsForced(editor)) {\n return {\n ...defaultStyles,\n width: getPixelForcedWidth(editor)\n };\n } else {\n return {\n ...defaultStyles,\n width: defaultWidth\n };\n }\n };\n const determineDefaultTableAttributes = (editor, defaultAttributes) => {\n if (isTableResponsiveForced(editor) || shouldStyleWithCss(editor)) {\n return defaultAttributes;\n } else if (isTablePixelsForced(editor)) {\n return {\n ...defaultAttributes,\n width: getPixelForcedWidth(editor)\n };\n } else {\n return {\n ...defaultAttributes,\n width: defaultWidth\n };\n }\n };\n const register = editor => {\n const registerOption = editor.options.register;\n registerOption('table_clone_elements', { processor: 'string[]' });\n registerOption('table_use_colgroups', {\n processor: 'boolean',\n default: true\n });\n registerOption('table_header_type', {\n processor: value => {\n const valid = contains$2([\n 'section',\n 'cells',\n 'sectionCells',\n 'auto'\n ], value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be one of: section, cells, sectionCells or auto.'\n };\n },\n default: 'section'\n });\n registerOption('table_sizing_mode', {\n processor: 'string',\n default: 'auto'\n });\n registerOption('table_default_attributes', {\n processor: 'object',\n default: { border: '1' }\n });\n registerOption('table_default_styles', {\n processor: 'object',\n default: { 'border-collapse': 'collapse' }\n });\n registerOption('table_column_resizing', {\n processor: value => {\n const valid = contains$2([\n 'preservetable',\n 'resizetable'\n ], value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be preservetable, or resizetable.'\n };\n },\n default: 'preservetable'\n });\n registerOption('table_resize_bars', {\n processor: 'boolean',\n default: true\n });\n registerOption('table_style_by_css', {\n processor: 'boolean',\n default: true\n });\n registerOption('table_merge_content_on_paste', {\n processor: 'boolean',\n default: true\n });\n };\n const getTableCloneElements = editor => {\n return Optional.from(editor.options.get('table_clone_elements'));\n };\n const hasTableObjectResizing = editor => {\n const objectResizing = editor.options.get('object_resizing');\n return contains$2(objectResizing.split(','), 'table');\n };\n const getTableHeaderType = option('table_header_type');\n const getTableColumnResizingBehaviour = option('table_column_resizing');\n const isPreserveTableColumnResizing = editor => getTableColumnResizingBehaviour(editor) === 'preservetable';\n const isResizeTableColumnResizing = editor => getTableColumnResizingBehaviour(editor) === 'resizetable';\n const getTableSizingMode = option('table_sizing_mode');\n const isTablePercentagesForced = editor => getTableSizingMode(editor) === 'relative';\n const isTablePixelsForced = editor => getTableSizingMode(editor) === 'fixed';\n const isTableResponsiveForced = editor => getTableSizingMode(editor) === 'responsive';\n const hasTableResizeBars = option('table_resize_bars');\n const shouldStyleWithCss = option('table_style_by_css');\n const shouldMergeContentOnPaste = option('table_merge_content_on_paste');\n const getTableDefaultAttributes = editor => {\n const options = editor.options;\n const defaultAttributes = options.get('table_default_attributes');\n return options.isSet('table_default_attributes') ? defaultAttributes : determineDefaultTableAttributes(editor, defaultAttributes);\n };\n const getTableDefaultStyles = editor => {\n const options = editor.options;\n const defaultStyles = options.get('table_default_styles');\n return options.isSet('table_default_styles') ? defaultStyles : determineDefaultTableStyles(editor, defaultStyles);\n };\n const tableUseColumnGroup = option('table_use_colgroups');\n const fixedContainerSelector = option('fixed_toolbar_container');\n const fixedToolbarContainerTarget = option('fixed_toolbar_container_target');\n const fixedContainerTarget = editor => {\n var _a;\n if (!editor.inline) {\n return Optional.none();\n }\n const selector = (_a = fixedContainerSelector(editor)) !== null && _a !== void 0 ? _a : '';\n if (selector.length > 0) {\n return descendant(body$1(), selector);\n }\n const element = fixedToolbarContainerTarget(editor);\n if (isNonNullable(element)) {\n return Optional.some(SugarElement.fromDom(element));\n }\n return Optional.none();\n };\n const useFixedContainer = editor => editor.inline && fixedContainerTarget(editor).isSome();\n const getUiMode = option('ui_mode');\n const isSplitUiMode = editor => !useFixedContainer(editor) && getUiMode(editor) === 'split';\n\n const closest = target => closest$1(target, '[contenteditable]');\n const isEditable$1 = (element, assumeEditable = false) => {\n if (inBody(element)) {\n return element.dom.isContentEditable;\n } else {\n return closest(element).fold(constant(assumeEditable), editable => getRaw(editable) === 'true');\n }\n };\n const getRaw = element => element.dom.contentEditable;\n\n const getBody = editor => SugarElement.fromDom(editor.getBody());\n const getIsRoot = editor => element => eq$1(element, getBody(editor));\n const removeDataStyle = table => {\n remove$7(table, 'data-mce-style');\n const removeStyleAttribute = element => remove$7(element, 'data-mce-style');\n each$2(cells$1(table), removeStyleAttribute);\n each$2(columns$1(table), removeStyleAttribute);\n each$2(rows$1(table), removeStyleAttribute);\n };\n const getSelectionStart = editor => SugarElement.fromDom(editor.selection.getStart());\n const getPixelWidth = elm => elm.getBoundingClientRect().width;\n const getPixelHeight = elm => elm.getBoundingClientRect().height;\n const getRawValue = prop => (editor, elm) => {\n const raw = editor.dom.getStyle(elm, prop) || editor.dom.getAttrib(elm, prop);\n return Optional.from(raw).filter(isNotEmpty);\n };\n const getRawWidth = getRawValue('width');\n const getRawHeight = getRawValue('height');\n const isPercentage$1 = value => /^(\\d+(\\.\\d+)?)%$/.test(value);\n const isPixel = value => /^(\\d+(\\.\\d+)?)px$/.test(value);\n const isInEditableContext$1 = cell => closest$2(cell, isTag('table')).exists(isEditable$1);\n\n const inSelection = (bounds, detail) => {\n const leftEdge = detail.column;\n const rightEdge = detail.column + detail.colspan - 1;\n const topEdge = detail.row;\n const bottomEdge = detail.row + detail.rowspan - 1;\n return leftEdge <= bounds.finishCol && rightEdge >= bounds.startCol && (topEdge <= bounds.finishRow && bottomEdge >= bounds.startRow);\n };\n const isWithin = (bounds, detail) => {\n return detail.column >= bounds.startCol && detail.column + detail.colspan - 1 <= bounds.finishCol && detail.row >= bounds.startRow && detail.row + detail.rowspan - 1 <= bounds.finishRow;\n };\n const isRectangular = (warehouse, bounds) => {\n let isRect = true;\n const detailIsWithin = curry(isWithin, bounds);\n for (let i = bounds.startRow; i <= bounds.finishRow; i++) {\n for (let j = bounds.startCol; j <= bounds.finishCol; j++) {\n isRect = isRect && Warehouse.getAt(warehouse, i, j).exists(detailIsWithin);\n }\n }\n return isRect ? Optional.some(bounds) : Optional.none();\n };\n\n const getBounds = (detailA, detailB) => {\n return bounds(Math.min(detailA.row, detailB.row), Math.min(detailA.column, detailB.column), Math.max(detailA.row + detailA.rowspan - 1, detailB.row + detailB.rowspan - 1), Math.max(detailA.column + detailA.colspan - 1, detailB.column + detailB.colspan - 1));\n };\n const getAnyBox = (warehouse, startCell, finishCell) => {\n const startCoords = Warehouse.findItem(warehouse, startCell, eq$1);\n const finishCoords = Warehouse.findItem(warehouse, finishCell, eq$1);\n return startCoords.bind(sc => {\n return finishCoords.map(fc => {\n return getBounds(sc, fc);\n });\n });\n };\n const getBox$1 = (warehouse, startCell, finishCell) => {\n return getAnyBox(warehouse, startCell, finishCell).bind(bounds => {\n return isRectangular(warehouse, bounds);\n });\n };\n\n const moveBy$1 = (warehouse, cell, row, column) => {\n return Warehouse.findItem(warehouse, cell, eq$1).bind(detail => {\n const startRow = row > 0 ? detail.row + detail.rowspan - 1 : detail.row;\n const startCol = column > 0 ? detail.column + detail.colspan - 1 : detail.column;\n const dest = Warehouse.getAt(warehouse, startRow + row, startCol + column);\n return dest.map(d => {\n return d.element;\n });\n });\n };\n const intercepts$1 = (warehouse, start, finish) => {\n return getAnyBox(warehouse, start, finish).map(bounds => {\n const inside = Warehouse.filterItems(warehouse, curry(inSelection, bounds));\n return map$1(inside, detail => {\n return detail.element;\n });\n });\n };\n const parentCell = (warehouse, innerCell) => {\n const isContainedBy = (c1, c2) => {\n return contains$1(c2, c1);\n };\n return Warehouse.findItem(warehouse, innerCell, isContainedBy).map(detail => {\n return detail.element;\n });\n };\n\n const moveBy = (cell, deltaRow, deltaColumn) => {\n return table(cell).bind(table => {\n const warehouse = getWarehouse(table);\n return moveBy$1(warehouse, cell, deltaRow, deltaColumn);\n });\n };\n const intercepts = (table, first, last) => {\n const warehouse = getWarehouse(table);\n return intercepts$1(warehouse, first, last);\n };\n const nestedIntercepts = (table, first, firstTable, last, lastTable) => {\n const warehouse = getWarehouse(table);\n const optStartCell = eq$1(table, firstTable) ? Optional.some(first) : parentCell(warehouse, first);\n const optLastCell = eq$1(table, lastTable) ? Optional.some(last) : parentCell(warehouse, last);\n return optStartCell.bind(startCell => optLastCell.bind(lastCell => intercepts$1(warehouse, startCell, lastCell)));\n };\n const getBox = (table, first, last) => {\n const warehouse = getWarehouse(table);\n return getBox$1(warehouse, first, last);\n };\n const getWarehouse = Warehouse.fromTable;\n\n var TagBoundaries = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'li',\n 'table',\n 'thead',\n 'tbody',\n 'tfoot',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n\n var DomUniverse = () => {\n const clone = element => {\n return SugarElement.fromDom(element.dom.cloneNode(false));\n };\n const document = element => documentOrOwner(element).dom;\n const isBoundary = element => {\n if (!isElement(element)) {\n return false;\n }\n if (name(element) === 'body') {\n return true;\n }\n return contains$2(TagBoundaries, name(element));\n };\n const isEmptyTag = element => {\n if (!isElement(element)) {\n return false;\n }\n return contains$2([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], name(element));\n };\n const isNonEditable = element => isElement(element) && get$b(element, 'contenteditable') === 'false';\n const comparePosition = (element, other) => {\n return element.dom.compareDocumentPosition(other.dom);\n };\n const copyAttributesTo = (source, destination) => {\n const as = clone$2(source);\n setAll$1(destination, as);\n };\n const isSpecial = element => {\n const tag = name(element);\n return contains$2([\n 'script',\n 'noscript',\n 'iframe',\n 'noframes',\n 'noembed',\n 'title',\n 'style',\n 'textarea',\n 'xmp'\n ], tag);\n };\n const getLanguage = element => isElement(element) ? getOpt(element, 'lang') : Optional.none();\n return {\n up: constant({\n selector: ancestor$1,\n closest: closest$1,\n predicate: ancestor$2,\n all: parents\n }),\n down: constant({\n selector: descendants,\n predicate: descendants$1\n }),\n styles: constant({\n get: get$a,\n getRaw: getRaw$2,\n set: set$1,\n remove: remove$5\n }),\n attrs: constant({\n get: get$b,\n set: set$2,\n remove: remove$7,\n copyTo: copyAttributesTo\n }),\n insert: constant({\n before: before$3,\n after: after$5,\n afterAll: after$4,\n append: append$1,\n appendAll: append,\n prepend: prepend,\n wrap: wrap\n }),\n remove: constant({\n unwrap: unwrap,\n remove: remove$6\n }),\n create: constant({\n nu: SugarElement.fromTag,\n clone,\n text: SugarElement.fromText\n }),\n query: constant({\n comparePosition,\n prevSibling: prevSibling,\n nextSibling: nextSibling\n }),\n property: constant({\n children: children$2,\n name: name,\n parent: parent,\n document,\n isText: isText,\n isComment: isComment,\n isElement: isElement,\n isSpecial,\n getLanguage,\n getText: get$6,\n setText: set,\n isBoundary,\n isEmptyTag,\n isNonEditable\n }),\n eq: eq$1,\n is: is$1\n };\n };\n\n const all = (universe, look, elements, f) => {\n const head = elements[0];\n const tail = elements.slice(1);\n return f(universe, look, head, tail);\n };\n const oneAll = (universe, look, elements) => {\n return elements.length > 0 ? all(universe, look, elements, unsafeOne) : Optional.none();\n };\n const unsafeOne = (universe, look, head, tail) => {\n const start = look(universe, head);\n return foldr(tail, (b, a) => {\n const current = look(universe, a);\n return commonElement(universe, b, current);\n }, start);\n };\n const commonElement = (universe, start, end) => {\n return start.bind(s => {\n return end.filter(curry(universe.eq, s));\n });\n };\n\n const eq = (universe, item) => {\n return curry(universe.eq, item);\n };\n const ancestors$2 = (universe, start, end, isRoot = never) => {\n const ps1 = [start].concat(universe.up().all(start));\n const ps2 = [end].concat(universe.up().all(end));\n const prune = path => {\n const index = findIndex(path, isRoot);\n return index.fold(() => {\n return path;\n }, ind => {\n return path.slice(0, ind + 1);\n });\n };\n const pruned1 = prune(ps1);\n const pruned2 = prune(ps2);\n const shared = find$1(pruned1, x => {\n return exists(pruned2, eq(universe, x));\n });\n return {\n firstpath: pruned1,\n secondpath: pruned2,\n shared\n };\n };\n\n const sharedOne$1 = oneAll;\n const ancestors$1 = ancestors$2;\n\n const universe$3 = DomUniverse();\n const sharedOne = (look, elements) => {\n return sharedOne$1(universe$3, (_universe, element) => {\n return look(element);\n }, elements);\n };\n const ancestors = (start, finish, isRoot) => {\n return ancestors$1(universe$3, start, finish, isRoot);\n };\n\n const lookupTable = container => {\n return ancestor$1(container, 'table');\n };\n const identify = (start, finish, isRoot) => {\n const getIsRoot = rootTable => {\n return element => {\n return isRoot !== undefined && isRoot(element) || eq$1(element, rootTable);\n };\n };\n if (eq$1(start, finish)) {\n return Optional.some({\n boxes: Optional.some([start]),\n start,\n finish\n });\n } else {\n return lookupTable(start).bind(startTable => {\n return lookupTable(finish).bind(finishTable => {\n if (eq$1(startTable, finishTable)) {\n return Optional.some({\n boxes: intercepts(startTable, start, finish),\n start,\n finish\n });\n } else if (contains$1(startTable, finishTable)) {\n const ancestorCells = ancestors$3(finish, 'td,th', getIsRoot(startTable));\n const finishCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : finish;\n return Optional.some({\n boxes: nestedIntercepts(startTable, start, startTable, finish, finishTable),\n start,\n finish: finishCell\n });\n } else if (contains$1(finishTable, startTable)) {\n const ancestorCells = ancestors$3(start, 'td,th', getIsRoot(finishTable));\n const startCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : start;\n return Optional.some({\n boxes: nestedIntercepts(finishTable, start, startTable, finish, finishTable),\n start,\n finish: startCell\n });\n } else {\n return ancestors(start, finish).shared.bind(lca => {\n return closest$1(lca, 'table', isRoot).bind(lcaTable => {\n const finishAncestorCells = ancestors$3(finish, 'td,th', getIsRoot(lcaTable));\n const finishCell = finishAncestorCells.length > 0 ? finishAncestorCells[finishAncestorCells.length - 1] : finish;\n const startAncestorCells = ancestors$3(start, 'td,th', getIsRoot(lcaTable));\n const startCell = startAncestorCells.length > 0 ? startAncestorCells[startAncestorCells.length - 1] : start;\n return Optional.some({\n boxes: nestedIntercepts(lcaTable, start, startTable, finish, finishTable),\n start: startCell,\n finish: finishCell\n });\n });\n });\n }\n });\n });\n }\n };\n const retrieve$1 = (container, selector) => {\n const sels = descendants(container, selector);\n return sels.length > 0 ? Optional.some(sels) : Optional.none();\n };\n const getLast = (boxes, lastSelectedSelector) => {\n return find$1(boxes, box => {\n return is$2(box, lastSelectedSelector);\n });\n };\n const getEdges = (container, firstSelectedSelector, lastSelectedSelector) => {\n return descendant(container, firstSelectedSelector).bind(first => {\n return descendant(container, lastSelectedSelector).bind(last => {\n return sharedOne(lookupTable, [\n first,\n last\n ]).map(table => {\n return {\n first,\n last,\n table\n };\n });\n });\n });\n };\n const expandTo = (finish, firstSelectedSelector) => {\n return ancestor$1(finish, 'table').bind(table => {\n return descendant(table, firstSelectedSelector).bind(start => {\n return identify(start, finish).bind(identified => {\n return identified.boxes.map(boxes => {\n return {\n boxes,\n start: identified.start,\n finish: identified.finish\n };\n });\n });\n });\n });\n };\n const shiftSelection = (boxes, deltaRow, deltaColumn, firstSelectedSelector, lastSelectedSelector) => {\n return getLast(boxes, lastSelectedSelector).bind(last => {\n return moveBy(last, deltaRow, deltaColumn).bind(finish => {\n return expandTo(finish, firstSelectedSelector);\n });\n });\n };\n\n const retrieve = (container, selector) => {\n return retrieve$1(container, selector);\n };\n const retrieveBox = (container, firstSelectedSelector, lastSelectedSelector) => {\n return getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(edges => {\n const isRoot = ancestor => {\n return eq$1(container, ancestor);\n };\n const sectionSelector = 'thead,tfoot,tbody,table';\n const firstAncestor = ancestor$1(edges.first, sectionSelector, isRoot);\n const lastAncestor = ancestor$1(edges.last, sectionSelector, isRoot);\n return firstAncestor.bind(fA => {\n return lastAncestor.bind(lA => {\n return eq$1(fA, lA) ? getBox(edges.table, edges.first, edges.last) : Optional.none();\n });\n });\n });\n };\n\n const selection = identity;\n const unmergable = selectedCells => {\n const hasSpan = (elem, type) => getOpt(elem, type).exists(span => parseInt(span, 10) > 1);\n const hasRowOrColSpan = elem => hasSpan(elem, 'rowspan') || hasSpan(elem, 'colspan');\n return selectedCells.length > 0 && forall(selectedCells, hasRowOrColSpan) ? Optional.some(selectedCells) : Optional.none();\n };\n const mergable = (table, selectedCells, ephemera) => {\n if (selectedCells.length <= 1) {\n return Optional.none();\n } else {\n return retrieveBox(table, ephemera.firstSelectedSelector, ephemera.lastSelectedSelector).map(bounds => ({\n bounds,\n cells: selectedCells\n }));\n }\n };\n\n const strSelected = 'data-mce-selected';\n const strSelectedSelector = 'td[' + strSelected + '],th[' + strSelected + ']';\n const strAttributeSelector = '[' + strSelected + ']';\n const strFirstSelected = 'data-mce-first-selected';\n const strFirstSelectedSelector = 'td[' + strFirstSelected + '],th[' + strFirstSelected + ']';\n const strLastSelected = 'data-mce-last-selected';\n const strLastSelectedSelector = 'td[' + strLastSelected + '],th[' + strLastSelected + ']';\n const attributeSelector = strAttributeSelector;\n const ephemera = {\n selected: strSelected,\n selectedSelector: strSelectedSelector,\n firstSelected: strFirstSelected,\n firstSelectedSelector: strFirstSelectedSelector,\n lastSelected: strLastSelected,\n lastSelectedSelector: strLastSelectedSelector\n };\n\n const forMenu = (selectedCells, table, cell) => ({\n element: cell,\n mergable: mergable(table, selectedCells, ephemera),\n unmergable: unmergable(selectedCells),\n selection: selection(selectedCells)\n });\n const paste = (element, clipboard, generators) => ({\n element,\n clipboard,\n generators\n });\n const pasteRows = (selectedCells, _cell, clipboard, generators) => ({\n selection: selection(selectedCells),\n clipboard,\n generators\n });\n\n const getSelectionCellFallback = element => table(element).bind(table => retrieve(table, ephemera.firstSelectedSelector)).fold(constant(element), cells => cells[0]);\n const getSelectionFromSelector = selector => (initCell, isRoot) => {\n const cellName = name(initCell);\n const cell = cellName === 'col' || cellName === 'colgroup' ? getSelectionCellFallback(initCell) : initCell;\n return closest$1(cell, selector, isRoot);\n };\n const getSelectionCellOrCaption = getSelectionFromSelector('th,td,caption');\n const getSelectionCell = getSelectionFromSelector('th,td');\n const getCellsFromSelection = editor => fromDom(editor.model.table.getSelectedCells());\n const getCellsFromFakeSelection = editor => filter$2(getCellsFromSelection(editor), cell => is$2(cell, ephemera.selectedSelector));\n\n const extractSelected = cells => {\n return table(cells[0]).map(table => {\n const replica = extract$1(table, attributeSelector);\n removeDataStyle(replica);\n return [replica];\n });\n };\n const serializeElements = (editor, elements) => map$1(elements, elm => editor.selection.serializer.serialize(elm.dom, {})).join('');\n const getTextContent = (editor, replicaElements) => {\n const doc = editor.getDoc();\n const dos = getRootNode(SugarElement.fromDom(editor.getBody()));\n const offscreenDiv = SugarElement.fromTag('div', doc);\n set$2(offscreenDiv, 'data-mce-bogus', 'all');\n setAll(offscreenDiv, {\n position: 'fixed',\n left: '-9999999px',\n top: '0',\n overflow: 'hidden',\n opacity: '0'\n });\n const root = getContentContainer(dos);\n append(offscreenDiv, replicaElements);\n append$1(root, offscreenDiv);\n const textContent = offscreenDiv.dom.innerText;\n remove$6(offscreenDiv);\n return textContent;\n };\n const registerEvents = (editor, actions) => {\n editor.on('BeforeGetContent', e => {\n const multiCellContext = cells => {\n e.preventDefault();\n extractSelected(cells).each(replicaElements => {\n const content = e.format === 'text' ? getTextContent(editor, replicaElements) : serializeElements(editor, replicaElements);\n e.content = content;\n });\n };\n if (e.selection === true) {\n const cells = getCellsFromFakeSelection(editor);\n if (cells.length >= 1) {\n multiCellContext(cells);\n }\n }\n });\n editor.on('BeforeSetContent', e => {\n if (e.selection === true && e.paste === true) {\n const selectedCells = getCellsFromSelection(editor);\n head(selectedCells).each(cell => {\n table(cell).each(table => {\n const elements = filter$2(fromHtml(e.content), content => {\n return name(content) !== 'meta';\n });\n const isTable = isTag('table');\n if (shouldMergeContentOnPaste(editor) && elements.length === 1 && isTable(elements[0])) {\n e.preventDefault();\n const doc = SugarElement.fromDom(editor.getDoc());\n const generators = paste$1(doc);\n const targets = paste(cell, elements[0], generators);\n actions.pasteCells(table, targets).each(() => {\n editor.focus();\n });\n }\n });\n });\n }\n });\n };\n\n const point = (element, offset) => ({\n element,\n offset\n });\n\n const scan$1 = (universe, element, direction) => {\n if (universe.property().isText(element) && universe.property().getText(element).trim().length === 0 || universe.property().isComment(element)) {\n return direction(element).bind(elem => {\n return scan$1(universe, elem, direction).orThunk(() => {\n return Optional.some(elem);\n });\n });\n } else {\n return Optional.none();\n }\n };\n const toEnd = (universe, element) => {\n if (universe.property().isText(element)) {\n return universe.property().getText(element).length;\n }\n const children = universe.property().children(element);\n return children.length;\n };\n const freefallRtl$2 = (universe, element) => {\n const candidate = scan$1(universe, element, universe.query().prevSibling).getOr(element);\n if (universe.property().isText(candidate)) {\n return point(candidate, toEnd(universe, candidate));\n }\n const children = universe.property().children(candidate);\n return children.length > 0 ? freefallRtl$2(universe, children[children.length - 1]) : point(candidate, toEnd(universe, candidate));\n };\n\n const freefallRtl$1 = freefallRtl$2;\n\n const universe$2 = DomUniverse();\n const freefallRtl = element => {\n return freefallRtl$1(universe$2, element);\n };\n\n const halve = (main, other) => {\n if (!hasColspan(main)) {\n const width = getGenericWidth(main);\n width.each(w => {\n const newWidth = w.value / 2;\n setGenericWidth(main, newWidth, w.unit);\n setGenericWidth(other, newWidth, w.unit);\n });\n }\n };\n\n const zero = array => map$1(array, constant(0));\n const surround = (sizes, startIndex, endIndex, results, f) => f(sizes.slice(0, startIndex)).concat(results).concat(f(sizes.slice(endIndex)));\n const clampDeltaHelper = predicate => (sizes, index, delta, minCellSize) => {\n if (!predicate(delta)) {\n return delta;\n } else {\n const newSize = Math.max(minCellSize, sizes[index] - Math.abs(delta));\n const diff = Math.abs(newSize - sizes[index]);\n return delta >= 0 ? diff : -diff;\n }\n };\n const clampNegativeDelta = clampDeltaHelper(delta => delta < 0);\n const clampDelta = clampDeltaHelper(always);\n const resizeTable = () => {\n const calcFixedDeltas = (sizes, index, next, delta, minCellSize) => {\n const clampedDelta = clampNegativeDelta(sizes, index, delta, minCellSize);\n return surround(sizes, index, next + 1, [\n clampedDelta,\n 0\n ], zero);\n };\n const calcRelativeDeltas = (sizes, index, delta, minCellSize) => {\n const ratio = (100 + delta) / 100;\n const newThis = Math.max(minCellSize, (sizes[index] + delta) / ratio);\n return map$1(sizes, (size, idx) => {\n const newSize = idx === index ? newThis : size / ratio;\n return newSize - size;\n });\n };\n const calcLeftEdgeDeltas = (sizes, index, next, delta, minCellSize, isRelative) => {\n if (isRelative) {\n return calcRelativeDeltas(sizes, index, delta, minCellSize);\n } else {\n return calcFixedDeltas(sizes, index, next, delta, minCellSize);\n }\n };\n const calcMiddleDeltas = (sizes, _prev, index, next, delta, minCellSize, isRelative) => calcLeftEdgeDeltas(sizes, index, next, delta, minCellSize, isRelative);\n const resizeTable = (resizer, delta) => resizer(delta);\n const calcRightEdgeDeltas = (sizes, _prev, index, delta, minCellSize, isRelative) => {\n if (isRelative) {\n return calcRelativeDeltas(sizes, index, delta, minCellSize);\n } else {\n const clampedDelta = clampNegativeDelta(sizes, index, delta, minCellSize);\n return zero(sizes.slice(0, index)).concat([clampedDelta]);\n }\n };\n const calcRedestributedWidths = (sizes, totalWidth, pixelDelta, isRelative) => {\n if (isRelative) {\n const tableWidth = totalWidth + pixelDelta;\n const ratio = tableWidth / totalWidth;\n const newSizes = map$1(sizes, size => size / ratio);\n return {\n delta: ratio * 100 - 100,\n newSizes\n };\n } else {\n return {\n delta: pixelDelta,\n newSizes: sizes\n };\n }\n };\n return {\n resizeTable,\n clampTableDelta: clampNegativeDelta,\n calcLeftEdgeDeltas,\n calcMiddleDeltas,\n calcRightEdgeDeltas,\n calcRedestributedWidths\n };\n };\n const preserveTable = () => {\n const calcLeftEdgeDeltas = (sizes, index, next, delta, minCellSize) => {\n const idx = delta >= 0 ? next : index;\n const clampedDelta = clampDelta(sizes, idx, delta, minCellSize);\n return surround(sizes, index, next + 1, [\n clampedDelta,\n -clampedDelta\n ], zero);\n };\n const calcMiddleDeltas = (sizes, _prev, index, next, delta, minCellSize) => calcLeftEdgeDeltas(sizes, index, next, delta, minCellSize);\n const resizeTable = (resizer, delta, isLastColumn) => {\n if (isLastColumn) {\n resizer(delta);\n }\n };\n const calcRightEdgeDeltas = (sizes, _prev, _index, delta, _minCellSize, isRelative) => {\n if (isRelative) {\n return zero(sizes);\n } else {\n const diff = delta / sizes.length;\n return map$1(sizes, constant(diff));\n }\n };\n const clampTableDelta = (sizes, index, delta, minCellSize, isLastColumn) => {\n if (isLastColumn) {\n if (delta >= 0) {\n return delta;\n } else {\n const maxDelta = foldl(sizes, (a, b) => a + b - minCellSize, 0);\n return Math.max(-maxDelta, delta);\n }\n } else {\n return clampNegativeDelta(sizes, index, delta, minCellSize);\n }\n };\n const calcRedestributedWidths = (sizes, _totalWidth, _pixelDelta, _isRelative) => ({\n delta: 0,\n newSizes: sizes\n });\n return {\n resizeTable,\n clampTableDelta,\n calcLeftEdgeDeltas,\n calcMiddleDeltas,\n calcRightEdgeDeltas,\n calcRedestributedWidths\n };\n };\n\n const getGridSize = table => {\n const warehouse = Warehouse.fromTable(table);\n return warehouse.grid;\n };\n\n const isHeaderCell = isTag('th');\n const isHeaderCells = cells => forall(cells, cell => isHeaderCell(cell.element));\n const getRowHeaderType = (isHeaderRow, isHeaderCells) => {\n if (isHeaderRow && isHeaderCells) {\n return 'sectionCells';\n } else if (isHeaderRow) {\n return 'section';\n } else {\n return 'cells';\n }\n };\n const getRowType = row => {\n const isHeaderRow = row.section === 'thead';\n const isHeaderCells = is(findCommonCellType(row.cells), 'th');\n if (row.section === 'tfoot') {\n return { type: 'footer' };\n } else if (isHeaderRow || isHeaderCells) {\n return {\n type: 'header',\n subType: getRowHeaderType(isHeaderRow, isHeaderCells)\n };\n } else {\n return { type: 'body' };\n }\n };\n const findCommonCellType = cells => {\n const headerCells = filter$2(cells, cell => isHeaderCell(cell.element));\n if (headerCells.length === 0) {\n return Optional.some('td');\n } else if (headerCells.length === cells.length) {\n return Optional.some('th');\n } else {\n return Optional.none();\n }\n };\n const findCommonRowType = rows => {\n const rowTypes = map$1(rows, row => getRowType(row).type);\n const hasHeader = contains$2(rowTypes, 'header');\n const hasFooter = contains$2(rowTypes, 'footer');\n if (!hasHeader && !hasFooter) {\n return Optional.some('body');\n } else {\n const hasBody = contains$2(rowTypes, 'body');\n if (hasHeader && !hasBody && !hasFooter) {\n return Optional.some('header');\n } else if (!hasHeader && !hasBody && hasFooter) {\n return Optional.some('footer');\n } else {\n return Optional.none();\n }\n }\n };\n const findTableRowHeaderType = warehouse => findMap(warehouse.all, row => {\n const rowType = getRowType(row);\n return rowType.type === 'header' ? Optional.from(rowType.subType) : Optional.none();\n });\n\n const transformCell = (cell, comparator, substitution) => elementnew(substitution(cell.element, comparator), true, cell.isLocked);\n const transformRow = (row, section) => row.section !== section ? rowcells(row.element, row.cells, section, row.isNew) : row;\n const section = () => ({\n transformRow,\n transformCell: (cell, comparator, substitution) => {\n const newCell = substitution(cell.element, comparator);\n const fixedCell = name(newCell) !== 'td' ? mutate$1(newCell, 'td') : newCell;\n return elementnew(fixedCell, cell.isNew, cell.isLocked);\n }\n });\n const sectionCells = () => ({\n transformRow,\n transformCell\n });\n const cells = () => ({\n transformRow: (row, section) => {\n const newSection = section === 'thead' ? 'tbody' : section;\n return transformRow(row, newSection);\n },\n transformCell\n });\n const fallback = () => ({\n transformRow: identity,\n transformCell\n });\n const getTableSectionType = (table, fallback) => {\n const warehouse = Warehouse.fromTable(table);\n const type = findTableRowHeaderType(warehouse).getOr(fallback);\n switch (type) {\n case 'section':\n return section();\n case 'sectionCells':\n return sectionCells();\n case 'cells':\n return cells();\n }\n };\n const TableSection = {\n getTableSectionType,\n section,\n sectionCells,\n cells,\n fallback\n };\n\n const setIfNot = (element, property, value, ignore) => {\n if (value === ignore) {\n remove$7(element, property);\n } else {\n set$2(element, property, value);\n }\n };\n const insert$1 = (table, selector, element) => {\n last$2(children(table, selector)).fold(() => prepend(table, element), child => after$5(child, element));\n };\n const generateSection = (table, sectionName) => {\n const section = child(table, sectionName).getOrThunk(() => {\n const newSection = SugarElement.fromTag(sectionName, owner(table).dom);\n if (sectionName === 'thead') {\n insert$1(table, 'caption,colgroup', newSection);\n } else if (sectionName === 'colgroup') {\n insert$1(table, 'caption', newSection);\n } else {\n append$1(table, newSection);\n }\n return newSection;\n });\n empty(section);\n return section;\n };\n const render$1 = (table, grid) => {\n const newRows = [];\n const newCells = [];\n const syncRows = gridSection => map$1(gridSection, row => {\n if (row.isNew) {\n newRows.push(row.element);\n }\n const tr = row.element;\n empty(tr);\n each$2(row.cells, cell => {\n if (cell.isNew) {\n newCells.push(cell.element);\n }\n setIfNot(cell.element, 'colspan', cell.colspan, 1);\n setIfNot(cell.element, 'rowspan', cell.rowspan, 1);\n append$1(tr, cell.element);\n });\n return tr;\n });\n const syncColGroup = gridSection => bind$2(gridSection, colGroup => map$1(colGroup.cells, col => {\n setIfNot(col.element, 'span', col.colspan, 1);\n return col.element;\n }));\n const renderSection = (gridSection, sectionName) => {\n const section = generateSection(table, sectionName);\n const sync = sectionName === 'colgroup' ? syncColGroup : syncRows;\n const sectionElems = sync(gridSection);\n append(section, sectionElems);\n };\n const removeSection = sectionName => {\n child(table, sectionName).each(remove$6);\n };\n const renderOrRemoveSection = (gridSection, sectionName) => {\n if (gridSection.length > 0) {\n renderSection(gridSection, sectionName);\n } else {\n removeSection(sectionName);\n }\n };\n const headSection = [];\n const bodySection = [];\n const footSection = [];\n const columnGroupsSection = [];\n each$2(grid, row => {\n switch (row.section) {\n case 'thead':\n headSection.push(row);\n break;\n case 'tbody':\n bodySection.push(row);\n break;\n case 'tfoot':\n footSection.push(row);\n break;\n case 'colgroup':\n columnGroupsSection.push(row);\n break;\n }\n });\n renderOrRemoveSection(columnGroupsSection, 'colgroup');\n renderOrRemoveSection(headSection, 'thead');\n renderOrRemoveSection(bodySection, 'tbody');\n renderOrRemoveSection(footSection, 'tfoot');\n return {\n newRows,\n newCells\n };\n };\n const copy = grid => map$1(grid, row => {\n const tr = shallow(row.element);\n each$2(row.cells, cell => {\n const clonedCell = deep(cell.element);\n setIfNot(clonedCell, 'colspan', cell.colspan, 1);\n setIfNot(clonedCell, 'rowspan', cell.rowspan, 1);\n append$1(tr, clonedCell);\n });\n return tr;\n });\n\n const getColumn = (grid, index) => {\n return map$1(grid, row => {\n return getCell(row, index);\n });\n };\n const getRow = (grid, index) => {\n return grid[index];\n };\n const findDiff = (xs, comp) => {\n if (xs.length === 0) {\n return 0;\n }\n const first = xs[0];\n const index = findIndex(xs, x => {\n return !comp(first.element, x.element);\n });\n return index.getOr(xs.length);\n };\n const subgrid = (grid, row, column, comparator) => {\n const gridRow = getRow(grid, row);\n const isColRow = gridRow.section === 'colgroup';\n const colspan = findDiff(gridRow.cells.slice(column), comparator);\n const rowspan = isColRow ? 1 : findDiff(getColumn(grid.slice(row), column), comparator);\n return {\n colspan,\n rowspan\n };\n };\n\n const toDetails = (grid, comparator) => {\n const seen = map$1(grid, row => map$1(row.cells, never));\n const updateSeen = (rowIndex, columnIndex, rowspan, colspan) => {\n for (let row = rowIndex; row < rowIndex + rowspan; row++) {\n for (let column = columnIndex; column < columnIndex + colspan; column++) {\n seen[row][column] = true;\n }\n }\n };\n return map$1(grid, (row, rowIndex) => {\n const details = bind$2(row.cells, (cell, columnIndex) => {\n if (seen[rowIndex][columnIndex] === false) {\n const result = subgrid(grid, rowIndex, columnIndex, comparator);\n updateSeen(rowIndex, columnIndex, result.rowspan, result.colspan);\n return [detailnew(cell.element, result.rowspan, result.colspan, cell.isNew)];\n } else {\n return [];\n }\n });\n return rowdetailnew(row.element, details, row.section, row.isNew);\n });\n };\n const toGrid = (warehouse, generators, isNew) => {\n const grid = [];\n each$2(warehouse.colgroups, colgroup => {\n const colgroupCols = [];\n for (let columnIndex = 0; columnIndex < warehouse.grid.columns; columnIndex++) {\n const element = Warehouse.getColumnAt(warehouse, columnIndex).map(column => elementnew(column.element, isNew, false)).getOrThunk(() => elementnew(generators.colGap(), true, false));\n colgroupCols.push(element);\n }\n grid.push(rowcells(colgroup.element, colgroupCols, 'colgroup', isNew));\n });\n for (let rowIndex = 0; rowIndex < warehouse.grid.rows; rowIndex++) {\n const rowCells = [];\n for (let columnIndex = 0; columnIndex < warehouse.grid.columns; columnIndex++) {\n const element = Warehouse.getAt(warehouse, rowIndex, columnIndex).map(item => elementnew(item.element, isNew, item.isLocked)).getOrThunk(() => elementnew(generators.gap(), true, false));\n rowCells.push(element);\n }\n const rowDetail = warehouse.all[rowIndex];\n const row = rowcells(rowDetail.element, rowCells, rowDetail.section, isNew);\n grid.push(row);\n }\n return grid;\n };\n\n const fromWarehouse = (warehouse, generators) => toGrid(warehouse, generators, false);\n const toDetailList = grid => toDetails(grid, eq$1);\n const findInWarehouse = (warehouse, element) => findMap(warehouse.all, r => find$1(r.cells, e => eq$1(element, e.element)));\n const extractCells = (warehouse, target, predicate) => {\n const details = map$1(target.selection, cell$1 => {\n return cell(cell$1).bind(lc => findInWarehouse(warehouse, lc)).filter(predicate);\n });\n const cells = cat(details);\n return someIf(cells.length > 0, cells);\n };\n const run = (operation, extract, adjustment, postAction, genWrappers) => (table, target, generators, behaviours) => {\n const warehouse = Warehouse.fromTable(table);\n const tableSection = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.section).getOrThunk(TableSection.fallback);\n const output = extract(warehouse, target).map(info => {\n const model = fromWarehouse(warehouse, generators);\n const result = operation(model, info, eq$1, genWrappers(generators), tableSection);\n const lockedColumns = getLockedColumnsFromGrid(result.grid);\n const grid = toDetailList(result.grid);\n return {\n info,\n grid,\n cursor: result.cursor,\n lockedColumns\n };\n });\n return output.bind(out => {\n const newElements = render$1(table, out.grid);\n const tableSizing = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.sizing).getOrThunk(() => TableSize.getTableSize(table));\n const resizing = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.resize).getOrThunk(preserveTable);\n adjustment(table, out.grid, out.info, {\n sizing: tableSizing,\n resize: resizing,\n section: tableSection\n });\n postAction(table);\n remove$7(table, LOCKED_COL_ATTR);\n if (out.lockedColumns.length > 0) {\n set$2(table, LOCKED_COL_ATTR, out.lockedColumns.join(','));\n }\n return Optional.some({\n cursor: out.cursor,\n newRows: newElements.newRows,\n newCells: newElements.newCells\n });\n });\n };\n const onPaste = (warehouse, target) => cell(target.element).bind(cell => findInWarehouse(warehouse, cell).map(details => {\n const value = {\n ...details,\n generators: target.generators,\n clipboard: target.clipboard\n };\n return value;\n }));\n const onPasteByEditor = (warehouse, target) => extractCells(warehouse, target, always).map(cells => ({\n cells,\n generators: target.generators,\n clipboard: target.clipboard\n }));\n const onMergable = (_warehouse, target) => target.mergable;\n const onUnmergable = (_warehouse, target) => target.unmergable;\n const onCells = (warehouse, target) => extractCells(warehouse, target, always);\n const onUnlockedCells = (warehouse, target) => extractCells(warehouse, target, detail => !detail.isLocked);\n const isUnlockedTableCell = (warehouse, cell) => findInWarehouse(warehouse, cell).exists(detail => !detail.isLocked);\n const allUnlocked = (warehouse, cells) => forall(cells, cell => isUnlockedTableCell(warehouse, cell));\n const onUnlockedMergable = (warehouse, target) => onMergable(warehouse, target).filter(mergeable => allUnlocked(warehouse, mergeable.cells));\n const onUnlockedUnmergable = (warehouse, target) => onUnmergable(warehouse, target).filter(cells => allUnlocked(warehouse, cells));\n\n const merge$2 = (grid, bounds, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n if (rows.length === 0) {\n return grid;\n }\n for (let i = bounds.startRow; i <= bounds.finishRow; i++) {\n for (let j = bounds.startCol; j <= bounds.finishCol; j++) {\n const row = rows[i];\n const isLocked = getCell(row, j).isLocked;\n mutateCell(row, j, elementnew(substitution(), false, isLocked));\n }\n }\n return grid;\n };\n const unmerge = (grid, target, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n let first = true;\n for (let i = 0; i < rows.length; i++) {\n for (let j = 0; j < cellLength(rows[0]); j++) {\n const row = rows[i];\n const currentCell = getCell(row, j);\n const currentCellElm = currentCell.element;\n const isToReplace = comparator(currentCellElm, target);\n if (isToReplace && !first) {\n mutateCell(row, j, elementnew(substitution(), true, currentCell.isLocked));\n } else if (isToReplace) {\n first = false;\n }\n }\n }\n return grid;\n };\n const uniqueCells = (row, comparator) => {\n return foldl(row, (rest, cell) => {\n return exists(rest, currentCell => {\n return comparator(currentCell.element, cell.element);\n }) ? rest : rest.concat([cell]);\n }, []);\n };\n const splitCols = (grid, index, comparator, substitution) => {\n if (index > 0 && index < grid[0].cells.length) {\n each$2(grid, row => {\n const prevCell = row.cells[index - 1];\n let offset = 0;\n const substitute = substitution();\n while (row.cells.length > index + offset && comparator(prevCell.element, row.cells[index + offset].element)) {\n mutateCell(row, index + offset, elementnew(substitute, true, row.cells[index + offset].isLocked));\n offset++;\n }\n });\n }\n return grid;\n };\n const splitRows = (grid, index, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n if (index > 0 && index < rows.length) {\n const rowPrevCells = rows[index - 1].cells;\n const cells = uniqueCells(rowPrevCells, comparator);\n each$2(cells, cell => {\n let replacement = Optional.none();\n for (let i = index; i < rows.length; i++) {\n for (let j = 0; j < cellLength(rows[0]); j++) {\n const row = rows[i];\n const current = getCell(row, j);\n const isToReplace = comparator(current.element, cell.element);\n if (isToReplace) {\n if (replacement.isNone()) {\n replacement = Optional.some(substitution());\n }\n replacement.each(sub => {\n mutateCell(row, j, elementnew(sub, true, current.isLocked));\n });\n }\n }\n }\n });\n }\n return grid;\n };\n\n const value$1 = value => {\n const applyHelper = fn => fn(value);\n const constHelper = constant(value);\n const outputHelper = () => output;\n const output = {\n tag: true,\n inner: value,\n fold: (_onError, onValue) => onValue(value),\n isValue: always,\n isError: never,\n map: mapper => Result.value(mapper(value)),\n mapError: outputHelper,\n bind: applyHelper,\n exists: applyHelper,\n forall: applyHelper,\n getOr: constHelper,\n or: outputHelper,\n getOrThunk: constHelper,\n orThunk: outputHelper,\n getOrDie: constHelper,\n each: fn => {\n fn(value);\n },\n toOptional: () => Optional.some(value)\n };\n return output;\n };\n const error = error => {\n const outputHelper = () => output;\n const output = {\n tag: false,\n inner: error,\n fold: (onError, _onValue) => onError(error),\n isValue: never,\n isError: always,\n map: outputHelper,\n mapError: mapper => Result.error(mapper(error)),\n bind: outputHelper,\n exists: never,\n forall: always,\n getOr: identity,\n or: identity,\n getOrThunk: apply,\n orThunk: apply,\n getOrDie: die(String(error)),\n each: noop,\n toOptional: Optional.none\n };\n return output;\n };\n const fromOption = (optional, err) => optional.fold(() => error(err), value$1);\n const Result = {\n value: value$1,\n error,\n fromOption\n };\n\n const measure = (startAddress, gridA, gridB) => {\n if (startAddress.row >= gridA.length || startAddress.column > cellLength(gridA[0])) {\n return Result.error('invalid start address out of table bounds, row: ' + startAddress.row + ', column: ' + startAddress.column);\n }\n const rowRemainder = gridA.slice(startAddress.row);\n const colRemainder = rowRemainder[0].cells.slice(startAddress.column);\n const colRequired = cellLength(gridB[0]);\n const rowRequired = gridB.length;\n return Result.value({\n rowDelta: rowRemainder.length - rowRequired,\n colDelta: colRemainder.length - colRequired\n });\n };\n const measureWidth = (gridA, gridB) => {\n const colLengthA = cellLength(gridA[0]);\n const colLengthB = cellLength(gridB[0]);\n return {\n rowDelta: 0,\n colDelta: colLengthA - colLengthB\n };\n };\n const measureHeight = (gridA, gridB) => {\n const rowLengthA = gridA.length;\n const rowLengthB = gridB.length;\n return {\n rowDelta: rowLengthA - rowLengthB,\n colDelta: 0\n };\n };\n const generateElements = (amount, row, generators, isLocked) => {\n const generator = row.section === 'colgroup' ? generators.col : generators.cell;\n return range$1(amount, idx => elementnew(generator(), true, isLocked(idx)));\n };\n const rowFill = (grid, amount, generators, lockedColumns) => {\n const exampleRow = grid[grid.length - 1];\n return grid.concat(range$1(amount, () => {\n const generator = exampleRow.section === 'colgroup' ? generators.colgroup : generators.row;\n const row = clone(exampleRow, generator, identity);\n const elements = generateElements(row.cells.length, row, generators, idx => has$1(lockedColumns, idx.toString()));\n return setCells(row, elements);\n }));\n };\n const colFill = (grid, amount, generators, startIndex) => map$1(grid, row => {\n const newChildren = generateElements(amount, row, generators, never);\n return addCells(row, startIndex, newChildren);\n });\n const lockedColFill = (grid, generators, lockedColumns) => map$1(grid, row => {\n return foldl(lockedColumns, (acc, colNum) => {\n const newChild = generateElements(1, row, generators, always)[0];\n return addCell(acc, colNum, newChild);\n }, row);\n });\n const tailor = (gridA, delta, generators) => {\n const fillCols = delta.colDelta < 0 ? colFill : identity;\n const fillRows = delta.rowDelta < 0 ? rowFill : identity;\n const lockedColumns = getLockedColumnsFromGrid(gridA);\n const gridWidth = cellLength(gridA[0]);\n const isLastColLocked = exists(lockedColumns, locked => locked === gridWidth - 1);\n const modifiedCols = fillCols(gridA, Math.abs(delta.colDelta), generators, isLastColLocked ? gridWidth - 1 : gridWidth);\n const newLockedColumns = getLockedColumnsFromGrid(modifiedCols);\n return fillRows(modifiedCols, Math.abs(delta.rowDelta), generators, mapToObject(newLockedColumns, always));\n };\n\n const isSpanning = (grid, row, col, comparator) => {\n const candidate = getCell(grid[row], col);\n const matching = curry(comparator, candidate.element);\n const currentRow = grid[row];\n return grid.length > 1 && cellLength(currentRow) > 1 && (col > 0 && matching(getCellElement(currentRow, col - 1)) || col < currentRow.cells.length - 1 && matching(getCellElement(currentRow, col + 1)) || row > 0 && matching(getCellElement(grid[row - 1], col)) || row < grid.length - 1 && matching(getCellElement(grid[row + 1], col)));\n };\n const mergeTables = (startAddress, gridA, gridBRows, generator, comparator, lockedColumns) => {\n const startRow = startAddress.row;\n const startCol = startAddress.column;\n const mergeHeight = gridBRows.length;\n const mergeWidth = cellLength(gridBRows[0]);\n const endRow = startRow + mergeHeight;\n const endCol = startCol + mergeWidth + lockedColumns.length;\n const lockedColumnObj = mapToObject(lockedColumns, always);\n for (let r = startRow; r < endRow; r++) {\n let skippedCol = 0;\n for (let c = startCol; c < endCol; c++) {\n if (lockedColumnObj[c]) {\n skippedCol++;\n continue;\n }\n if (isSpanning(gridA, r, c, comparator)) {\n unmerge(gridA, getCellElement(gridA[r], c), comparator, generator.cell);\n }\n const gridBColIndex = c - startCol - skippedCol;\n const newCell = getCell(gridBRows[r - startRow], gridBColIndex);\n const newCellElm = newCell.element;\n const replacement = generator.replace(newCellElm);\n mutateCell(gridA[r], c, elementnew(replacement, true, newCell.isLocked));\n }\n }\n return gridA;\n };\n const getValidStartAddress = (currentStartAddress, grid, lockedColumns) => {\n const gridColLength = cellLength(grid[0]);\n const adjustedRowAddress = extractGridDetails(grid).cols.length + currentStartAddress.row;\n const possibleColAddresses = range$1(gridColLength - currentStartAddress.column, num => num + currentStartAddress.column);\n const validColAddress = find$1(possibleColAddresses, num => forall(lockedColumns, col => col !== num)).getOr(gridColLength - 1);\n return {\n row: adjustedRowAddress,\n column: validColAddress\n };\n };\n const getLockedColumnsWithinBounds = (startAddress, rows, lockedColumns) => filter$2(lockedColumns, colNum => colNum >= startAddress.column && colNum <= cellLength(rows[0]) + startAddress.column);\n const merge$1 = (startAddress, gridA, gridB, generator, comparator) => {\n const lockedColumns = getLockedColumnsFromGrid(gridA);\n const validStartAddress = getValidStartAddress(startAddress, gridA, lockedColumns);\n const gridBRows = extractGridDetails(gridB).rows;\n const lockedColumnsWithinBounds = getLockedColumnsWithinBounds(validStartAddress, gridBRows, lockedColumns);\n const result = measure(validStartAddress, gridA, gridBRows);\n return result.map(diff => {\n const delta = {\n ...diff,\n colDelta: diff.colDelta - lockedColumnsWithinBounds.length\n };\n const fittedGrid = tailor(gridA, delta, generator);\n const newLockedColumns = getLockedColumnsFromGrid(fittedGrid);\n const newLockedColumnsWithinBounds = getLockedColumnsWithinBounds(validStartAddress, gridBRows, newLockedColumns);\n return mergeTables(validStartAddress, fittedGrid, gridBRows, generator, comparator, newLockedColumnsWithinBounds);\n });\n };\n const insertCols = (index, gridA, gridB, generator, comparator) => {\n splitCols(gridA, index, comparator, generator.cell);\n const delta = measureHeight(gridB, gridA);\n const fittedNewGrid = tailor(gridB, delta, generator);\n const secondDelta = measureHeight(gridA, fittedNewGrid);\n const fittedOldGrid = tailor(gridA, secondDelta, generator);\n return map$1(fittedOldGrid, (gridRow, i) => {\n return addCells(gridRow, index, fittedNewGrid[i].cells);\n });\n };\n const insertRows = (index, gridA, gridB, generator, comparator) => {\n splitRows(gridA, index, comparator, generator.cell);\n const locked = getLockedColumnsFromGrid(gridA);\n const diff = measureWidth(gridA, gridB);\n const delta = {\n ...diff,\n colDelta: diff.colDelta - locked.length\n };\n const fittedOldGrid = tailor(gridA, delta, generator);\n const {\n cols: oldCols,\n rows: oldRows\n } = extractGridDetails(fittedOldGrid);\n const newLocked = getLockedColumnsFromGrid(fittedOldGrid);\n const secondDiff = measureWidth(gridB, gridA);\n const secondDelta = {\n ...secondDiff,\n colDelta: secondDiff.colDelta + newLocked.length\n };\n const fittedGridB = lockedColFill(gridB, generator, newLocked);\n const fittedNewGrid = tailor(fittedGridB, secondDelta, generator);\n return [\n ...oldCols,\n ...oldRows.slice(0, index),\n ...fittedNewGrid,\n ...oldRows.slice(index, oldRows.length)\n ];\n };\n\n const cloneRow = (row, cloneCell, comparator, substitution) => clone(row, elem => substitution(elem, comparator), cloneCell);\n const insertRowAt = (grid, index, example, comparator, substitution) => {\n const {rows, cols} = extractGridDetails(grid);\n const before = rows.slice(0, index);\n const after = rows.slice(index);\n const newRow = cloneRow(rows[example], (ex, c) => {\n const withinSpan = index > 0 && index < rows.length && comparator(getCellElement(rows[index - 1], c), getCellElement(rows[index], c));\n const ret = withinSpan ? getCell(rows[index], c) : elementnew(substitution(ex.element, comparator), true, ex.isLocked);\n return ret;\n }, comparator, substitution);\n return [\n ...cols,\n ...before,\n newRow,\n ...after\n ];\n };\n const getElementFor = (row, column, section, withinSpan, example, comparator, substitution) => {\n if (section === 'colgroup' || !withinSpan) {\n const cell = getCell(row, example);\n return elementnew(substitution(cell.element, comparator), true, false);\n } else {\n return getCell(row, column);\n }\n };\n const insertColumnAt = (grid, index, example, comparator, substitution) => map$1(grid, row => {\n const withinSpan = index > 0 && index < cellLength(row) && comparator(getCellElement(row, index - 1), getCellElement(row, index));\n const sub = getElementFor(row, index, row.section, withinSpan, example, comparator, substitution);\n return addCell(row, index, sub);\n });\n const deleteColumnsAt = (grid, columns) => bind$2(grid, row => {\n const existingCells = row.cells;\n const cells = foldr(columns, (acc, column) => column >= 0 && column < acc.length ? acc.slice(0, column).concat(acc.slice(column + 1)) : acc, existingCells);\n return cells.length > 0 ? [rowcells(row.element, cells, row.section, row.isNew)] : [];\n });\n const deleteRowsAt = (grid, start, finish) => {\n const {rows, cols} = extractGridDetails(grid);\n return [\n ...cols,\n ...rows.slice(0, start),\n ...rows.slice(finish + 1)\n ];\n };\n\n const notInStartRow = (grid, rowIndex, colIndex, comparator) => getCellElement(grid[rowIndex], colIndex) !== undefined && (rowIndex > 0 && comparator(getCellElement(grid[rowIndex - 1], colIndex), getCellElement(grid[rowIndex], colIndex)));\n const notInStartColumn = (row, index, comparator) => index > 0 && comparator(getCellElement(row, index - 1), getCellElement(row, index));\n const isDuplicatedCell = (grid, rowIndex, colIndex, comparator) => notInStartRow(grid, rowIndex, colIndex, comparator) || notInStartColumn(grid[rowIndex], colIndex, comparator);\n const rowReplacerPredicate = (targetRow, columnHeaders) => {\n const entireTableIsHeader = forall(columnHeaders, identity) && isHeaderCells(targetRow.cells);\n return entireTableIsHeader ? always : (cell, _rowIndex, colIndex) => {\n const type = name(cell.element);\n return !(type === 'th' && columnHeaders[colIndex]);\n };\n };\n const columnReplacePredicate = (targetColumn, rowHeaders) => {\n const entireTableIsHeader = forall(rowHeaders, identity) && isHeaderCells(targetColumn);\n return entireTableIsHeader ? always : (cell, rowIndex, _colIndex) => {\n const type = name(cell.element);\n return !(type === 'th' && rowHeaders[rowIndex]);\n };\n };\n const determineScope = (applyScope, cell, newScope, isInHeader) => {\n const hasSpan = scope => scope === 'row' ? hasRowspan(cell) : hasColspan(cell);\n const getScope = scope => hasSpan(scope) ? `${ scope }group` : scope;\n if (applyScope) {\n return isHeaderCell(cell) ? getScope(newScope) : null;\n } else if (isInHeader && isHeaderCell(cell)) {\n const oppositeScope = newScope === 'row' ? 'col' : 'row';\n return getScope(oppositeScope);\n } else {\n return null;\n }\n };\n const rowScopeGenerator = (applyScope, columnHeaders) => (cell, rowIndex, columnIndex) => Optional.some(determineScope(applyScope, cell.element, 'col', columnHeaders[columnIndex]));\n const columnScopeGenerator = (applyScope, rowHeaders) => (cell, rowIndex) => Optional.some(determineScope(applyScope, cell.element, 'row', rowHeaders[rowIndex]));\n const replace = (cell, comparator, substitute) => elementnew(substitute(cell.element, comparator), true, cell.isLocked);\n const replaceIn = (grid, targets, comparator, substitute, replacer, genScope, shouldReplace) => {\n const isTarget = cell => {\n return exists(targets, target => {\n return comparator(cell.element, target.element);\n });\n };\n return map$1(grid, (row, rowIndex) => {\n return mapCells(row, (cell, colIndex) => {\n if (isTarget(cell)) {\n const newCell = shouldReplace(cell, rowIndex, colIndex) ? replacer(cell, comparator, substitute) : cell;\n genScope(newCell, rowIndex, colIndex).each(scope => {\n setOptions(newCell.element, { scope: Optional.from(scope) });\n });\n return newCell;\n } else {\n return cell;\n }\n });\n });\n };\n const getColumnCells = (rows, columnIndex, comparator) => bind$2(rows, (row, i) => {\n return isDuplicatedCell(rows, i, columnIndex, comparator) ? [] : [getCell(row, columnIndex)];\n });\n const getRowCells = (rows, rowIndex, comparator) => {\n const targetRow = rows[rowIndex];\n return bind$2(targetRow.cells, (item, i) => {\n return isDuplicatedCell(rows, rowIndex, i, comparator) ? [] : [item];\n });\n };\n const replaceColumns = (grid, indexes, applyScope, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n const targets = bind$2(indexes, index => getColumnCells(rows, index, comparator));\n const rowHeaders = map$1(rows, row => isHeaderCells(row.cells));\n const shouldReplaceCell = columnReplacePredicate(targets, rowHeaders);\n const scopeGenerator = columnScopeGenerator(applyScope, rowHeaders);\n return replaceIn(grid, targets, comparator, substitution, replace, scopeGenerator, shouldReplaceCell);\n };\n const replaceRows = (grid, indexes, section, applyScope, comparator, substitution, tableSection) => {\n const {cols, rows} = extractGridDetails(grid);\n const targetRow = rows[indexes[0]];\n const targets = bind$2(indexes, index => getRowCells(rows, index, comparator));\n const columnHeaders = map$1(targetRow.cells, (_cell, index) => isHeaderCells(getColumnCells(rows, index, comparator)));\n const newRows = [...rows];\n each$2(indexes, index => {\n newRows[index] = tableSection.transformRow(rows[index], section);\n });\n const newGrid = [\n ...cols,\n ...newRows\n ];\n const shouldReplaceCell = rowReplacerPredicate(targetRow, columnHeaders);\n const scopeGenerator = rowScopeGenerator(applyScope, columnHeaders);\n return replaceIn(newGrid, targets, comparator, substitution, tableSection.transformCell, scopeGenerator, shouldReplaceCell);\n };\n const replaceCells = (grid, details, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n const targetCells = map$1(details, detail => getCell(rows[detail.row], detail.column));\n return replaceIn(grid, targetCells, comparator, substitution, replace, Optional.none, always);\n };\n\n const generate$1 = cases => {\n if (!isArray(cases)) {\n throw new Error('cases must be an array');\n }\n if (cases.length === 0) {\n throw new Error('there must be at least one case');\n }\n const constructors = [];\n const adt = {};\n each$2(cases, (acase, count) => {\n const keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n const key = keys$1[0];\n const value = acase[key];\n if (adt[key] !== undefined) {\n throw new Error('duplicate key detected:' + key);\n } else if (key === 'cata') {\n throw new Error('cannot have a case named cata (sorry)');\n } else if (!isArray(value)) {\n throw new Error('case arguments must be an array');\n }\n constructors.push(key);\n adt[key] = (...args) => {\n const argLength = args.length;\n if (argLength !== value.length) {\n throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n }\n const match = branches => {\n const branchKeys = keys(branches);\n if (constructors.length !== branchKeys.length) {\n throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n }\n const allReqd = forall(constructors, reqKey => {\n return contains$2(branchKeys, reqKey);\n });\n if (!allReqd) {\n throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n }\n return branches[key].apply(null, args);\n };\n return {\n fold: (...foldArgs) => {\n if (foldArgs.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n }\n const target = foldArgs[count];\n return target.apply(null, args);\n },\n match,\n log: label => {\n console.log(label, {\n constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n const Adt = { generate: generate$1 };\n\n const adt$6 = Adt.generate([\n { none: [] },\n { only: ['index'] },\n {\n left: [\n 'index',\n 'next'\n ]\n },\n {\n middle: [\n 'prev',\n 'index',\n 'next'\n ]\n },\n {\n right: [\n 'prev',\n 'index'\n ]\n }\n ]);\n const ColumnContext = { ...adt$6 };\n\n const neighbours = (input, index) => {\n if (input.length === 0) {\n return ColumnContext.none();\n }\n if (input.length === 1) {\n return ColumnContext.only(0);\n }\n if (index === 0) {\n return ColumnContext.left(0, 1);\n }\n if (index === input.length - 1) {\n return ColumnContext.right(index - 1, index);\n }\n if (index > 0 && index < input.length - 1) {\n return ColumnContext.middle(index - 1, index, index + 1);\n }\n return ColumnContext.none();\n };\n const determine = (input, column, step, tableSize, resize) => {\n const result = input.slice(0);\n const context = neighbours(input, column);\n const onNone = constant(map$1(result, constant(0)));\n const onOnly = index => tableSize.singleColumnWidth(result[index], step);\n const onLeft = (index, next) => resize.calcLeftEdgeDeltas(result, index, next, step, tableSize.minCellWidth(), tableSize.isRelative);\n const onMiddle = (prev, index, next) => resize.calcMiddleDeltas(result, prev, index, next, step, tableSize.minCellWidth(), tableSize.isRelative);\n const onRight = (prev, index) => resize.calcRightEdgeDeltas(result, prev, index, step, tableSize.minCellWidth(), tableSize.isRelative);\n return context.fold(onNone, onOnly, onLeft, onMiddle, onRight);\n };\n\n const total = (start, end, measures) => {\n let r = 0;\n for (let i = start; i < end; i++) {\n r += measures[i] !== undefined ? measures[i] : 0;\n }\n return r;\n };\n const recalculateWidthForCells = (warehouse, widths) => {\n const all = Warehouse.justCells(warehouse);\n return map$1(all, cell => {\n const width = total(cell.column, cell.column + cell.colspan, widths);\n return {\n element: cell.element,\n width,\n colspan: cell.colspan\n };\n });\n };\n const recalculateWidthForColumns = (warehouse, widths) => {\n const groups = Warehouse.justColumns(warehouse);\n return map$1(groups, (column, index) => ({\n element: column.element,\n width: widths[index],\n colspan: column.colspan\n }));\n };\n const matchRowHeight = (warehouse, heights) => {\n return map$1(warehouse.all, (row, i) => {\n return {\n element: row.element,\n height: heights[i]\n };\n });\n };\n\n const sumUp = newSize => foldr(newSize, (b, a) => b + a, 0);\n const recalculate = (warehouse, widths) => {\n if (Warehouse.hasColumns(warehouse)) {\n return recalculateWidthForColumns(warehouse, widths);\n } else {\n return recalculateWidthForCells(warehouse, widths);\n }\n };\n const recalculateAndApply = (warehouse, widths, tableSize) => {\n const newSizes = recalculate(warehouse, widths);\n each$2(newSizes, cell => {\n tableSize.setElementWidth(cell.element, cell.width);\n });\n };\n const adjustWidth = (table, delta, index, resizing, tableSize) => {\n const warehouse = Warehouse.fromTable(table);\n const step = tableSize.getCellDelta(delta);\n const widths = tableSize.getWidths(warehouse, tableSize);\n const isLastColumn = index === warehouse.grid.columns - 1;\n const clampedStep = resizing.clampTableDelta(widths, index, step, tableSize.minCellWidth(), isLastColumn);\n const deltas = determine(widths, index, clampedStep, tableSize, resizing);\n const newWidths = map$1(deltas, (dx, i) => dx + widths[i]);\n recalculateAndApply(warehouse, newWidths, tableSize);\n resizing.resizeTable(tableSize.adjustTableWidth, clampedStep, isLastColumn);\n };\n const adjustHeight = (table, delta, index) => {\n const warehouse = Warehouse.fromTable(table);\n const heights = getPixelHeights(warehouse, table);\n const newHeights = map$1(heights, (dy, i) => index === i ? Math.max(delta + dy, minHeight()) : dy);\n const newRowSizes = matchRowHeight(warehouse, newHeights);\n each$2(newRowSizes, row => {\n setHeight(row.element, row.height);\n });\n each$2(Warehouse.justCells(warehouse), cell => {\n removeHeight(cell.element);\n });\n const total = sumUp(newHeights);\n setHeight(table, total);\n };\n const adjustAndRedistributeWidths$1 = (_table, list, details, tableSize, resizeBehaviour) => {\n const warehouse = Warehouse.generate(list);\n const sizes = tableSize.getWidths(warehouse, tableSize);\n const tablePixelWidth = tableSize.pixelWidth();\n const {newSizes, delta} = resizeBehaviour.calcRedestributedWidths(sizes, tablePixelWidth, details.pixelDelta, tableSize.isRelative);\n recalculateAndApply(warehouse, newSizes, tableSize);\n tableSize.adjustTableWidth(delta);\n };\n const adjustWidthTo = (_table, list, _info, tableSize) => {\n const warehouse = Warehouse.generate(list);\n const widths = tableSize.getWidths(warehouse, tableSize);\n recalculateAndApply(warehouse, widths, tableSize);\n };\n\n const uniqueColumns = details => {\n const uniqueCheck = (rest, detail) => {\n const columnExists = exists(rest, currentDetail => currentDetail.column === detail.column);\n return columnExists ? rest : rest.concat([detail]);\n };\n return foldl(details, uniqueCheck, []).sort((detailA, detailB) => detailA.column - detailB.column);\n };\n\n const isCol = isTag('col');\n const isColgroup = isTag('colgroup');\n const isRow$1 = element => name(element) === 'tr' || isColgroup(element);\n const elementToData = element => {\n const colspan = getAttrValue(element, 'colspan', 1);\n const rowspan = getAttrValue(element, 'rowspan', 1);\n return {\n element,\n colspan,\n rowspan\n };\n };\n const modification = (generators, toData = elementToData) => {\n const nuCell = data => isCol(data.element) ? generators.col(data) : generators.cell(data);\n const nuRow = data => isColgroup(data.element) ? generators.colgroup(data) : generators.row(data);\n const add = element => {\n if (isRow$1(element)) {\n return nuRow({ element });\n } else {\n const cell = element;\n const replacement = nuCell(toData(cell));\n recent = Optional.some({\n item: cell,\n replacement\n });\n return replacement;\n }\n };\n let recent = Optional.none();\n const getOrInit = (element, comparator) => {\n return recent.fold(() => {\n return add(element);\n }, p => {\n return comparator(element, p.item) ? p.replacement : add(element);\n });\n };\n return { getOrInit };\n };\n const transform$1 = tag => {\n return generators => {\n const list = [];\n const find = (element, comparator) => {\n return find$1(list, x => {\n return comparator(x.item, element);\n });\n };\n const makeNew = element => {\n const attrs = tag === 'td' ? { scope: null } : {};\n const cell = generators.replace(element, tag, attrs);\n list.push({\n item: element,\n sub: cell\n });\n return cell;\n };\n const replaceOrInit = (element, comparator) => {\n if (isRow$1(element) || isCol(element)) {\n return element;\n } else {\n const cell = element;\n return find(cell, comparator).fold(() => {\n return makeNew(cell);\n }, p => {\n return comparator(element, p.item) ? p.sub : makeNew(cell);\n });\n }\n };\n return { replaceOrInit };\n };\n };\n const getScopeAttribute = cell => getOpt(cell, 'scope').map(attribute => attribute.substr(0, 3));\n const merging = generators => {\n const unmerge = cell => {\n const scope = getScopeAttribute(cell);\n scope.each(attribute => set$2(cell, 'scope', attribute));\n return () => {\n const raw = generators.cell({\n element: cell,\n colspan: 1,\n rowspan: 1\n });\n remove$5(raw, 'width');\n remove$5(cell, 'width');\n scope.each(attribute => set$2(raw, 'scope', attribute));\n return raw;\n };\n };\n const merge = cells => {\n const getScopeProperty = () => {\n const stringAttributes = cat(map$1(cells, getScopeAttribute));\n if (stringAttributes.length === 0) {\n return Optional.none();\n } else {\n const baseScope = stringAttributes[0];\n const scopes = [\n 'row',\n 'col'\n ];\n const isMixed = exists(stringAttributes, attribute => {\n return attribute !== baseScope && contains$2(scopes, attribute);\n });\n return isMixed ? Optional.none() : Optional.from(baseScope);\n }\n };\n remove$5(cells[0], 'width');\n getScopeProperty().fold(() => remove$7(cells[0], 'scope'), attribute => set$2(cells[0], 'scope', attribute + 'group'));\n return constant(cells[0]);\n };\n return {\n unmerge,\n merge\n };\n };\n const Generators = {\n modification,\n transform: transform$1,\n merging\n };\n\n const blockList = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'table',\n 'thead',\n 'tfoot',\n 'tbody',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n const isList$1 = (universe, item) => {\n const tagName = universe.property().name(item);\n return contains$2([\n 'ol',\n 'ul'\n ], tagName);\n };\n const isBlock$1 = (universe, item) => {\n const tagName = universe.property().name(item);\n return contains$2(blockList, tagName);\n };\n const isEmptyTag$1 = (universe, item) => {\n return contains$2([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], universe.property().name(item));\n };\n\n const universe$1 = DomUniverse();\n const isBlock = element => {\n return isBlock$1(universe$1, element);\n };\n const isList = element => {\n return isList$1(universe$1, element);\n };\n const isEmptyTag = element => {\n return isEmptyTag$1(universe$1, element);\n };\n\n const merge = cells => {\n const isBr = isTag('br');\n const advancedBr = children => {\n return forall(children, c => {\n return isBr(c) || isText(c) && get$6(c).trim().length === 0;\n });\n };\n const isListItem = el => {\n return name(el) === 'li' || ancestor$2(el, isList).isSome();\n };\n const siblingIsBlock = el => {\n return nextSibling(el).map(rightSibling => {\n if (isBlock(rightSibling)) {\n return true;\n }\n if (isEmptyTag(rightSibling)) {\n return name(rightSibling) === 'img' ? false : true;\n }\n return false;\n }).getOr(false);\n };\n const markCell = cell => {\n return last$1(cell).bind(rightEdge => {\n const rightSiblingIsBlock = siblingIsBlock(rightEdge);\n return parent(rightEdge).map(parent => {\n return rightSiblingIsBlock === true || isListItem(parent) || isBr(rightEdge) || isBlock(parent) && !eq$1(cell, parent) ? [] : [SugarElement.fromTag('br')];\n });\n }).getOr([]);\n };\n const markContent = () => {\n const content = bind$2(cells, cell => {\n const children = children$2(cell);\n return advancedBr(children) ? [] : children.concat(markCell(cell));\n });\n return content.length === 0 ? [SugarElement.fromTag('br')] : content;\n };\n const contents = markContent();\n empty(cells[0]);\n append(cells[0], contents);\n };\n\n const isEditable = elem => isEditable$1(elem, true);\n const prune = table => {\n const cells = cells$1(table);\n if (cells.length === 0) {\n remove$6(table);\n }\n };\n const outcome = (grid, cursor) => ({\n grid,\n cursor\n });\n const findEditableCursorPosition = rows => findMap(rows, row => findMap(row.cells, cell => {\n const elem = cell.element;\n return someIf(isEditable(elem), elem);\n }));\n const elementFromGrid = (grid, row, column) => {\n var _a, _b;\n const rows = extractGridDetails(grid).rows;\n return Optional.from((_b = (_a = rows[row]) === null || _a === void 0 ? void 0 : _a.cells[column]) === null || _b === void 0 ? void 0 : _b.element).filter(isEditable).orThunk(() => findEditableCursorPosition(rows));\n };\n const bundle = (grid, row, column) => {\n const cursorElement = elementFromGrid(grid, row, column);\n return outcome(grid, cursorElement);\n };\n const uniqueRows = details => {\n const rowCompilation = (rest, detail) => {\n const rowExists = exists(rest, currentDetail => currentDetail.row === detail.row);\n return rowExists ? rest : rest.concat([detail]);\n };\n return foldl(details, rowCompilation, []).sort((detailA, detailB) => detailA.row - detailB.row);\n };\n const opInsertRowsBefore = (grid, details, comparator, genWrappers) => {\n const targetIndex = details[0].row;\n const rows = uniqueRows(details);\n const newGrid = foldr(rows, (acc, row) => {\n const newG = insertRowAt(acc.grid, targetIndex, row.row + acc.delta, comparator, genWrappers.getOrInit);\n return {\n grid: newG,\n delta: acc.delta + 1\n };\n }, {\n grid,\n delta: 0\n }).grid;\n return bundle(newGrid, targetIndex, details[0].column);\n };\n const opInsertRowsAfter = (grid, details, comparator, genWrappers) => {\n const rows = uniqueRows(details);\n const target = rows[rows.length - 1];\n const targetIndex = target.row + target.rowspan;\n const newGrid = foldr(rows, (newG, row) => {\n return insertRowAt(newG, targetIndex, row.row, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, targetIndex, details[0].column);\n };\n const opInsertColumnsBefore = (grid, extractDetail, comparator, genWrappers) => {\n const details = extractDetail.details;\n const columns = uniqueColumns(details);\n const targetIndex = columns[0].column;\n const newGrid = foldr(columns, (acc, col) => {\n const newG = insertColumnAt(acc.grid, targetIndex, col.column + acc.delta, comparator, genWrappers.getOrInit);\n return {\n grid: newG,\n delta: acc.delta + 1\n };\n }, {\n grid,\n delta: 0\n }).grid;\n return bundle(newGrid, details[0].row, targetIndex);\n };\n const opInsertColumnsAfter = (grid, extractDetail, comparator, genWrappers) => {\n const details = extractDetail.details;\n const target = details[details.length - 1];\n const targetIndex = target.column + target.colspan;\n const columns = uniqueColumns(details);\n const newGrid = foldr(columns, (newG, col) => {\n return insertColumnAt(newG, targetIndex, col.column, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, details[0].row, targetIndex);\n };\n const opMakeColumnsHeader = (initialGrid, details, comparator, genWrappers) => {\n const columns = uniqueColumns(details);\n const columnIndexes = map$1(columns, detail => detail.column);\n const newGrid = replaceColumns(initialGrid, columnIndexes, true, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opMakeCellsHeader = (initialGrid, details, comparator, genWrappers) => {\n const newGrid = replaceCells(initialGrid, details, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opUnmakeColumnsHeader = (initialGrid, details, comparator, genWrappers) => {\n const columns = uniqueColumns(details);\n const columnIndexes = map$1(columns, detail => detail.column);\n const newGrid = replaceColumns(initialGrid, columnIndexes, false, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opUnmakeCellsHeader = (initialGrid, details, comparator, genWrappers) => {\n const newGrid = replaceCells(initialGrid, details, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const makeRowsSection = (section, applyScope) => (initialGrid, details, comparator, genWrappers, tableSection) => {\n const rows = uniqueRows(details);\n const rowIndexes = map$1(rows, detail => detail.row);\n const newGrid = replaceRows(initialGrid, rowIndexes, section, applyScope, comparator, genWrappers.replaceOrInit, tableSection);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opMakeRowsHeader = makeRowsSection('thead', true);\n const opMakeRowsBody = makeRowsSection('tbody', false);\n const opMakeRowsFooter = makeRowsSection('tfoot', false);\n const opEraseColumns = (grid, extractDetail, _comparator, _genWrappers) => {\n const columns = uniqueColumns(extractDetail.details);\n const newGrid = deleteColumnsAt(grid, map$1(columns, column => column.column));\n const maxColIndex = newGrid.length > 0 ? newGrid[0].cells.length - 1 : 0;\n return bundle(newGrid, columns[0].row, Math.min(columns[0].column, maxColIndex));\n };\n const opEraseRows = (grid, details, _comparator, _genWrappers) => {\n const rows = uniqueRows(details);\n const newGrid = deleteRowsAt(grid, rows[0].row, rows[rows.length - 1].row);\n const maxRowIndex = Math.max(extractGridDetails(newGrid).rows.length - 1, 0);\n return bundle(newGrid, Math.min(details[0].row, maxRowIndex), details[0].column);\n };\n const opMergeCells = (grid, mergable, comparator, genWrappers) => {\n const cells = mergable.cells;\n merge(cells);\n const newGrid = merge$2(grid, mergable.bounds, comparator, genWrappers.merge(cells));\n return outcome(newGrid, Optional.from(cells[0]));\n };\n const opUnmergeCells = (grid, unmergable, comparator, genWrappers) => {\n const unmerge$1 = (b, cell) => unmerge(b, cell, comparator, genWrappers.unmerge(cell));\n const newGrid = foldr(unmergable, unmerge$1, grid);\n return outcome(newGrid, Optional.from(unmergable[0]));\n };\n const opPasteCells = (grid, pasteDetails, comparator, _genWrappers) => {\n const gridify = (table, generators) => {\n const wh = Warehouse.fromTable(table);\n return toGrid(wh, generators, true);\n };\n const gridB = gridify(pasteDetails.clipboard, pasteDetails.generators);\n const startAddress = address(pasteDetails.row, pasteDetails.column);\n const mergedGrid = merge$1(startAddress, grid, gridB, pasteDetails.generators, comparator);\n return mergedGrid.fold(() => outcome(grid, Optional.some(pasteDetails.element)), newGrid => {\n return bundle(newGrid, pasteDetails.row, pasteDetails.column);\n });\n };\n const gridifyRows = (rows, generators, context) => {\n const pasteDetails = fromPastedRows(rows, context.section);\n const wh = Warehouse.generate(pasteDetails);\n return toGrid(wh, generators, true);\n };\n const opPasteColsBefore = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[0].column;\n const context = rows[pasteDetails.cells[0].row];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n };\n const opPasteColsAfter = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[pasteDetails.cells.length - 1].column + pasteDetails.cells[pasteDetails.cells.length - 1].colspan;\n const context = rows[pasteDetails.cells[0].row];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, index);\n };\n const opPasteRowsBefore = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[0].row;\n const context = rows[index];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n };\n const opPasteRowsAfter = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[pasteDetails.cells.length - 1].row + pasteDetails.cells[pasteDetails.cells.length - 1].rowspan;\n const context = rows[pasteDetails.cells[0].row];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, index, pasteDetails.cells[0].column);\n };\n const opGetColumnsType = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onCells(house, target);\n return details.bind(selectedCells => {\n const lastSelectedCell = selectedCells[selectedCells.length - 1];\n const minColRange = selectedCells[0].column;\n const maxColRange = lastSelectedCell.column + lastSelectedCell.colspan;\n const selectedColumnCells = flatten(map$1(house.all, row => filter$2(row.cells, cell => cell.column >= minColRange && cell.column < maxColRange)));\n return findCommonCellType(selectedColumnCells);\n }).getOr('');\n };\n const opGetCellsType = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onCells(house, target);\n return details.bind(findCommonCellType).getOr('');\n };\n const opGetRowsType = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onCells(house, target);\n return details.bind(selectedCells => {\n const lastSelectedCell = selectedCells[selectedCells.length - 1];\n const minRowRange = selectedCells[0].row;\n const maxRowRange = lastSelectedCell.row + lastSelectedCell.rowspan;\n const selectedRows = house.all.slice(minRowRange, maxRowRange);\n return findCommonRowType(selectedRows);\n }).getOr('');\n };\n const resize = (table, list, details, behaviours) => adjustWidthTo(table, list, details, behaviours.sizing);\n const adjustAndRedistributeWidths = (table, list, details, behaviours) => adjustAndRedistributeWidths$1(table, list, details, behaviours.sizing, behaviours.resize);\n const firstColumnIsLocked = (_warehouse, details) => exists(details, detail => detail.column === 0 && detail.isLocked);\n const lastColumnIsLocked = (warehouse, details) => exists(details, detail => detail.column + detail.colspan >= warehouse.grid.columns && detail.isLocked);\n const getColumnsWidth = (warehouse, details) => {\n const columns$1 = columns(warehouse);\n const uniqueCols = uniqueColumns(details);\n return foldl(uniqueCols, (acc, detail) => {\n const column = columns$1[detail.column];\n const colWidth = column.map(getOuter$2).getOr(0);\n return acc + colWidth;\n }, 0);\n };\n const insertColumnsExtractor = before => (warehouse, target) => onCells(warehouse, target).filter(details => {\n const checkLocked = before ? firstColumnIsLocked : lastColumnIsLocked;\n return !checkLocked(warehouse, details);\n }).map(details => ({\n details,\n pixelDelta: getColumnsWidth(warehouse, details)\n }));\n const eraseColumnsExtractor = (warehouse, target) => onUnlockedCells(warehouse, target).map(details => ({\n details,\n pixelDelta: -getColumnsWidth(warehouse, details)\n }));\n const pasteColumnsExtractor = before => (warehouse, target) => onPasteByEditor(warehouse, target).filter(details => {\n const checkLocked = before ? firstColumnIsLocked : lastColumnIsLocked;\n return !checkLocked(warehouse, details.cells);\n });\n const headerCellGenerator = Generators.transform('th');\n const bodyCellGenerator = Generators.transform('td');\n const insertRowsBefore = run(opInsertRowsBefore, onCells, noop, noop, Generators.modification);\n const insertRowsAfter = run(opInsertRowsAfter, onCells, noop, noop, Generators.modification);\n const insertColumnsBefore = run(opInsertColumnsBefore, insertColumnsExtractor(true), adjustAndRedistributeWidths, noop, Generators.modification);\n const insertColumnsAfter = run(opInsertColumnsAfter, insertColumnsExtractor(false), adjustAndRedistributeWidths, noop, Generators.modification);\n const eraseColumns = run(opEraseColumns, eraseColumnsExtractor, adjustAndRedistributeWidths, prune, Generators.modification);\n const eraseRows = run(opEraseRows, onCells, noop, prune, Generators.modification);\n const makeColumnsHeader = run(opMakeColumnsHeader, onUnlockedCells, noop, noop, headerCellGenerator);\n const unmakeColumnsHeader = run(opUnmakeColumnsHeader, onUnlockedCells, noop, noop, bodyCellGenerator);\n const makeRowsHeader = run(opMakeRowsHeader, onCells, noop, noop, headerCellGenerator);\n const makeRowsBody = run(opMakeRowsBody, onCells, noop, noop, bodyCellGenerator);\n const makeRowsFooter = run(opMakeRowsFooter, onCells, noop, noop, bodyCellGenerator);\n const makeCellsHeader = run(opMakeCellsHeader, onUnlockedCells, noop, noop, headerCellGenerator);\n const unmakeCellsHeader = run(opUnmakeCellsHeader, onUnlockedCells, noop, noop, bodyCellGenerator);\n const mergeCells = run(opMergeCells, onUnlockedMergable, resize, noop, Generators.merging);\n const unmergeCells = run(opUnmergeCells, onUnlockedUnmergable, resize, noop, Generators.merging);\n const pasteCells = run(opPasteCells, onPaste, resize, noop, Generators.modification);\n const pasteColsBefore = run(opPasteColsBefore, pasteColumnsExtractor(true), noop, noop, Generators.modification);\n const pasteColsAfter = run(opPasteColsAfter, pasteColumnsExtractor(false), noop, noop, Generators.modification);\n const pasteRowsBefore = run(opPasteRowsBefore, onPasteByEditor, noop, noop, Generators.modification);\n const pasteRowsAfter = run(opPasteRowsAfter, onPasteByEditor, noop, noop, Generators.modification);\n const getColumnsType = opGetColumnsType;\n const getCellsType = opGetCellsType;\n const getRowsType = opGetRowsType;\n\n const fireNewRow = (editor, row) => editor.dispatch('NewRow', { node: row });\n const fireNewCell = (editor, cell) => editor.dispatch('NewCell', { node: cell });\n const fireTableModified = (editor, table, data) => {\n editor.dispatch('TableModified', {\n ...data,\n table\n });\n };\n const fireTableSelectionChange = (editor, cells, start, finish, otherCells) => {\n editor.dispatch('TableSelectionChange', {\n cells,\n start,\n finish,\n otherCells\n });\n };\n const fireTableSelectionClear = editor => {\n editor.dispatch('TableSelectionClear');\n };\n const fireObjectResizeStart = (editor, target, width, height, origin) => {\n editor.dispatch('ObjectResizeStart', {\n target,\n width,\n height,\n origin\n });\n };\n const fireObjectResized = (editor, target, width, height, origin) => {\n editor.dispatch('ObjectResized', {\n target,\n width,\n height,\n origin\n });\n };\n const styleModified = {\n structure: false,\n style: true\n };\n const structureModified = {\n structure: true,\n style: false\n };\n const styleAndStructureModified = {\n structure: true,\n style: true\n };\n\n const get$5 = (editor, table) => {\n if (isTablePercentagesForced(editor)) {\n return TableSize.percentageSize(table);\n } else if (isTablePixelsForced(editor)) {\n return TableSize.pixelSize(table);\n } else {\n return TableSize.getTableSize(table);\n }\n };\n\n const TableActions = (editor, resizeHandler, cellSelectionHandler) => {\n const isTableBody = editor => name(getBody(editor)) === 'table';\n const lastRowGuard = table => !isTableBody(editor) || getGridSize(table).rows > 1;\n const lastColumnGuard = table => !isTableBody(editor) || getGridSize(table).columns > 1;\n const cloneFormats = getTableCloneElements(editor);\n const colMutationOp = isResizeTableColumnResizing(editor) ? noop : halve;\n const getTableSectionType = table => {\n switch (getTableHeaderType(editor)) {\n case 'section':\n return TableSection.section();\n case 'sectionCells':\n return TableSection.sectionCells();\n case 'cells':\n return TableSection.cells();\n default:\n return TableSection.getTableSectionType(table, 'section');\n }\n };\n const setSelectionFromAction = (table, result) => result.cursor.fold(() => {\n const cells = cells$1(table);\n return head(cells).filter(inBody).map(firstCell => {\n cellSelectionHandler.clearSelectedCells(table.dom);\n const rng = editor.dom.createRng();\n rng.selectNode(firstCell.dom);\n editor.selection.setRng(rng);\n set$2(firstCell, 'data-mce-selected', '1');\n return rng;\n });\n }, cell => {\n const des = freefallRtl(cell);\n const rng = editor.dom.createRng();\n rng.setStart(des.element.dom, des.offset);\n rng.setEnd(des.element.dom, des.offset);\n editor.selection.setRng(rng);\n cellSelectionHandler.clearSelectedCells(table.dom);\n return Optional.some(rng);\n });\n const execute = (operation, guard, mutate, effect) => (table, target, noEvents = false) => {\n removeDataStyle(table);\n const doc = SugarElement.fromDom(editor.getDoc());\n const generators = cellOperations(mutate, doc, cloneFormats);\n const behaviours = {\n sizing: get$5(editor, table),\n resize: isResizeTableColumnResizing(editor) ? resizeTable() : preserveTable(),\n section: getTableSectionType(table)\n };\n return guard(table) ? operation(table, target, generators, behaviours).bind(result => {\n resizeHandler.refresh(table.dom);\n each$2(result.newRows, row => {\n fireNewRow(editor, row.dom);\n });\n each$2(result.newCells, cell => {\n fireNewCell(editor, cell.dom);\n });\n const range = setSelectionFromAction(table, result);\n if (inBody(table)) {\n removeDataStyle(table);\n if (!noEvents) {\n fireTableModified(editor, table.dom, effect);\n }\n }\n return range.map(rng => ({\n rng,\n effect\n }));\n }) : Optional.none();\n };\n const deleteRow = execute(eraseRows, lastRowGuard, noop, structureModified);\n const deleteColumn = execute(eraseColumns, lastColumnGuard, noop, structureModified);\n const insertRowsBefore$1 = execute(insertRowsBefore, always, noop, structureModified);\n const insertRowsAfter$1 = execute(insertRowsAfter, always, noop, structureModified);\n const insertColumnsBefore$1 = execute(insertColumnsBefore, always, colMutationOp, structureModified);\n const insertColumnsAfter$1 = execute(insertColumnsAfter, always, colMutationOp, structureModified);\n const mergeCells$1 = execute(mergeCells, always, noop, structureModified);\n const unmergeCells$1 = execute(unmergeCells, always, noop, structureModified);\n const pasteColsBefore$1 = execute(pasteColsBefore, always, noop, structureModified);\n const pasteColsAfter$1 = execute(pasteColsAfter, always, noop, structureModified);\n const pasteRowsBefore$1 = execute(pasteRowsBefore, always, noop, structureModified);\n const pasteRowsAfter$1 = execute(pasteRowsAfter, always, noop, structureModified);\n const pasteCells$1 = execute(pasteCells, always, noop, styleAndStructureModified);\n const makeCellsHeader$1 = execute(makeCellsHeader, always, noop, structureModified);\n const unmakeCellsHeader$1 = execute(unmakeCellsHeader, always, noop, structureModified);\n const makeColumnsHeader$1 = execute(makeColumnsHeader, always, noop, structureModified);\n const unmakeColumnsHeader$1 = execute(unmakeColumnsHeader, always, noop, structureModified);\n const makeRowsHeader$1 = execute(makeRowsHeader, always, noop, structureModified);\n const makeRowsBody$1 = execute(makeRowsBody, always, noop, structureModified);\n const makeRowsFooter$1 = execute(makeRowsFooter, always, noop, structureModified);\n const getTableCellType = getCellsType;\n const getTableColType = getColumnsType;\n const getTableRowType = getRowsType;\n return {\n deleteRow,\n deleteColumn,\n insertRowsBefore: insertRowsBefore$1,\n insertRowsAfter: insertRowsAfter$1,\n insertColumnsBefore: insertColumnsBefore$1,\n insertColumnsAfter: insertColumnsAfter$1,\n mergeCells: mergeCells$1,\n unmergeCells: unmergeCells$1,\n pasteColsBefore: pasteColsBefore$1,\n pasteColsAfter: pasteColsAfter$1,\n pasteRowsBefore: pasteRowsBefore$1,\n pasteRowsAfter: pasteRowsAfter$1,\n pasteCells: pasteCells$1,\n makeCellsHeader: makeCellsHeader$1,\n unmakeCellsHeader: unmakeCellsHeader$1,\n makeColumnsHeader: makeColumnsHeader$1,\n unmakeColumnsHeader: unmakeColumnsHeader$1,\n makeRowsHeader: makeRowsHeader$1,\n makeRowsBody: makeRowsBody$1,\n makeRowsFooter: makeRowsFooter$1,\n getTableRowType,\n getTableCellType,\n getTableColType\n };\n };\n\n const constrainSpan = (element, property, value) => {\n const currentColspan = getAttrValue(element, property, 1);\n if (value === 1 || currentColspan <= 1) {\n remove$7(element, property);\n } else {\n set$2(element, property, Math.min(value, currentColspan));\n }\n };\n const isColInRange = (minColRange, maxColRange) => cell => {\n const endCol = cell.column + cell.colspan - 1;\n const startCol = cell.column;\n return endCol >= minColRange && startCol < maxColRange;\n };\n const generateColGroup = (house, minColRange, maxColRange) => {\n if (Warehouse.hasColumns(house)) {\n const colsToCopy = filter$2(Warehouse.justColumns(house), isColInRange(minColRange, maxColRange));\n const copiedCols = map$1(colsToCopy, c => {\n const clonedCol = deep(c.element);\n constrainSpan(clonedCol, 'span', maxColRange - minColRange);\n return clonedCol;\n });\n const fakeColgroup = SugarElement.fromTag('colgroup');\n append(fakeColgroup, copiedCols);\n return [fakeColgroup];\n } else {\n return [];\n }\n };\n const generateRows = (house, minColRange, maxColRange) => map$1(house.all, row => {\n const cellsToCopy = filter$2(row.cells, isColInRange(minColRange, maxColRange));\n const copiedCells = map$1(cellsToCopy, cell => {\n const clonedCell = deep(cell.element);\n constrainSpan(clonedCell, 'colspan', maxColRange - minColRange);\n return clonedCell;\n });\n const fakeTR = SugarElement.fromTag('tr');\n append(fakeTR, copiedCells);\n return fakeTR;\n });\n const copyCols = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onUnlockedCells(house, target);\n return details.map(selectedCells => {\n const lastSelectedCell = selectedCells[selectedCells.length - 1];\n const minColRange = selectedCells[0].column;\n const maxColRange = lastSelectedCell.column + lastSelectedCell.colspan;\n const fakeColGroups = generateColGroup(house, minColRange, maxColRange);\n const fakeRows = generateRows(house, minColRange, maxColRange);\n return [\n ...fakeColGroups,\n ...fakeRows\n ];\n });\n };\n\n const copyRows = (table, target, generators) => {\n const warehouse = Warehouse.fromTable(table);\n const details = onCells(warehouse, target);\n return details.bind(selectedCells => {\n const grid = toGrid(warehouse, generators, false);\n const rows = extractGridDetails(grid).rows;\n const slicedGrid = rows.slice(selectedCells[0].row, selectedCells[selectedCells.length - 1].row + selectedCells[selectedCells.length - 1].rowspan);\n const filteredGrid = bind$2(slicedGrid, row => {\n const newCells = filter$2(row.cells, cell => !cell.isLocked);\n return newCells.length > 0 ? [{\n ...row,\n cells: newCells\n }] : [];\n });\n const slicedDetails = toDetailList(filteredGrid);\n return someIf(slicedDetails.length > 0, slicedDetails);\n }).map(slicedDetails => copy(slicedDetails));\n };\n\n const adt$5 = Adt.generate([\n { invalid: ['raw'] },\n { pixels: ['value'] },\n { percent: ['value'] }\n ]);\n const validateFor = (suffix, type, value) => {\n const rawAmount = value.substring(0, value.length - suffix.length);\n const amount = parseFloat(rawAmount);\n return rawAmount === amount.toString() ? type(amount) : adt$5.invalid(value);\n };\n const from = value => {\n if (endsWith(value, '%')) {\n return validateFor('%', adt$5.percent, value);\n }\n if (endsWith(value, 'px')) {\n return validateFor('px', adt$5.pixels, value);\n }\n return adt$5.invalid(value);\n };\n const Size = {\n ...adt$5,\n from\n };\n\n const redistributeToPercent = (widths, totalWidth) => {\n return map$1(widths, w => {\n const colType = Size.from(w);\n return colType.fold(() => {\n return w;\n }, px => {\n const ratio = px / totalWidth * 100;\n return ratio + '%';\n }, pc => {\n return pc + '%';\n });\n });\n };\n const redistributeToPx = (widths, totalWidth, newTotalWidth) => {\n const scale = newTotalWidth / totalWidth;\n return map$1(widths, w => {\n const colType = Size.from(w);\n return colType.fold(() => {\n return w;\n }, px => {\n return px * scale + 'px';\n }, pc => {\n return pc / 100 * newTotalWidth + 'px';\n });\n });\n };\n const redistributeEmpty = (newWidthType, columns) => {\n const f = newWidthType.fold(() => constant(''), pixels => {\n const num = pixels / columns;\n return constant(num + 'px');\n }, () => {\n const num = 100 / columns;\n return constant(num + '%');\n });\n return range$1(columns, f);\n };\n const redistributeValues = (newWidthType, widths, totalWidth) => {\n return newWidthType.fold(() => {\n return widths;\n }, px => {\n return redistributeToPx(widths, totalWidth, px);\n }, _pc => {\n return redistributeToPercent(widths, totalWidth);\n });\n };\n const redistribute$1 = (widths, totalWidth, newWidth) => {\n const newType = Size.from(newWidth);\n const floats = forall(widths, s => {\n return s === '0px';\n }) ? redistributeEmpty(newType, widths.length) : redistributeValues(newType, widths, totalWidth);\n return normalize(floats);\n };\n const sum = (values, fallback) => {\n if (values.length === 0) {\n return fallback;\n }\n return foldr(values, (rest, v) => {\n return Size.from(v).fold(constant(0), identity, identity) + rest;\n }, 0);\n };\n const roundDown = (num, unit) => {\n const floored = Math.floor(num);\n return {\n value: floored + unit,\n remainder: num - floored\n };\n };\n const add$3 = (value, amount) => {\n return Size.from(value).fold(constant(value), px => {\n return px + amount + 'px';\n }, pc => {\n return pc + amount + '%';\n });\n };\n const normalize = values => {\n if (values.length === 0) {\n return values;\n }\n const scan = foldr(values, (rest, value) => {\n const info = Size.from(value).fold(() => ({\n value,\n remainder: 0\n }), num => roundDown(num, 'px'), num => ({\n value: num + '%',\n remainder: 0\n }));\n return {\n output: [info.value].concat(rest.output),\n remainder: rest.remainder + info.remainder\n };\n }, {\n output: [],\n remainder: 0\n });\n const r = scan.output;\n return r.slice(0, r.length - 1).concat([add$3(r[r.length - 1], Math.round(scan.remainder))]);\n };\n const validate = Size.from;\n\n const redistributeToW = (newWidths, cells, unit) => {\n each$2(cells, cell => {\n const widths = newWidths.slice(cell.column, cell.colspan + cell.column);\n const w = sum(widths, minWidth());\n set$1(cell.element, 'width', w + unit);\n });\n };\n const redistributeToColumns = (newWidths, columns, unit) => {\n each$2(columns, (column, index) => {\n const width = sum([newWidths[index]], minWidth());\n set$1(column.element, 'width', width + unit);\n });\n };\n const redistributeToH = (newHeights, rows, cells) => {\n each$2(cells, cell => {\n remove$5(cell.element, 'height');\n });\n each$2(rows, (row, i) => {\n set$1(row.element, 'height', newHeights[i]);\n });\n };\n const getUnit = newSize => {\n return validate(newSize).fold(constant('px'), constant('px'), constant('%'));\n };\n const redistribute = (table, optWidth, optHeight) => {\n const warehouse = Warehouse.fromTable(table);\n const rows = warehouse.all;\n const cells = Warehouse.justCells(warehouse);\n const columns = Warehouse.justColumns(warehouse);\n optWidth.each(newWidth => {\n const widthUnit = getUnit(newWidth);\n const totalWidth = get$9(table);\n const oldWidths = getRawWidths(warehouse, table);\n const nuWidths = redistribute$1(oldWidths, totalWidth, newWidth);\n if (Warehouse.hasColumns(warehouse)) {\n redistributeToColumns(nuWidths, columns, widthUnit);\n } else {\n redistributeToW(nuWidths, cells, widthUnit);\n }\n set$1(table, 'width', newWidth);\n });\n optHeight.each(newHeight => {\n const totalHeight = get$8(table);\n const oldHeights = getRawHeights(warehouse, table);\n const nuHeights = redistribute$1(oldHeights, totalHeight, newHeight);\n redistributeToH(nuHeights, rows, cells);\n set$1(table, 'height', newHeight);\n });\n };\n const isPercentSizing = isPercentSizing$1;\n const isPixelSizing = isPixelSizing$1;\n const isNoneSizing = isNoneSizing$1;\n\n const cleanupLegacyAttributes = element => {\n remove$7(element, 'width');\n remove$7(element, 'height');\n };\n const convertToPercentSizeWidth = table => {\n const newWidth = getPercentTableWidth(table);\n redistribute(table, Optional.some(newWidth), Optional.none());\n cleanupLegacyAttributes(table);\n };\n const convertToPixelSizeWidth = table => {\n const newWidth = getPixelTableWidth(table);\n redistribute(table, Optional.some(newWidth), Optional.none());\n cleanupLegacyAttributes(table);\n };\n const convertToPixelSizeHeight = table => {\n const newHeight = getPixelTableHeight(table);\n redistribute(table, Optional.none(), Optional.some(newHeight));\n cleanupLegacyAttributes(table);\n };\n const convertToNoneSizeWidth = table => {\n remove$5(table, 'width');\n const columns = columns$1(table);\n const rowElements = columns.length > 0 ? columns : cells$1(table);\n each$2(rowElements, cell => {\n remove$5(cell, 'width');\n cleanupLegacyAttributes(cell);\n });\n cleanupLegacyAttributes(table);\n };\n\n const DefaultRenderOptions = {\n styles: {\n 'border-collapse': 'collapse',\n 'width': '100%'\n },\n attributes: { border: '1' },\n colGroups: false\n };\n const tableHeaderCell = () => SugarElement.fromTag('th');\n const tableCell = () => SugarElement.fromTag('td');\n const tableColumn = () => SugarElement.fromTag('col');\n const createRow = (columns, rowHeaders, columnHeaders, rowIndex) => {\n const tr = SugarElement.fromTag('tr');\n for (let j = 0; j < columns; j++) {\n const td = rowIndex < rowHeaders || j < columnHeaders ? tableHeaderCell() : tableCell();\n if (j < columnHeaders) {\n set$2(td, 'scope', 'row');\n }\n if (rowIndex < rowHeaders) {\n set$2(td, 'scope', 'col');\n }\n append$1(td, SugarElement.fromTag('br'));\n append$1(tr, td);\n }\n return tr;\n };\n const createGroupRow = columns => {\n const columnGroup = SugarElement.fromTag('colgroup');\n range$1(columns, () => append$1(columnGroup, tableColumn()));\n return columnGroup;\n };\n const createRows = (rows, columns, rowHeaders, columnHeaders) => range$1(rows, r => createRow(columns, rowHeaders, columnHeaders, r));\n const render = (rows, columns, rowHeaders, columnHeaders, headerType, renderOpts = DefaultRenderOptions) => {\n const table = SugarElement.fromTag('table');\n const rowHeadersGoInThead = headerType !== 'cells';\n setAll(table, renderOpts.styles);\n setAll$1(table, renderOpts.attributes);\n if (renderOpts.colGroups) {\n append$1(table, createGroupRow(columns));\n }\n const actualRowHeaders = Math.min(rows, rowHeaders);\n if (rowHeadersGoInThead && rowHeaders > 0) {\n const thead = SugarElement.fromTag('thead');\n append$1(table, thead);\n const theadRowHeaders = headerType === 'sectionCells' ? actualRowHeaders : 0;\n const theadRows = createRows(rowHeaders, columns, theadRowHeaders, columnHeaders);\n append(thead, theadRows);\n }\n const tbody = SugarElement.fromTag('tbody');\n append$1(table, tbody);\n const numRows = rowHeadersGoInThead ? rows - actualRowHeaders : rows;\n const numRowHeaders = rowHeadersGoInThead ? 0 : rowHeaders;\n const tbodyRows = createRows(numRows, columns, numRowHeaders, columnHeaders);\n append(tbody, tbodyRows);\n return table;\n };\n\n const get$4 = element => element.dom.innerHTML;\n const getOuter = element => {\n const container = SugarElement.fromTag('div');\n const clone = SugarElement.fromDom(element.dom.cloneNode(true));\n append$1(container, clone);\n return get$4(container);\n };\n\n const placeCaretInCell = (editor, cell) => {\n editor.selection.select(cell.dom, true);\n editor.selection.collapse(true);\n };\n const selectFirstCellInTable = (editor, tableElm) => {\n descendant(tableElm, 'td,th').each(curry(placeCaretInCell, editor));\n };\n const fireEvents = (editor, table) => {\n each$2(descendants(table, 'tr'), row => {\n fireNewRow(editor, row.dom);\n each$2(descendants(row, 'th,td'), cell => {\n fireNewCell(editor, cell.dom);\n });\n });\n };\n const isPercentage = width => isString(width) && width.indexOf('%') !== -1;\n const insert = (editor, columns, rows, colHeaders, rowHeaders) => {\n const defaultStyles = getTableDefaultStyles(editor);\n const options = {\n styles: defaultStyles,\n attributes: getTableDefaultAttributes(editor),\n colGroups: tableUseColumnGroup(editor)\n };\n editor.undoManager.ignore(() => {\n const table = render(rows, columns, rowHeaders, colHeaders, getTableHeaderType(editor), options);\n set$2(table, 'data-mce-id', '__mce');\n const html = getOuter(table);\n editor.insertContent(html);\n editor.addVisual();\n });\n return descendant(getBody(editor), 'table[data-mce-id=\"__mce\"]').map(table => {\n if (isTablePixelsForced(editor)) {\n convertToPixelSizeWidth(table);\n } else if (isTableResponsiveForced(editor)) {\n convertToNoneSizeWidth(table);\n } else if (isTablePercentagesForced(editor) || isPercentage(defaultStyles.width)) {\n convertToPercentSizeWidth(table);\n }\n removeDataStyle(table);\n remove$7(table, 'data-mce-id');\n fireEvents(editor, table);\n selectFirstCellInTable(editor, table);\n return table.dom;\n }).getOrNull();\n };\n const insertTable = (editor, rows, columns, options = {}) => {\n const checkInput = val => isNumber(val) && val > 0;\n if (checkInput(rows) && checkInput(columns)) {\n const headerRows = options.headerRows || 0;\n const headerColumns = options.headerColumns || 0;\n return insert(editor, columns, rows, headerColumns, headerRows);\n } else {\n console.error('Invalid values for mceInsertTable - rows and columns values are required to insert a table.');\n return null;\n }\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.FakeClipboard');\n\n const tableTypeBase = 'x-tinymce/dom-table-';\n const tableTypeRow = tableTypeBase + 'rows';\n const tableTypeColumn = tableTypeBase + 'columns';\n const setData = items => {\n const fakeClipboardItem = global.FakeClipboardItem(items);\n global.write([fakeClipboardItem]);\n };\n const getData = type => {\n var _a;\n const items = (_a = global.read()) !== null && _a !== void 0 ? _a : [];\n return findMap(items, item => Optional.from(item.getType(type)));\n };\n const clearData = type => {\n if (getData(type).isSome()) {\n global.clear();\n }\n };\n const setRows = rowsOpt => {\n rowsOpt.fold(clearRows, rows => setData({ [tableTypeRow]: rows }));\n };\n const getRows = () => getData(tableTypeRow);\n const clearRows = () => clearData(tableTypeRow);\n const setColumns = columnsOpt => {\n columnsOpt.fold(clearColumns, columns => setData({ [tableTypeColumn]: columns }));\n };\n const getColumns = () => getData(tableTypeColumn);\n const clearColumns = () => clearData(tableTypeColumn);\n\n const getSelectionStartCellOrCaption = editor => getSelectionCellOrCaption(getSelectionStart(editor), getIsRoot(editor)).filter(isInEditableContext$1);\n const getSelectionStartCell = editor => getSelectionCell(getSelectionStart(editor), getIsRoot(editor)).filter(isInEditableContext$1);\n const registerCommands = (editor, actions) => {\n const isRoot = getIsRoot(editor);\n const eraseTable = () => getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n table(cellOrCaption, isRoot).filter(not(isRoot)).each(table => {\n const cursor = SugarElement.fromText('');\n after$5(table, cursor);\n remove$6(table);\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n } else {\n const rng = editor.dom.createRng();\n rng.setStart(cursor.dom, 0);\n rng.setEnd(cursor.dom, 0);\n editor.selection.setRng(rng);\n editor.nodeChanged();\n }\n });\n });\n const setSizingMode = sizing => getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n const isForcedSizing = isTableResponsiveForced(editor) || isTablePixelsForced(editor) || isTablePercentagesForced(editor);\n if (!isForcedSizing) {\n table(cellOrCaption, isRoot).each(table => {\n if (sizing === 'relative' && !isPercentSizing(table)) {\n convertToPercentSizeWidth(table);\n } else if (sizing === 'fixed' && !isPixelSizing(table)) {\n convertToPixelSizeWidth(table);\n } else if (sizing === 'responsive' && !isNoneSizing(table)) {\n convertToNoneSizeWidth(table);\n }\n removeDataStyle(table);\n fireTableModified(editor, table.dom, structureModified);\n });\n }\n });\n const getTableFromCell = cell => table(cell, isRoot);\n const performActionOnSelection = action => getSelectionStartCell(editor).bind(cell => getTableFromCell(cell).map(table => action(table, cell)));\n const toggleTableClass = (_ui, clazz) => {\n performActionOnSelection(table => {\n editor.formatter.toggle('tableclass', { value: clazz }, table.dom);\n fireTableModified(editor, table.dom, styleModified);\n });\n };\n const toggleTableCellClass = (_ui, clazz) => {\n performActionOnSelection(table => {\n const selectedCells = getCellsFromSelection(editor);\n const allHaveClass = forall(selectedCells, cell => editor.formatter.match('tablecellclass', { value: clazz }, cell.dom));\n const formatterAction = allHaveClass ? editor.formatter.remove : editor.formatter.apply;\n each$2(selectedCells, cell => formatterAction('tablecellclass', { value: clazz }, cell.dom));\n fireTableModified(editor, table.dom, styleModified);\n });\n };\n const toggleCaption = () => {\n getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n table(cellOrCaption, isRoot).each(table => {\n child(table, 'caption').fold(() => {\n const caption = SugarElement.fromTag('caption');\n append$1(caption, SugarElement.fromText('Caption'));\n appendAt(table, caption, 0);\n editor.selection.setCursorLocation(caption.dom, 0);\n }, caption => {\n if (isTag('caption')(cellOrCaption)) {\n one('td', table).each(td => editor.selection.setCursorLocation(td.dom, 0));\n }\n remove$6(caption);\n });\n fireTableModified(editor, table.dom, structureModified);\n });\n });\n };\n const postExecute = _data => {\n editor.focus();\n };\n const actOnSelection = (execute, noEvents = false) => performActionOnSelection((table, startCell) => {\n const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n execute(table, targets, noEvents).each(postExecute);\n });\n const copyRowSelection = () => performActionOnSelection((table, startCell) => {\n const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n const generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), Optional.none());\n return copyRows(table, targets, generators);\n });\n const copyColSelection = () => performActionOnSelection((table, startCell) => {\n const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n return copyCols(table, targets);\n });\n const pasteOnSelection = (execute, getRows) => getRows().each(rows => {\n const clonedRows = map$1(rows, row => deep(row));\n performActionOnSelection((table, startCell) => {\n const generators = paste$1(SugarElement.fromDom(editor.getDoc()));\n const targets = pasteRows(getCellsFromSelection(editor), startCell, clonedRows, generators);\n execute(table, targets).each(postExecute);\n });\n });\n const actOnType = getAction => (_ui, args) => get$c(args, 'type').each(type => {\n actOnSelection(getAction(type), args.no_events);\n });\n each$1({\n mceTableSplitCells: () => actOnSelection(actions.unmergeCells),\n mceTableMergeCells: () => actOnSelection(actions.mergeCells),\n mceTableInsertRowBefore: () => actOnSelection(actions.insertRowsBefore),\n mceTableInsertRowAfter: () => actOnSelection(actions.insertRowsAfter),\n mceTableInsertColBefore: () => actOnSelection(actions.insertColumnsBefore),\n mceTableInsertColAfter: () => actOnSelection(actions.insertColumnsAfter),\n mceTableDeleteCol: () => actOnSelection(actions.deleteColumn),\n mceTableDeleteRow: () => actOnSelection(actions.deleteRow),\n mceTableCutCol: () => copyColSelection().each(selection => {\n setColumns(selection);\n actOnSelection(actions.deleteColumn);\n }),\n mceTableCutRow: () => copyRowSelection().each(selection => {\n setRows(selection);\n actOnSelection(actions.deleteRow);\n }),\n mceTableCopyCol: () => copyColSelection().each(selection => setColumns(selection)),\n mceTableCopyRow: () => copyRowSelection().each(selection => setRows(selection)),\n mceTablePasteColBefore: () => pasteOnSelection(actions.pasteColsBefore, getColumns),\n mceTablePasteColAfter: () => pasteOnSelection(actions.pasteColsAfter, getColumns),\n mceTablePasteRowBefore: () => pasteOnSelection(actions.pasteRowsBefore, getRows),\n mceTablePasteRowAfter: () => pasteOnSelection(actions.pasteRowsAfter, getRows),\n mceTableDelete: eraseTable,\n mceTableCellToggleClass: toggleTableCellClass,\n mceTableToggleClass: toggleTableClass,\n mceTableToggleCaption: toggleCaption,\n mceTableSizingMode: (_ui, sizing) => setSizingMode(sizing),\n mceTableCellType: actOnType(type => type === 'th' ? actions.makeCellsHeader : actions.unmakeCellsHeader),\n mceTableColType: actOnType(type => type === 'th' ? actions.makeColumnsHeader : actions.unmakeColumnsHeader),\n mceTableRowType: actOnType(type => {\n switch (type) {\n case 'header':\n return actions.makeRowsHeader;\n case 'footer':\n return actions.makeRowsFooter;\n default:\n return actions.makeRowsBody;\n }\n })\n }, (func, name) => editor.addCommand(name, func));\n editor.addCommand('mceInsertTable', (_ui, args) => {\n insertTable(editor, args.rows, args.columns, args.options);\n });\n editor.addCommand('mceTableApplyCellStyle', (_ui, args) => {\n const getFormatName = style => 'tablecell' + style.toLowerCase().replace('-', '');\n if (!isObject(args)) {\n return;\n }\n const cells = filter$2(getCellsFromSelection(editor), isInEditableContext$1);\n if (cells.length === 0) {\n return;\n }\n const validArgs = filter$1(args, (value, style) => editor.formatter.has(getFormatName(style)) && isString(value));\n if (isEmpty(validArgs)) {\n return;\n }\n each$1(validArgs, (value, style) => {\n const formatName = getFormatName(style);\n each$2(cells, cell => {\n if (value === '') {\n editor.formatter.remove(formatName, { value: null }, cell.dom, true);\n } else {\n editor.formatter.apply(formatName, { value }, cell.dom);\n }\n });\n });\n getTableFromCell(cells[0]).each(table => fireTableModified(editor, table.dom, styleModified));\n });\n };\n\n const registerQueryCommands = (editor, actions) => {\n const isRoot = getIsRoot(editor);\n const lookupOnSelection = action => getSelectionCell(getSelectionStart(editor)).bind(cell => table(cell, isRoot).map(table => {\n const targets = forMenu(getCellsFromSelection(editor), table, cell);\n return action(table, targets);\n })).getOr('');\n each$1({\n mceTableRowType: () => lookupOnSelection(actions.getTableRowType),\n mceTableCellType: () => lookupOnSelection(actions.getTableCellType),\n mceTableColType: () => lookupOnSelection(actions.getTableColType)\n }, (func, name) => editor.addQueryValueHandler(name, func));\n };\n\n const adt$4 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n const cata$1 = (subject, onBefore, onOn, onAfter) => subject.fold(onBefore, onOn, onAfter);\n const getStart$1 = situ => situ.fold(identity, identity, identity);\n const before$2 = adt$4.before;\n const on = adt$4.on;\n const after$3 = adt$4.after;\n const Situ = {\n before: before$2,\n on,\n after: after$3,\n cata: cata$1,\n getStart: getStart$1\n };\n\n const create$4 = (selection, kill) => ({\n selection,\n kill\n });\n const Response = { create: create$4 };\n\n const selectNode = (win, element) => {\n const rng = win.document.createRange();\n rng.selectNode(element.dom);\n return rng;\n };\n const selectNodeContents = (win, element) => {\n const rng = win.document.createRange();\n selectNodeContentsUsing(rng, element);\n return rng;\n };\n const selectNodeContentsUsing = (rng, element) => rng.selectNodeContents(element.dom);\n const setStart = (rng, situ) => {\n situ.fold(e => {\n rng.setStartBefore(e.dom);\n }, (e, o) => {\n rng.setStart(e.dom, o);\n }, e => {\n rng.setStartAfter(e.dom);\n });\n };\n const setFinish = (rng, situ) => {\n situ.fold(e => {\n rng.setEndBefore(e.dom);\n }, (e, o) => {\n rng.setEnd(e.dom, o);\n }, e => {\n rng.setEndAfter(e.dom);\n });\n };\n const relativeToNative = (win, startSitu, finishSitu) => {\n const range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n const exactToNative = (win, start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n const toRect = rect => ({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height\n });\n const getFirstRect$1 = rng => {\n const rects = rng.getClientRects();\n const rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n };\n\n const adt$3 = Adt.generate([\n {\n ltr: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n },\n {\n rtl: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const fromRange = (win, type, range) => type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset);\n const getRanges = (win, selection) => selection.match({\n domRange: rng => {\n return {\n ltr: constant(rng),\n rtl: Optional.none\n };\n },\n relative: (startSitu, finishSitu) => {\n return {\n ltr: cached(() => relativeToNative(win, startSitu, finishSitu)),\n rtl: cached(() => Optional.some(relativeToNative(win, finishSitu, startSitu)))\n };\n },\n exact: (start, soffset, finish, foffset) => {\n return {\n ltr: cached(() => exactToNative(win, start, soffset, finish, foffset)),\n rtl: cached(() => Optional.some(exactToNative(win, finish, foffset, start, soffset)))\n };\n }\n });\n const doDiagnose = (win, ranges) => {\n const rng = ranges.ltr();\n if (rng.collapsed) {\n const reversed = ranges.rtl().filter(rev => rev.collapsed === false);\n return reversed.map(rev => adt$3.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset)).getOrThunk(() => fromRange(win, adt$3.ltr, rng));\n } else {\n return fromRange(win, adt$3.ltr, rng);\n }\n };\n const diagnose = (win, selection) => {\n const ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n const asLtrRange = (win, selection) => {\n const diagnosis = diagnose(win, selection);\n return diagnosis.match({\n ltr: (start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n },\n rtl: (start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(finish.dom, foffset);\n rng.setEnd(start.dom, soffset);\n return rng;\n }\n });\n };\n adt$3.ltr;\n adt$3.rtl;\n\n const create$3 = (start, soffset, finish, foffset) => ({\n start,\n soffset,\n finish,\n foffset\n });\n const SimRange = { create: create$3 };\n\n const create$2 = (start, soffset, finish, foffset) => {\n return {\n start: Situ.on(start, soffset),\n finish: Situ.on(finish, foffset)\n };\n };\n const Situs = { create: create$2 };\n\n const convertToRange = (win, selection) => {\n const rng = asLtrRange(win, selection);\n return SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset);\n };\n const makeSitus = Situs.create;\n\n const sync = (container, isRoot, start, soffset, finish, foffset, selectRange) => {\n if (!(eq$1(start, finish) && soffset === foffset)) {\n return closest$1(start, 'td,th', isRoot).bind(s => {\n return closest$1(finish, 'td,th', isRoot).bind(f => {\n return detect(container, isRoot, s, f, selectRange);\n });\n });\n } else {\n return Optional.none();\n }\n };\n const detect = (container, isRoot, start, finish, selectRange) => {\n if (!eq$1(start, finish)) {\n return identify(start, finish, isRoot).bind(cellSel => {\n const boxes = cellSel.boxes.getOr([]);\n if (boxes.length > 1) {\n selectRange(container, boxes, cellSel.start, cellSel.finish);\n return Optional.some(Response.create(Optional.some(makeSitus(start, 0, start, getEnd(start))), true));\n } else {\n return Optional.none();\n }\n });\n } else {\n return Optional.none();\n }\n };\n const update = (rows, columns, container, selected, annotations) => {\n const updateSelection = newSels => {\n annotations.clearBeforeUpdate(container);\n annotations.selectRange(container, newSels.boxes, newSels.start, newSels.finish);\n return newSels.boxes;\n };\n return shiftSelection(selected, rows, columns, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(updateSelection);\n };\n\n const traverse = (item, mode) => ({\n item,\n mode\n });\n const backtrack = (universe, item, _direction, transition = sidestep) => {\n return universe.property().parent(item).map(p => {\n return traverse(p, transition);\n });\n };\n const sidestep = (universe, item, direction, transition = advance) => {\n return direction.sibling(universe, item).map(p => {\n return traverse(p, transition);\n });\n };\n const advance = (universe, item, direction, transition = advance) => {\n const children = universe.property().children(item);\n const result = direction.first(children);\n return result.map(r => {\n return traverse(r, transition);\n });\n };\n const successors = [\n {\n current: backtrack,\n next: sidestep,\n fallback: Optional.none()\n },\n {\n current: sidestep,\n next: advance,\n fallback: Optional.some(backtrack)\n },\n {\n current: advance,\n next: advance,\n fallback: Optional.some(sidestep)\n }\n ];\n const go = (universe, item, mode, direction, rules = successors) => {\n const ruleOpt = find$1(rules, succ => {\n return succ.current === mode;\n });\n return ruleOpt.bind(rule => {\n return rule.current(universe, item, direction, rule.next).orThunk(() => {\n return rule.fallback.bind(fb => {\n return go(universe, item, fb, direction);\n });\n });\n });\n };\n\n const left$1 = () => {\n const sibling = (universe, item) => {\n return universe.query().prevSibling(item);\n };\n const first = children => {\n return children.length > 0 ? Optional.some(children[children.length - 1]) : Optional.none();\n };\n return {\n sibling,\n first\n };\n };\n const right$1 = () => {\n const sibling = (universe, item) => {\n return universe.query().nextSibling(item);\n };\n const first = children => {\n return children.length > 0 ? Optional.some(children[0]) : Optional.none();\n };\n return {\n sibling,\n first\n };\n };\n const Walkers = {\n left: left$1,\n right: right$1\n };\n\n const hone = (universe, item, predicate, mode, direction, isRoot) => {\n const next = go(universe, item, mode, direction);\n return next.bind(n => {\n if (isRoot(n.item)) {\n return Optional.none();\n } else {\n return predicate(n.item) ? Optional.some(n.item) : hone(universe, n.item, predicate, n.mode, direction, isRoot);\n }\n });\n };\n const left = (universe, item, predicate, isRoot) => {\n return hone(universe, item, predicate, sidestep, Walkers.left(), isRoot);\n };\n const right = (universe, item, predicate, isRoot) => {\n return hone(universe, item, predicate, sidestep, Walkers.right(), isRoot);\n };\n\n const isLeaf = universe => element => universe.property().children(element).length === 0;\n const before$1 = (universe, item, isRoot) => {\n return seekLeft$1(universe, item, isLeaf(universe), isRoot);\n };\n const after$2 = (universe, item, isRoot) => {\n return seekRight$1(universe, item, isLeaf(universe), isRoot);\n };\n const seekLeft$1 = left;\n const seekRight$1 = right;\n\n const universe = DomUniverse();\n const before = (element, isRoot) => {\n return before$1(universe, element, isRoot);\n };\n const after$1 = (element, isRoot) => {\n return after$2(universe, element, isRoot);\n };\n const seekLeft = (element, predicate, isRoot) => {\n return seekLeft$1(universe, element, predicate, isRoot);\n };\n const seekRight = (element, predicate, isRoot) => {\n return seekRight$1(universe, element, predicate, isRoot);\n };\n\n const ancestor = (scope, predicate, isRoot) => ancestor$2(scope, predicate, isRoot).isSome();\n\n const adt$2 = Adt.generate([\n { none: ['message'] },\n { success: [] },\n { failedUp: ['cell'] },\n { failedDown: ['cell'] }\n ]);\n const isOverlapping = (bridge, before, after) => {\n const beforeBounds = bridge.getRect(before);\n const afterBounds = bridge.getRect(after);\n return afterBounds.right > beforeBounds.left && afterBounds.left < beforeBounds.right;\n };\n const isRow = elem => {\n return closest$1(elem, 'tr');\n };\n const verify = (bridge, before, beforeOffset, after, afterOffset, failure, isRoot) => {\n return closest$1(after, 'td,th', isRoot).bind(afterCell => {\n return closest$1(before, 'td,th', isRoot).map(beforeCell => {\n if (!eq$1(afterCell, beforeCell)) {\n return sharedOne(isRow, [\n afterCell,\n beforeCell\n ]).fold(() => {\n return isOverlapping(bridge, beforeCell, afterCell) ? adt$2.success() : failure(beforeCell);\n }, _sharedRow => {\n return failure(beforeCell);\n });\n } else {\n return eq$1(after, afterCell) && getEnd(afterCell) === afterOffset ? failure(beforeCell) : adt$2.none('in same cell');\n }\n });\n }).getOr(adt$2.none('default'));\n };\n const cata = (subject, onNone, onSuccess, onFailedUp, onFailedDown) => {\n return subject.fold(onNone, onSuccess, onFailedUp, onFailedDown);\n };\n const BeforeAfter = {\n ...adt$2,\n verify,\n cata\n };\n\n const inParent = (parent, children, element, index) => ({\n parent,\n children,\n element,\n index\n });\n const indexInParent = element => parent(element).bind(parent => {\n const children = children$2(parent);\n return indexOf(children, element).map(index => inParent(parent, children, element, index));\n });\n const indexOf = (elements, element) => findIndex(elements, curry(eq$1, element));\n\n const isBr = isTag('br');\n const gatherer = (cand, gather, isRoot) => {\n return gather(cand, isRoot).bind(target => {\n return isText(target) && get$6(target).trim().length === 0 ? gatherer(target, gather, isRoot) : Optional.some(target);\n });\n };\n const handleBr = (isRoot, element, direction) => {\n return direction.traverse(element).orThunk(() => {\n return gatherer(element, direction.gather, isRoot);\n }).map(direction.relative);\n };\n const findBr = (element, offset) => {\n return child$2(element, offset).filter(isBr).orThunk(() => {\n return child$2(element, offset - 1).filter(isBr);\n });\n };\n const handleParent = (isRoot, element, offset, direction) => {\n return findBr(element, offset).bind(br => {\n return direction.traverse(br).fold(() => {\n return gatherer(br, direction.gather, isRoot).map(direction.relative);\n }, adjacent => {\n return indexInParent(adjacent).map(info => {\n return Situ.on(info.parent, info.index);\n });\n });\n });\n };\n const tryBr = (isRoot, element, offset, direction) => {\n const target = isBr(element) ? handleBr(isRoot, element, direction) : handleParent(isRoot, element, offset, direction);\n return target.map(tgt => {\n return {\n start: tgt,\n finish: tgt\n };\n });\n };\n const process = analysis => {\n return BeforeAfter.cata(analysis, _message => {\n return Optional.none();\n }, () => {\n return Optional.none();\n }, cell => {\n return Optional.some(point(cell, 0));\n }, cell => {\n return Optional.some(point(cell, getEnd(cell)));\n });\n };\n\n const moveDown = (caret, amount) => {\n return {\n left: caret.left,\n top: caret.top + amount,\n right: caret.right,\n bottom: caret.bottom + amount\n };\n };\n const moveUp = (caret, amount) => {\n return {\n left: caret.left,\n top: caret.top - amount,\n right: caret.right,\n bottom: caret.bottom - amount\n };\n };\n const translate = (caret, xDelta, yDelta) => {\n return {\n left: caret.left + xDelta,\n top: caret.top + yDelta,\n right: caret.right + xDelta,\n bottom: caret.bottom + yDelta\n };\n };\n const getTop = caret => {\n return caret.top;\n };\n const getBottom = caret => {\n return caret.bottom;\n };\n\n const getPartialBox = (bridge, element, offset) => {\n if (offset >= 0 && offset < getEnd(element)) {\n return bridge.getRangedRect(element, offset, element, offset + 1);\n } else if (offset > 0) {\n return bridge.getRangedRect(element, offset - 1, element, offset);\n }\n return Optional.none();\n };\n const toCaret = rect => ({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom\n });\n const getElemBox = (bridge, element) => {\n return Optional.some(bridge.getRect(element));\n };\n const getBoxAt = (bridge, element, offset) => {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return getPartialBox(bridge, element, offset).map(toCaret);\n } else {\n return Optional.none();\n }\n };\n const getEntireBox = (bridge, element) => {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return bridge.getRangedRect(element, 0, element, getEnd(element)).map(toCaret);\n } else {\n return Optional.none();\n }\n };\n\n const JUMP_SIZE = 5;\n const NUM_RETRIES = 100;\n const adt$1 = Adt.generate([\n { none: [] },\n { retry: ['caret'] }\n ]);\n const isOutside = (caret, box) => {\n return caret.left < box.left || Math.abs(box.right - caret.left) < 1 || caret.left > box.right;\n };\n const inOutsideBlock = (bridge, element, caret) => {\n return closest$2(element, isBlock).fold(never, cell => {\n return getEntireBox(bridge, cell).exists(box => {\n return isOutside(caret, box);\n });\n });\n };\n const adjustDown = (bridge, element, guessBox, original, caret) => {\n const lowerCaret = moveDown(caret, JUMP_SIZE);\n if (Math.abs(guessBox.bottom - original.bottom) < 1) {\n return adt$1.retry(lowerCaret);\n } else if (guessBox.top > caret.bottom) {\n return adt$1.retry(lowerCaret);\n } else if (guessBox.top === caret.bottom) {\n return adt$1.retry(moveDown(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$1.retry(translate(lowerCaret, JUMP_SIZE, 0)) : adt$1.none();\n }\n };\n const adjustUp = (bridge, element, guessBox, original, caret) => {\n const higherCaret = moveUp(caret, JUMP_SIZE);\n if (Math.abs(guessBox.top - original.top) < 1) {\n return adt$1.retry(higherCaret);\n } else if (guessBox.bottom < caret.top) {\n return adt$1.retry(higherCaret);\n } else if (guessBox.bottom === caret.top) {\n return adt$1.retry(moveUp(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$1.retry(translate(higherCaret, JUMP_SIZE, 0)) : adt$1.none();\n }\n };\n const upMovement = {\n point: getTop,\n adjuster: adjustUp,\n move: moveUp,\n gather: before\n };\n const downMovement = {\n point: getBottom,\n adjuster: adjustDown,\n move: moveDown,\n gather: after$1\n };\n const isAtTable = (bridge, x, y) => {\n return bridge.elementFromPoint(x, y).filter(elm => {\n return name(elm) === 'table';\n }).isSome();\n };\n const adjustForTable = (bridge, movement, original, caret, numRetries) => {\n return adjustTil(bridge, movement, original, movement.move(caret, JUMP_SIZE), numRetries);\n };\n const adjustTil = (bridge, movement, original, caret, numRetries) => {\n if (numRetries === 0) {\n return Optional.some(caret);\n }\n if (isAtTable(bridge, caret.left, movement.point(caret))) {\n return adjustForTable(bridge, movement, original, caret, numRetries - 1);\n }\n return bridge.situsFromPoint(caret.left, movement.point(caret)).bind(guess => {\n return guess.start.fold(Optional.none, element => {\n return getEntireBox(bridge, element).bind(guessBox => {\n return movement.adjuster(bridge, element, guessBox, original, caret).fold(Optional.none, newCaret => {\n return adjustTil(bridge, movement, original, newCaret, numRetries - 1);\n });\n }).orThunk(() => {\n return Optional.some(caret);\n });\n }, Optional.none);\n });\n };\n const checkScroll = (movement, adjusted, bridge) => {\n if (movement.point(adjusted) > bridge.getInnerHeight()) {\n return Optional.some(movement.point(adjusted) - bridge.getInnerHeight());\n } else if (movement.point(adjusted) < 0) {\n return Optional.some(-movement.point(adjusted));\n } else {\n return Optional.none();\n }\n };\n const retry = (movement, bridge, caret) => {\n const moved = movement.move(caret, JUMP_SIZE);\n const adjusted = adjustTil(bridge, movement, caret, moved, NUM_RETRIES).getOr(moved);\n return checkScroll(movement, adjusted, bridge).fold(() => {\n return bridge.situsFromPoint(adjusted.left, movement.point(adjusted));\n }, delta => {\n bridge.scrollBy(0, delta);\n return bridge.situsFromPoint(adjusted.left, movement.point(adjusted) - delta);\n });\n };\n const Retries = {\n tryUp: curry(retry, upMovement),\n tryDown: curry(retry, downMovement),\n getJumpSize: constant(JUMP_SIZE)\n };\n\n const MAX_RETRIES = 20;\n const findSpot = (bridge, isRoot, direction) => {\n return bridge.getSelection().bind(sel => {\n return tryBr(isRoot, sel.finish, sel.foffset, direction).fold(() => {\n return Optional.some(point(sel.finish, sel.foffset));\n }, brNeighbour => {\n const range = bridge.fromSitus(brNeighbour);\n const analysis = BeforeAfter.verify(bridge, sel.finish, sel.foffset, range.finish, range.foffset, direction.failure, isRoot);\n return process(analysis);\n });\n });\n };\n const scan = (bridge, isRoot, element, offset, direction, numRetries) => {\n if (numRetries === 0) {\n return Optional.none();\n }\n return tryCursor(bridge, isRoot, element, offset, direction).bind(situs => {\n const range = bridge.fromSitus(situs);\n const analysis = BeforeAfter.verify(bridge, element, offset, range.finish, range.foffset, direction.failure, isRoot);\n return BeforeAfter.cata(analysis, () => {\n return Optional.none();\n }, () => {\n return Optional.some(situs);\n }, cell => {\n if (eq$1(element, cell) && offset === 0) {\n return tryAgain(bridge, element, offset, moveUp, direction);\n } else {\n return scan(bridge, isRoot, cell, 0, direction, numRetries - 1);\n }\n }, cell => {\n if (eq$1(element, cell) && offset === getEnd(cell)) {\n return tryAgain(bridge, element, offset, moveDown, direction);\n } else {\n return scan(bridge, isRoot, cell, getEnd(cell), direction, numRetries - 1);\n }\n });\n });\n };\n const tryAgain = (bridge, element, offset, move, direction) => {\n return getBoxAt(bridge, element, offset).bind(box => {\n return tryAt(bridge, direction, move(box, Retries.getJumpSize()));\n });\n };\n const tryAt = (bridge, direction, box) => {\n const browser = detect$2().browser;\n if (browser.isChromium() || browser.isSafari() || browser.isFirefox()) {\n return direction.retry(bridge, box);\n } else {\n return Optional.none();\n }\n };\n const tryCursor = (bridge, isRoot, element, offset, direction) => {\n return getBoxAt(bridge, element, offset).bind(box => {\n return tryAt(bridge, direction, box);\n });\n };\n const handle$1 = (bridge, isRoot, direction) => {\n return findSpot(bridge, isRoot, direction).bind(spot => {\n return scan(bridge, isRoot, spot.element, spot.offset, direction, MAX_RETRIES).map(bridge.fromSitus);\n });\n };\n\n const inSameTable = (elem, table) => {\n return ancestor(elem, e => {\n return parent(e).exists(p => {\n return eq$1(p, table);\n });\n });\n };\n const simulate = (bridge, isRoot, direction, initial, anchor) => {\n return closest$1(initial, 'td,th', isRoot).bind(start => {\n return closest$1(start, 'table', isRoot).bind(table => {\n if (!inSameTable(anchor, table)) {\n return Optional.none();\n }\n return handle$1(bridge, isRoot, direction).bind(range => {\n return closest$1(range.finish, 'td,th', isRoot).map(finish => {\n return {\n start,\n finish,\n range\n };\n });\n });\n });\n });\n };\n const navigate = (bridge, isRoot, direction, initial, anchor, precheck) => {\n return precheck(initial, isRoot).orThunk(() => {\n return simulate(bridge, isRoot, direction, initial, anchor).map(info => {\n const range = info.range;\n return Response.create(Optional.some(makeSitus(range.start, range.soffset, range.finish, range.foffset)), true);\n });\n });\n };\n const firstUpCheck = (initial, isRoot) => {\n return closest$1(initial, 'tr', isRoot).bind(startRow => {\n return closest$1(startRow, 'table', isRoot).bind(table => {\n const rows = descendants(table, 'tr');\n if (eq$1(startRow, rows[0])) {\n return seekLeft(table, element => {\n return last$1(element).isSome();\n }, isRoot).map(last => {\n const lastOffset = getEnd(last);\n return Response.create(Optional.some(makeSitus(last, lastOffset, last, lastOffset)), true);\n });\n } else {\n return Optional.none();\n }\n });\n });\n };\n const lastDownCheck = (initial, isRoot) => {\n return closest$1(initial, 'tr', isRoot).bind(startRow => {\n return closest$1(startRow, 'table', isRoot).bind(table => {\n const rows = descendants(table, 'tr');\n if (eq$1(startRow, rows[rows.length - 1])) {\n return seekRight(table, element => {\n return first(element).isSome();\n }, isRoot).map(first => {\n return Response.create(Optional.some(makeSitus(first, 0, first, 0)), true);\n });\n } else {\n return Optional.none();\n }\n });\n });\n };\n const select = (bridge, container, isRoot, direction, initial, anchor, selectRange) => {\n return simulate(bridge, isRoot, direction, initial, anchor).bind(info => {\n return detect(container, isRoot, info.start, info.finish, selectRange);\n });\n };\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n const singleton = doRevoke => {\n const subject = Cell(Optional.none());\n const revoke = () => subject.get().each(doRevoke);\n const clear = () => {\n revoke();\n subject.set(Optional.none());\n };\n const isSet = () => subject.get().isSome();\n const get = () => subject.get();\n const set = s => {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear,\n isSet,\n get,\n set\n };\n };\n const value = () => {\n const subject = singleton(noop);\n const on = f => subject.get().each(f);\n return {\n ...subject,\n on\n };\n };\n\n const findCell = (target, isRoot) => closest$1(target, 'td,th', isRoot);\n const isInEditableContext = cell => parentElement(cell).exists(isEditable$1);\n const MouseSelection = (bridge, container, isRoot, annotations) => {\n const cursor = value();\n const clearstate = cursor.clear;\n const applySelection = event => {\n cursor.on(start => {\n annotations.clearBeforeUpdate(container);\n findCell(event.target, isRoot).each(finish => {\n identify(start, finish, isRoot).each(cellSel => {\n const boxes = cellSel.boxes.getOr([]);\n if (boxes.length === 1) {\n const singleCell = boxes[0];\n const isNonEditableCell = getRaw(singleCell) === 'false';\n const isCellClosestContentEditable = is(closest(event.target), singleCell, eq$1);\n if (isNonEditableCell && isCellClosestContentEditable) {\n annotations.selectRange(container, boxes, singleCell, singleCell);\n }\n } else if (boxes.length > 1) {\n annotations.selectRange(container, boxes, cellSel.start, cellSel.finish);\n bridge.selectContents(finish);\n }\n });\n });\n });\n };\n const mousedown = event => {\n annotations.clear(container);\n findCell(event.target, isRoot).filter(isInEditableContext).each(cursor.set);\n };\n const mouseover = event => {\n applySelection(event);\n };\n const mouseup = event => {\n applySelection(event);\n clearstate();\n };\n return {\n clearstate,\n mousedown,\n mouseover,\n mouseup\n };\n };\n\n const down = {\n traverse: nextSibling,\n gather: after$1,\n relative: Situ.before,\n retry: Retries.tryDown,\n failure: BeforeAfter.failedDown\n };\n const up = {\n traverse: prevSibling,\n gather: before,\n relative: Situ.before,\n retry: Retries.tryUp,\n failure: BeforeAfter.failedUp\n };\n\n const isKey = key => {\n return keycode => {\n return keycode === key;\n };\n };\n const isUp = isKey(38);\n const isDown = isKey(40);\n const isNavigation = keycode => {\n return keycode >= 37 && keycode <= 40;\n };\n const ltr = {\n isBackward: isKey(37),\n isForward: isKey(39)\n };\n const rtl = {\n isBackward: isKey(39),\n isForward: isKey(37)\n };\n\n const get$3 = _DOC => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n const y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return SugarPosition(x, y);\n };\n const by = (x, y, _DOC) => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const win = doc.defaultView;\n if (win) {\n win.scrollBy(x, y);\n }\n };\n\n const adt = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const exactFromRange = simRange => adt.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n const getStart = selection => selection.match({\n domRange: rng => SugarElement.fromDom(rng.startContainer),\n relative: (startSitu, _finishSitu) => Situ.getStart(startSitu),\n exact: (start, _soffset, _finish, _foffset) => start\n });\n const domRange = adt.domRange;\n const relative = adt.relative;\n const exact = adt.exact;\n const getWin = selection => {\n const start = getStart(selection);\n return defaultView(start);\n };\n const range = SimRange.create;\n const SimSelection = {\n domRange,\n relative,\n exact,\n exactFromRange,\n getWin,\n range\n };\n\n const caretPositionFromPoint = (doc, x, y) => {\n var _a;\n return Optional.from((_a = doc.caretPositionFromPoint) === null || _a === void 0 ? void 0 : _a.call(doc, x, y)).bind(pos => {\n if (pos.offsetNode === null) {\n return Optional.none();\n }\n const r = doc.createRange();\n r.setStart(pos.offsetNode, pos.offset);\n r.collapse();\n return Optional.some(r);\n });\n };\n const caretRangeFromPoint = (doc, x, y) => {\n var _a;\n return Optional.from((_a = doc.caretRangeFromPoint) === null || _a === void 0 ? void 0 : _a.call(doc, x, y));\n };\n const availableSearch = (doc, x, y) => {\n if (doc.caretPositionFromPoint) {\n return caretPositionFromPoint(doc, x, y);\n } else if (doc.caretRangeFromPoint) {\n return caretRangeFromPoint(doc, x, y);\n } else {\n return Optional.none();\n }\n };\n const fromPoint = (win, x, y) => {\n const doc = win.document;\n return availableSearch(doc, x, y).map(rng => SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n };\n\n const beforeSpecial = (element, offset) => {\n const name$1 = name(element);\n if ('input' === name$1) {\n return Situ.after(element);\n } else if (!contains$2([\n 'br',\n 'img'\n ], name$1)) {\n return Situ.on(element, offset);\n } else {\n return offset === 0 ? Situ.before(element) : Situ.after(element);\n }\n };\n const preprocessRelative = (startSitu, finishSitu) => {\n const start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\n const finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\n return SimSelection.relative(start, finish);\n };\n const preprocessExact = (start, soffset, finish, foffset) => {\n const startSitu = beforeSpecial(start, soffset);\n const finishSitu = beforeSpecial(finish, foffset);\n return SimSelection.relative(startSitu, finishSitu);\n };\n\n const makeRange = (start, soffset, finish, foffset) => {\n const doc = owner(start);\n const rng = doc.dom.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n const after = (start, soffset, finish, foffset) => {\n const r = makeRange(start, soffset, finish, foffset);\n const same = eq$1(start, finish) && soffset === foffset;\n return r.collapsed && !same;\n };\n\n const getNativeSelection = win => Optional.from(win.getSelection());\n const doSetNativeRange = (win, rng) => {\n getNativeSelection(win).each(selection => {\n selection.removeAllRanges();\n selection.addRange(rng);\n });\n };\n const doSetRange = (win, start, soffset, finish, foffset) => {\n const rng = exactToNative(win, start, soffset, finish, foffset);\n doSetNativeRange(win, rng);\n };\n const setLegacyRtlRange = (win, selection, start, soffset, finish, foffset) => {\n selection.collapse(start.dom, soffset);\n selection.extend(finish.dom, foffset);\n };\n const setRangeFromRelative = (win, relative) => diagnose(win, relative).match({\n ltr: (start, soffset, finish, foffset) => {\n doSetRange(win, start, soffset, finish, foffset);\n },\n rtl: (start, soffset, finish, foffset) => {\n getNativeSelection(win).each(selection => {\n if (selection.setBaseAndExtent) {\n selection.setBaseAndExtent(start.dom, soffset, finish.dom, foffset);\n } else if (selection.extend) {\n try {\n setLegacyRtlRange(win, selection, start, soffset, finish, foffset);\n } catch (_a) {\n doSetRange(win, finish, foffset, start, soffset);\n }\n } else {\n doSetRange(win, finish, foffset, start, soffset);\n }\n });\n }\n });\n const setExact = (win, start, soffset, finish, foffset) => {\n const relative = preprocessExact(start, soffset, finish, foffset);\n setRangeFromRelative(win, relative);\n };\n const setRelative = (win, startSitu, finishSitu) => {\n const relative = preprocessRelative(startSitu, finishSitu);\n setRangeFromRelative(win, relative);\n };\n const readRange = selection => {\n if (selection.rangeCount > 0) {\n const firstRng = selection.getRangeAt(0);\n const lastRng = selection.getRangeAt(selection.rangeCount - 1);\n return Optional.some(SimRange.create(SugarElement.fromDom(firstRng.startContainer), firstRng.startOffset, SugarElement.fromDom(lastRng.endContainer), lastRng.endOffset));\n } else {\n return Optional.none();\n }\n };\n const doGetExact = selection => {\n if (selection.anchorNode === null || selection.focusNode === null) {\n return readRange(selection);\n } else {\n const anchor = SugarElement.fromDom(selection.anchorNode);\n const focus = SugarElement.fromDom(selection.focusNode);\n return after(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Optional.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);\n }\n };\n const setToElement = (win, element, selectNodeContents$1 = true) => {\n const rngGetter = selectNodeContents$1 ? selectNodeContents : selectNode;\n const rng = rngGetter(win, element);\n doSetNativeRange(win, rng);\n };\n const getExact = win => getNativeSelection(win).filter(sel => sel.rangeCount > 0).bind(doGetExact);\n const get$2 = win => getExact(win).map(range => SimSelection.exact(range.start, range.soffset, range.finish, range.foffset));\n const getFirstRect = (win, selection) => {\n const rng = asLtrRange(win, selection);\n return getFirstRect$1(rng);\n };\n const getAtPoint = (win, x, y) => fromPoint(win, x, y);\n const clear = win => {\n getNativeSelection(win).each(selection => selection.removeAllRanges());\n };\n\n const WindowBridge = win => {\n const elementFromPoint = (x, y) => {\n return SugarElement.fromPoint(SugarElement.fromDom(win.document), x, y);\n };\n const getRect = element => {\n return element.dom.getBoundingClientRect();\n };\n const getRangedRect = (start, soffset, finish, foffset) => {\n const sel = SimSelection.exact(start, soffset, finish, foffset);\n return getFirstRect(win, sel);\n };\n const getSelection = () => {\n return get$2(win).map(exactAdt => {\n return convertToRange(win, exactAdt);\n });\n };\n const fromSitus = situs => {\n const relative = SimSelection.relative(situs.start, situs.finish);\n return convertToRange(win, relative);\n };\n const situsFromPoint = (x, y) => {\n return getAtPoint(win, x, y).map(exact => {\n return Situs.create(exact.start, exact.soffset, exact.finish, exact.foffset);\n });\n };\n const clearSelection = () => {\n clear(win);\n };\n const collapseSelection = (toStart = false) => {\n get$2(win).each(sel => sel.fold(rng => rng.collapse(toStart), (startSitu, finishSitu) => {\n const situ = toStart ? startSitu : finishSitu;\n setRelative(win, situ, situ);\n }, (start, soffset, finish, foffset) => {\n const node = toStart ? start : finish;\n const offset = toStart ? soffset : foffset;\n setExact(win, node, offset, node, offset);\n }));\n };\n const selectNode = element => {\n setToElement(win, element, false);\n };\n const selectContents = element => {\n setToElement(win, element);\n };\n const setSelection = sel => {\n setExact(win, sel.start, sel.soffset, sel.finish, sel.foffset);\n };\n const setRelativeSelection = (start, finish) => {\n setRelative(win, start, finish);\n };\n const getInnerHeight = () => {\n return win.innerHeight;\n };\n const getScrollY = () => {\n const pos = get$3(SugarElement.fromDom(win.document));\n return pos.top;\n };\n const scrollBy = (x, y) => {\n by(x, y, SugarElement.fromDom(win.document));\n };\n return {\n elementFromPoint,\n getRect,\n getRangedRect,\n getSelection,\n fromSitus,\n situsFromPoint,\n clearSelection,\n collapseSelection,\n setSelection,\n setRelativeSelection,\n selectNode,\n selectContents,\n getInnerHeight,\n getScrollY,\n scrollBy\n };\n };\n\n const rc = (rows, cols) => ({\n rows,\n cols\n });\n const mouse = (win, container, isRoot, annotations) => {\n const bridge = WindowBridge(win);\n const handlers = MouseSelection(bridge, container, isRoot, annotations);\n return {\n clearstate: handlers.clearstate,\n mousedown: handlers.mousedown,\n mouseover: handlers.mouseover,\n mouseup: handlers.mouseup\n };\n };\n const isEditableNode = node => closest$2(node, isHTMLElement).exists(isEditable$1);\n const isEditableSelection = (start, finish) => isEditableNode(start) || isEditableNode(finish);\n const keyboard = (win, container, isRoot, annotations) => {\n const bridge = WindowBridge(win);\n const clearToNavigate = () => {\n annotations.clear(container);\n return Optional.none();\n };\n const keydown = (event, start, soffset, finish, foffset, direction) => {\n const realEvent = event.raw;\n const keycode = realEvent.which;\n const shiftKey = realEvent.shiftKey === true;\n const handler = retrieve$1(container, annotations.selectedSelector).fold(() => {\n if (isNavigation(keycode) && !shiftKey) {\n annotations.clearBeforeUpdate(container);\n }\n if (isNavigation(keycode) && shiftKey && !isEditableSelection(start, finish)) {\n return Optional.none;\n } else if (isDown(keycode) && shiftKey) {\n return curry(select, bridge, container, isRoot, down, finish, start, annotations.selectRange);\n } else if (isUp(keycode) && shiftKey) {\n return curry(select, bridge, container, isRoot, up, finish, start, annotations.selectRange);\n } else if (isDown(keycode)) {\n return curry(navigate, bridge, isRoot, down, finish, start, lastDownCheck);\n } else if (isUp(keycode)) {\n return curry(navigate, bridge, isRoot, up, finish, start, firstUpCheck);\n } else {\n return Optional.none;\n }\n }, selected => {\n const update$1 = attempts => {\n return () => {\n const navigation = findMap(attempts, delta => {\n return update(delta.rows, delta.cols, container, selected, annotations);\n });\n return navigation.fold(() => {\n return getEdges(container, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(edges => {\n const relative = isDown(keycode) || direction.isForward(keycode) ? Situ.after : Situ.before;\n bridge.setRelativeSelection(Situ.on(edges.first, 0), relative(edges.table));\n annotations.clear(container);\n return Response.create(Optional.none(), true);\n });\n }, _ => {\n return Optional.some(Response.create(Optional.none(), true));\n });\n };\n };\n if (isNavigation(keycode) && shiftKey && !isEditableSelection(start, finish)) {\n return Optional.none;\n } else if (isDown(keycode) && shiftKey) {\n return update$1([rc(+1, 0)]);\n } else if (isUp(keycode) && shiftKey) {\n return update$1([rc(-1, 0)]);\n } else if (direction.isBackward(keycode) && shiftKey) {\n return update$1([\n rc(0, -1),\n rc(-1, 0)\n ]);\n } else if (direction.isForward(keycode) && shiftKey) {\n return update$1([\n rc(0, +1),\n rc(+1, 0)\n ]);\n } else if (isNavigation(keycode) && !shiftKey) {\n return clearToNavigate;\n } else {\n return Optional.none;\n }\n });\n return handler();\n };\n const keyup = (event, start, soffset, finish, foffset) => {\n return retrieve$1(container, annotations.selectedSelector).fold(() => {\n const realEvent = event.raw;\n const keycode = realEvent.which;\n const shiftKey = realEvent.shiftKey === true;\n if (!shiftKey) {\n return Optional.none();\n }\n if (isNavigation(keycode) && isEditableSelection(start, finish)) {\n return sync(container, isRoot, start, soffset, finish, foffset, annotations.selectRange);\n } else {\n return Optional.none();\n }\n }, Optional.none);\n };\n return {\n keydown,\n keyup\n };\n };\n const external = (win, container, isRoot, annotations) => {\n const bridge = WindowBridge(win);\n return (start, finish) => {\n annotations.clearBeforeUpdate(container);\n identify(start, finish, isRoot).each(cellSel => {\n const boxes = cellSel.boxes.getOr([]);\n annotations.selectRange(container, boxes, cellSel.start, cellSel.finish);\n bridge.selectContents(finish);\n bridge.collapseSelection();\n });\n };\n };\n\n const read = (element, attr) => {\n const value = get$b(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n const add$2 = (element, attr, id) => {\n const old = read(element, attr);\n const nu = old.concat([id]);\n set$2(element, attr, nu.join(' '));\n return true;\n };\n const remove$4 = (element, attr, id) => {\n const nu = filter$2(read(element, attr), v => v !== id);\n if (nu.length > 0) {\n set$2(element, attr, nu.join(' '));\n } else {\n remove$7(element, attr);\n }\n return false;\n };\n\n const supports = element => element.dom.classList !== undefined;\n const get$1 = element => read(element, 'class');\n const add$1 = (element, clazz) => add$2(element, 'class', clazz);\n const remove$3 = (element, clazz) => remove$4(element, 'class', clazz);\n\n const add = (element, clazz) => {\n if (supports(element)) {\n element.dom.classList.add(clazz);\n } else {\n add$1(element, clazz);\n }\n };\n const cleanClass = element => {\n const classList = supports(element) ? element.dom.classList : get$1(element);\n if (classList.length === 0) {\n remove$7(element, 'class');\n }\n };\n const remove$2 = (element, clazz) => {\n if (supports(element)) {\n const classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$3(element, clazz);\n }\n cleanClass(element);\n };\n const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n\n const remove$1 = (element, classes) => {\n each$2(classes, x => {\n remove$2(element, x);\n });\n };\n\n const addClass = clazz => element => {\n add(element, clazz);\n };\n const removeClasses = classes => element => {\n remove$1(element, classes);\n };\n\n const byClass = ephemera => {\n const addSelectionClass = addClass(ephemera.selected);\n const removeSelectionClasses = removeClasses([\n ephemera.selected,\n ephemera.lastSelected,\n ephemera.firstSelected\n ]);\n const clear = container => {\n const sels = descendants(container, ephemera.selectedSelector);\n each$2(sels, removeSelectionClasses);\n };\n const selectRange = (container, cells, start, finish) => {\n clear(container);\n each$2(cells, addSelectionClass);\n add(start, ephemera.firstSelected);\n add(finish, ephemera.lastSelected);\n };\n return {\n clearBeforeUpdate: clear,\n clear,\n selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n const byAttr = (ephemera, onSelection, onClear) => {\n const removeSelectionAttributes = element => {\n remove$7(element, ephemera.selected);\n remove$7(element, ephemera.firstSelected);\n remove$7(element, ephemera.lastSelected);\n };\n const addSelectionAttribute = element => {\n set$2(element, ephemera.selected, '1');\n };\n const clear = container => {\n clearBeforeUpdate(container);\n onClear();\n };\n const clearBeforeUpdate = container => {\n const sels = descendants(container, `${ ephemera.selectedSelector },${ ephemera.firstSelectedSelector },${ ephemera.lastSelectedSelector }`);\n each$2(sels, removeSelectionAttributes);\n };\n const selectRange = (container, cells, start, finish) => {\n clear(container);\n each$2(cells, addSelectionAttribute);\n set$2(start, ephemera.firstSelected, '1');\n set$2(finish, ephemera.lastSelected, '1');\n onSelection(cells, start, finish);\n };\n return {\n clearBeforeUpdate,\n clear,\n selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n const SelectionAnnotation = {\n byClass,\n byAttr\n };\n\n const fold = (subject, onNone, onMultiple, onSingle) => {\n switch (subject.tag) {\n case 'none':\n return onNone();\n case 'single':\n return onSingle(subject.element);\n case 'multiple':\n return onMultiple(subject.elements);\n }\n };\n const none = () => ({ tag: 'none' });\n const multiple = elements => ({\n tag: 'multiple',\n elements\n });\n const single = element => ({\n tag: 'single',\n element\n });\n\n const Selections = (lazyRoot, getStart, selectedSelector) => {\n const get = () => retrieve(lazyRoot(), selectedSelector).fold(() => getStart().fold(none, single), multiple);\n return { get };\n };\n\n const getUpOrLeftCells = (grid, selectedCells) => {\n const upGrid = grid.slice(0, selectedCells[selectedCells.length - 1].row + 1);\n const upDetails = toDetailList(upGrid);\n return bind$2(upDetails, detail => {\n const slicedCells = detail.cells.slice(0, selectedCells[selectedCells.length - 1].column + 1);\n return map$1(slicedCells, cell => cell.element);\n });\n };\n const getDownOrRightCells = (grid, selectedCells) => {\n const downGrid = grid.slice(selectedCells[0].row + selectedCells[0].rowspan - 1, grid.length);\n const downDetails = toDetailList(downGrid);\n return bind$2(downDetails, detail => {\n const slicedCells = detail.cells.slice(selectedCells[0].column + selectedCells[0].colspan - 1, detail.cells.length);\n return map$1(slicedCells, cell => cell.element);\n });\n };\n const getOtherCells = (table, target, generators) => {\n const warehouse = Warehouse.fromTable(table);\n const details = onCells(warehouse, target);\n return details.map(selectedCells => {\n const grid = toGrid(warehouse, generators, false);\n const {rows} = extractGridDetails(grid);\n const upOrLeftCells = getUpOrLeftCells(rows, selectedCells);\n const downOrRightCells = getDownOrRightCells(rows, selectedCells);\n return {\n upOrLeftCells,\n downOrRightCells\n };\n });\n };\n\n const mkEvent = (target, x, y, stop, prevent, kill, raw) => ({\n target,\n x,\n y,\n stop,\n prevent,\n kill,\n raw\n });\n const fromRawEvent$1 = rawEvent => {\n const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n const stop = () => rawEvent.stopPropagation();\n const prevent = () => rawEvent.preventDefault();\n const kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n const handle = (filter, handler) => rawEvent => {\n if (filter(rawEvent)) {\n handler(fromRawEvent$1(rawEvent));\n }\n };\n const binder = (element, event, filter, handler, useCapture) => {\n const wrapped = handle(filter, handler);\n element.dom.addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n const bind$1 = (element, event, filter, handler) => binder(element, event, filter, handler, false);\n const unbind = (element, event, handler, useCapture) => {\n element.dom.removeEventListener(event, handler, useCapture);\n };\n\n const filter = always;\n const bind = (element, event, handler) => bind$1(element, event, filter, handler);\n const fromRawEvent = fromRawEvent$1;\n\n const hasInternalTarget = e => !has(SugarElement.fromDom(e.target), 'ephox-snooker-resizer-bar');\n const TableCellSelectionHandler = (editor, resizeHandler) => {\n const cellSelection = Selections(() => SugarElement.fromDom(editor.getBody()), () => getSelectionCell(getSelectionStart(editor), getIsRoot(editor)), ephemera.selectedSelector);\n const onSelection = (cells, start, finish) => {\n const tableOpt = table(start);\n tableOpt.each(table => {\n const cellsDom = map$1(cells, cell => cell.dom);\n const cloneFormats = getTableCloneElements(editor);\n const generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), cloneFormats);\n const selectedCells = getCellsFromSelection(editor);\n const otherCellsDom = getOtherCells(table, { selection: selectedCells }, generators).map(otherCells => map(otherCells, cellArr => map$1(cellArr, cell => cell.dom))).getOrUndefined();\n fireTableSelectionChange(editor, cellsDom, start.dom, finish.dom, otherCellsDom);\n });\n };\n const onClear = () => fireTableSelectionClear(editor);\n const annotations = SelectionAnnotation.byAttr(ephemera, onSelection, onClear);\n editor.on('init', _e => {\n const win = editor.getWin();\n const body = getBody(editor);\n const isRoot = getIsRoot(editor);\n const syncSelection = () => {\n const sel = editor.selection;\n const start = SugarElement.fromDom(sel.getStart());\n const end = SugarElement.fromDom(sel.getEnd());\n const shared = sharedOne(table, [\n start,\n end\n ]);\n shared.fold(() => annotations.clear(body), noop);\n };\n const mouseHandlers = mouse(win, body, isRoot, annotations);\n const keyHandlers = keyboard(win, body, isRoot, annotations);\n const external$1 = external(win, body, isRoot, annotations);\n const hasShiftKey = event => event.raw.shiftKey === true;\n editor.on('TableSelectorChange', e => external$1(e.start, e.finish));\n const handleResponse = (event, response) => {\n if (!hasShiftKey(event)) {\n return;\n }\n if (response.kill) {\n event.kill();\n }\n response.selection.each(ns => {\n const relative = SimSelection.relative(ns.start, ns.finish);\n const rng = asLtrRange(win, relative);\n editor.selection.setRng(rng);\n });\n };\n const keyup = event => {\n const wrappedEvent = fromRawEvent(event);\n if (wrappedEvent.raw.shiftKey && isNavigation(wrappedEvent.raw.which)) {\n const rng = editor.selection.getRng();\n const start = SugarElement.fromDom(rng.startContainer);\n const end = SugarElement.fromDom(rng.endContainer);\n keyHandlers.keyup(wrappedEvent, start, rng.startOffset, end, rng.endOffset).each(response => {\n handleResponse(wrappedEvent, response);\n });\n }\n };\n const keydown = event => {\n const wrappedEvent = fromRawEvent(event);\n resizeHandler.hide();\n const rng = editor.selection.getRng();\n const start = SugarElement.fromDom(rng.startContainer);\n const end = SugarElement.fromDom(rng.endContainer);\n const direction = onDirection(ltr, rtl)(SugarElement.fromDom(editor.selection.getStart()));\n keyHandlers.keydown(wrappedEvent, start, rng.startOffset, end, rng.endOffset, direction).each(response => {\n handleResponse(wrappedEvent, response);\n });\n resizeHandler.show();\n };\n const isLeftMouse = raw => raw.button === 0;\n const isLeftButtonPressed = raw => {\n if (raw.buttons === undefined) {\n return true;\n }\n return (raw.buttons & 1) !== 0;\n };\n const dragStart = _e => {\n mouseHandlers.clearstate();\n };\n const mouseDown = e => {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mousedown(fromRawEvent(e));\n }\n };\n const mouseOver = e => {\n if (isLeftButtonPressed(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseover(fromRawEvent(e));\n }\n };\n const mouseUp = e => {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseup(fromRawEvent(e));\n }\n };\n const getDoubleTap = () => {\n const lastTarget = Cell(SugarElement.fromDom(body));\n const lastTimeStamp = Cell(0);\n const touchEnd = t => {\n const target = SugarElement.fromDom(t.target);\n if (isTag('td')(target) || isTag('th')(target)) {\n const lT = lastTarget.get();\n const lTS = lastTimeStamp.get();\n if (eq$1(lT, target) && t.timeStamp - lTS < 300) {\n t.preventDefault();\n external$1(target, target);\n }\n }\n lastTarget.set(target);\n lastTimeStamp.set(t.timeStamp);\n };\n return { touchEnd };\n };\n const doubleTap = getDoubleTap();\n editor.on('dragstart', dragStart);\n editor.on('mousedown', mouseDown);\n editor.on('mouseover', mouseOver);\n editor.on('mouseup', mouseUp);\n editor.on('touchend', doubleTap.touchEnd);\n editor.on('keyup', keyup);\n editor.on('keydown', keydown);\n editor.on('NodeChange', syncSelection);\n });\n editor.on('PreInit', () => {\n editor.serializer.addTempAttr(ephemera.firstSelected);\n editor.serializer.addTempAttr(ephemera.lastSelected);\n });\n const clearSelectedCells = container => annotations.clear(SugarElement.fromDom(container));\n const getSelectedCells = () => fold(cellSelection.get(), constant([]), cells => {\n return map$1(cells, cell => cell.dom);\n }, cell => [cell.dom]);\n return {\n getSelectedCells,\n clearSelectedCells\n };\n };\n\n const Event = fields => {\n let handlers = [];\n const bind = handler => {\n if (handler === undefined) {\n throw new Error('Event bind error: undefined handler');\n }\n handlers.push(handler);\n };\n const unbind = handler => {\n handlers = filter$2(handlers, h => {\n return h !== handler;\n });\n };\n const trigger = (...args) => {\n const event = {};\n each$2(fields, (name, i) => {\n event[name] = args[i];\n });\n each$2(handlers, handler => {\n handler(event);\n });\n };\n return {\n bind,\n unbind,\n trigger\n };\n };\n\n const create$1 = typeDefs => {\n const registry = map(typeDefs, event => {\n return {\n bind: event.bind,\n unbind: event.unbind\n };\n });\n const trigger = map(typeDefs, event => {\n return event.trigger;\n });\n return {\n registry,\n trigger\n };\n };\n\n const last = (fn, rate) => {\n let timer = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const throttle = (...args) => {\n cancel();\n timer = setTimeout(() => {\n timer = null;\n fn.apply(null, args);\n }, rate);\n };\n return {\n cancel,\n throttle\n };\n };\n\n const sort = arr => {\n return arr.slice(0).sort();\n };\n const reqMessage = (required, keys) => {\n throw new Error('All required keys (' + sort(required).join(', ') + ') were not specified. Specified keys were: ' + sort(keys).join(', ') + '.');\n };\n const unsuppMessage = unsupported => {\n throw new Error('Unsupported keys for object: ' + sort(unsupported).join(', '));\n };\n const validateStrArr = (label, array) => {\n if (!isArray(array)) {\n throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.');\n }\n each$2(array, a => {\n if (!isString(a)) {\n throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.');\n }\n });\n };\n const invalidTypeMessage = (incorrect, type) => {\n throw new Error('All values need to be of type: ' + type + '. Keys (' + sort(incorrect).join(', ') + ') were not.');\n };\n const checkDupes = everything => {\n const sorted = sort(everything);\n const dupe = find$1(sorted, (s, i) => {\n return i < sorted.length - 1 && s === sorted[i + 1];\n });\n dupe.each(d => {\n throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].');\n });\n };\n\n const base = (handleUnsupported, required) => {\n return baseWith(handleUnsupported, required, {\n validate: isFunction,\n label: 'function'\n });\n };\n const baseWith = (handleUnsupported, required, pred) => {\n if (required.length === 0) {\n throw new Error('You must specify at least one required field.');\n }\n validateStrArr('required', required);\n checkDupes(required);\n return obj => {\n const keys$1 = keys(obj);\n const allReqd = forall(required, req => {\n return contains$2(keys$1, req);\n });\n if (!allReqd) {\n reqMessage(required, keys$1);\n }\n handleUnsupported(required, keys$1);\n const invalidKeys = filter$2(required, key => {\n return !pred.validate(obj[key], key);\n });\n if (invalidKeys.length > 0) {\n invalidTypeMessage(invalidKeys, pred.label);\n }\n return obj;\n };\n };\n const handleExact = (required, keys) => {\n const unsupported = filter$2(keys, key => {\n return !contains$2(required, key);\n });\n if (unsupported.length > 0) {\n unsuppMessage(unsupported);\n }\n };\n const exactly = required => base(handleExact, required);\n\n const DragMode = exactly([\n 'compare',\n 'extract',\n 'mutate',\n 'sink'\n ]);\n const DragSink = exactly([\n 'element',\n 'start',\n 'stop',\n 'destroy'\n ]);\n const DragApi = exactly([\n 'forceDrop',\n 'drop',\n 'move',\n 'delayDrop'\n ]);\n\n const InDrag = () => {\n let previous = Optional.none();\n const reset = () => {\n previous = Optional.none();\n };\n const update = (mode, nu) => {\n const result = previous.map(old => {\n return mode.compare(old, nu);\n });\n previous = Optional.some(nu);\n return result;\n };\n const onEvent = (event, mode) => {\n const dataOption = mode.extract(event);\n dataOption.each(data => {\n const offset = update(mode, data);\n offset.each(d => {\n events.trigger.move(d);\n });\n });\n };\n const events = create$1({ move: Event(['info']) });\n return {\n onEvent,\n reset,\n events: events.registry\n };\n };\n\n const NoDrag = () => {\n const events = create$1({ move: Event(['info']) });\n return {\n onEvent: noop,\n reset: noop,\n events: events.registry\n };\n };\n\n const Movement = () => {\n const noDragState = NoDrag();\n const inDragState = InDrag();\n let dragState = noDragState;\n const on = () => {\n dragState.reset();\n dragState = inDragState;\n };\n const off = () => {\n dragState.reset();\n dragState = noDragState;\n };\n const onEvent = (event, mode) => {\n dragState.onEvent(event, mode);\n };\n const isOn = () => {\n return dragState === inDragState;\n };\n return {\n on,\n off,\n isOn,\n onEvent,\n events: inDragState.events\n };\n };\n\n const setup = (mutation, mode, settings) => {\n let active = false;\n const events = create$1({\n start: Event([]),\n stop: Event([])\n });\n const movement = Movement();\n const drop = () => {\n sink.stop();\n if (movement.isOn()) {\n movement.off();\n events.trigger.stop();\n }\n };\n const throttledDrop = last(drop, 200);\n const go = parent => {\n sink.start(parent);\n movement.on();\n events.trigger.start();\n };\n const mousemove = event => {\n throttledDrop.cancel();\n movement.onEvent(event, mode);\n };\n movement.events.move.bind(event => {\n mode.mutate(mutation, event.info);\n });\n const on = () => {\n active = true;\n };\n const off = () => {\n active = false;\n };\n const isActive = () => active;\n const runIfActive = f => {\n return (...args) => {\n if (active) {\n f.apply(null, args);\n }\n };\n };\n const sink = mode.sink(DragApi({\n forceDrop: drop,\n drop: runIfActive(drop),\n move: runIfActive(mousemove),\n delayDrop: runIfActive(throttledDrop.throttle)\n }), settings);\n const destroy = () => {\n sink.destroy();\n };\n return {\n element: sink.element,\n go,\n on,\n off,\n isActive,\n destroy,\n events: events.registry\n };\n };\n\n const css = namespace => {\n const dashNamespace = namespace.replace(/\\./g, '-');\n const resolve = str => {\n return dashNamespace + '-' + str;\n };\n return { resolve };\n };\n\n const styles$1 = css('ephox-dragster');\n const resolve$1 = styles$1.resolve;\n\n const Blocker = options => {\n const settings = {\n layerClass: resolve$1('blocker'),\n ...options\n };\n const div = SugarElement.fromTag('div');\n set$2(div, 'role', 'presentation');\n setAll(div, {\n position: 'fixed',\n left: '0px',\n top: '0px',\n width: '100%',\n height: '100%'\n });\n add(div, resolve$1('blocker'));\n add(div, settings.layerClass);\n const element = constant(div);\n const destroy = () => {\n remove$6(div);\n };\n return {\n element,\n destroy\n };\n };\n\n const compare = (old, nu) => {\n return SugarPosition(nu.left - old.left, nu.top - old.top);\n };\n const extract = event => {\n return Optional.some(SugarPosition(event.x, event.y));\n };\n const mutate = (mutation, info) => {\n mutation.mutate(info.left, info.top);\n };\n const sink = (dragApi, settings) => {\n const blocker = Blocker(settings);\n const mdown = bind(blocker.element(), 'mousedown', dragApi.forceDrop);\n const mup = bind(blocker.element(), 'mouseup', dragApi.drop);\n const mmove = bind(blocker.element(), 'mousemove', dragApi.move);\n const mout = bind(blocker.element(), 'mouseout', dragApi.delayDrop);\n const destroy = () => {\n blocker.destroy();\n mup.unbind();\n mmove.unbind();\n mout.unbind();\n mdown.unbind();\n };\n const start = parent => {\n append$1(parent, blocker.element());\n };\n const stop = () => {\n remove$6(blocker.element());\n };\n return DragSink({\n element: blocker.element,\n start,\n stop,\n destroy\n });\n };\n var MouseDrag = DragMode({\n compare,\n extract,\n sink,\n mutate\n });\n\n const transform = (mutation, settings = {}) => {\n var _a;\n const mode = (_a = settings.mode) !== null && _a !== void 0 ? _a : MouseDrag;\n return setup(mutation, mode, settings);\n };\n\n const styles = css('ephox-snooker');\n const resolve = styles.resolve;\n\n const Mutation = () => {\n const events = create$1({\n drag: Event([\n 'xDelta',\n 'yDelta'\n ])\n });\n const mutate = (x, y) => {\n events.trigger.drag(x, y);\n };\n return {\n mutate,\n events: events.registry\n };\n };\n\n const BarMutation = () => {\n const events = create$1({\n drag: Event([\n 'xDelta',\n 'yDelta',\n 'target'\n ])\n });\n let target = Optional.none();\n const delegate = Mutation();\n delegate.events.drag.bind(event => {\n target.each(t => {\n events.trigger.drag(event.xDelta, event.yDelta, t);\n });\n });\n const assign = t => {\n target = Optional.some(t);\n };\n const get = () => {\n return target;\n };\n return {\n assign,\n get,\n mutate: delegate.mutate,\n events: events.registry\n };\n };\n\n const col = (column, x, y, w, h) => {\n const bar = SugarElement.fromTag('div');\n setAll(bar, {\n position: 'absolute',\n left: x - w / 2 + 'px',\n top: y + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll$1(bar, {\n 'data-column': column,\n 'role': 'presentation'\n });\n return bar;\n };\n const row = (r, x, y, w, h) => {\n const bar = SugarElement.fromTag('div');\n setAll(bar, {\n position: 'absolute',\n left: x + 'px',\n top: y - h / 2 + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll$1(bar, {\n 'data-row': r,\n 'role': 'presentation'\n });\n return bar;\n };\n\n const resizeBar = resolve('resizer-bar');\n const resizeRowBar = resolve('resizer-rows');\n const resizeColBar = resolve('resizer-cols');\n const BAR_THICKNESS = 7;\n const resizableRows = (warehouse, isResizable) => bind$2(warehouse.all, (row, i) => isResizable(row.element) ? [i] : []);\n const resizableColumns = (warehouse, isResizable) => {\n const resizableCols = [];\n range$1(warehouse.grid.columns, index => {\n const colElmOpt = Warehouse.getColumnAt(warehouse, index).map(col => col.element);\n if (colElmOpt.forall(isResizable)) {\n resizableCols.push(index);\n }\n });\n return filter$2(resizableCols, colIndex => {\n const columnCells = Warehouse.filterItems(warehouse, cell => cell.column === colIndex);\n return forall(columnCells, cell => isResizable(cell.element));\n });\n };\n const destroy = wire => {\n const previous = descendants(wire.parent(), '.' + resizeBar);\n each$2(previous, remove$6);\n };\n const drawBar = (wire, positions, create) => {\n const origin = wire.origin();\n each$2(positions, cpOption => {\n cpOption.each(cp => {\n const bar = create(origin, cp);\n add(bar, resizeBar);\n append$1(wire.parent(), bar);\n });\n });\n };\n const refreshCol = (wire, colPositions, position, tableHeight) => {\n drawBar(wire, colPositions, (origin, cp) => {\n const colBar = col(cp.col, cp.x - origin.left, position.top - origin.top, BAR_THICKNESS, tableHeight);\n add(colBar, resizeColBar);\n return colBar;\n });\n };\n const refreshRow = (wire, rowPositions, position, tableWidth) => {\n drawBar(wire, rowPositions, (origin, cp) => {\n const rowBar = row(cp.row, position.left - origin.left, cp.y - origin.top, tableWidth, BAR_THICKNESS);\n add(rowBar, resizeRowBar);\n return rowBar;\n });\n };\n const refreshGrid = (warhouse, wire, table, rows, cols) => {\n const position = absolute(table);\n const isResizable = wire.isResizable;\n const rowPositions = rows.length > 0 ? height.positions(rows, table) : [];\n const resizableRowBars = rowPositions.length > 0 ? resizableRows(warhouse, isResizable) : [];\n const resizableRowPositions = filter$2(rowPositions, (_pos, i) => exists(resizableRowBars, barIndex => i === barIndex));\n refreshRow(wire, resizableRowPositions, position, getOuter$2(table));\n const colPositions = cols.length > 0 ? width.positions(cols, table) : [];\n const resizableColBars = colPositions.length > 0 ? resizableColumns(warhouse, isResizable) : [];\n const resizableColPositions = filter$2(colPositions, (_pos, i) => exists(resizableColBars, barIndex => i === barIndex));\n refreshCol(wire, resizableColPositions, position, getOuter$1(table));\n };\n const refresh = (wire, table) => {\n destroy(wire);\n if (wire.isResizable(table)) {\n const warehouse = Warehouse.fromTable(table);\n const rows$1 = rows(warehouse);\n const cols = columns(warehouse);\n refreshGrid(warehouse, wire, table, rows$1, cols);\n }\n };\n const each = (wire, f) => {\n const bars = descendants(wire.parent(), '.' + resizeBar);\n each$2(bars, f);\n };\n const hide = wire => {\n each(wire, bar => {\n set$1(bar, 'display', 'none');\n });\n };\n const show = wire => {\n each(wire, bar => {\n set$1(bar, 'display', 'block');\n });\n };\n const isRowBar = element => {\n return has(element, resizeRowBar);\n };\n const isColBar = element => {\n return has(element, resizeColBar);\n };\n\n const resizeBarDragging = resolve('resizer-bar-dragging');\n const BarManager = wire => {\n const mutation = BarMutation();\n const resizing = transform(mutation, {});\n let hoverTable = Optional.none();\n const getResizer = (element, type) => {\n return Optional.from(get$b(element, type));\n };\n mutation.events.drag.bind(event => {\n getResizer(event.target, 'data-row').each(_dataRow => {\n const currentRow = getCssValue(event.target, 'top');\n set$1(event.target, 'top', currentRow + event.yDelta + 'px');\n });\n getResizer(event.target, 'data-column').each(_dataCol => {\n const currentCol = getCssValue(event.target, 'left');\n set$1(event.target, 'left', currentCol + event.xDelta + 'px');\n });\n });\n const getDelta = (target, dir) => {\n const newX = getCssValue(target, dir);\n const oldX = getAttrValue(target, 'data-initial-' + dir, 0);\n return newX - oldX;\n };\n resizing.events.stop.bind(() => {\n mutation.get().each(target => {\n hoverTable.each(table => {\n getResizer(target, 'data-row').each(row => {\n const delta = getDelta(target, 'top');\n remove$7(target, 'data-initial-top');\n events.trigger.adjustHeight(table, delta, parseInt(row, 10));\n });\n getResizer(target, 'data-column').each(column => {\n const delta = getDelta(target, 'left');\n remove$7(target, 'data-initial-left');\n events.trigger.adjustWidth(table, delta, parseInt(column, 10));\n });\n refresh(wire, table);\n });\n });\n });\n const handler = (target, dir) => {\n events.trigger.startAdjust();\n mutation.assign(target);\n set$2(target, 'data-initial-' + dir, getCssValue(target, dir));\n add(target, resizeBarDragging);\n set$1(target, 'opacity', '0.2');\n resizing.go(wire.dragContainer());\n };\n const mousedown = bind(wire.parent(), 'mousedown', event => {\n if (isRowBar(event.target)) {\n handler(event.target, 'top');\n }\n if (isColBar(event.target)) {\n handler(event.target, 'left');\n }\n });\n const isRoot = e => {\n return eq$1(e, wire.view());\n };\n const findClosestEditableTable = target => closest$1(target, 'table', isRoot).filter(isEditable$1);\n const mouseover = bind(wire.view(), 'mouseover', event => {\n findClosestEditableTable(event.target).fold(() => {\n if (inBody(event.target)) {\n destroy(wire);\n }\n }, table => {\n if (resizing.isActive()) {\n hoverTable = Optional.some(table);\n refresh(wire, table);\n }\n });\n });\n const destroy$1 = () => {\n mousedown.unbind();\n mouseover.unbind();\n resizing.destroy();\n destroy(wire);\n };\n const refresh$1 = tbl => {\n refresh(wire, tbl);\n };\n const events = create$1({\n adjustHeight: Event([\n 'table',\n 'delta',\n 'row'\n ]),\n adjustWidth: Event([\n 'table',\n 'delta',\n 'column'\n ]),\n startAdjust: Event([])\n });\n return {\n destroy: destroy$1,\n refresh: refresh$1,\n on: resizing.on,\n off: resizing.off,\n hideBars: curry(hide, wire),\n showBars: curry(show, wire),\n events: events.registry\n };\n };\n\n const create = (wire, resizing, lazySizing) => {\n const hdirection = height;\n const vdirection = width;\n const manager = BarManager(wire);\n const events = create$1({\n beforeResize: Event([\n 'table',\n 'type'\n ]),\n afterResize: Event([\n 'table',\n 'type'\n ]),\n startDrag: Event([])\n });\n manager.events.adjustHeight.bind(event => {\n const table = event.table;\n events.trigger.beforeResize(table, 'row');\n const delta = hdirection.delta(event.delta, table);\n adjustHeight(table, delta, event.row);\n events.trigger.afterResize(table, 'row');\n });\n manager.events.startAdjust.bind(_event => {\n events.trigger.startDrag();\n });\n manager.events.adjustWidth.bind(event => {\n const table = event.table;\n events.trigger.beforeResize(table, 'col');\n const delta = vdirection.delta(event.delta, table);\n const tableSize = lazySizing(table);\n adjustWidth(table, delta, event.column, resizing, tableSize);\n events.trigger.afterResize(table, 'col');\n });\n return {\n on: manager.on,\n off: manager.off,\n refreshBars: manager.refresh,\n hideBars: manager.hideBars,\n showBars: manager.showBars,\n destroy: manager.destroy,\n events: events.registry\n };\n };\n const TableResize = { create };\n\n const random = () => window.crypto.getRandomValues(new Uint32Array(1))[0] / 4294967295;\n\n let unique = 0;\n const generate = prefix => {\n const date = new Date();\n const time = date.getTime();\n const random$1 = Math.floor(random() * 1000000000);\n unique++;\n return prefix + '_' + random$1 + unique + String(time);\n };\n\n const only = (element, isResizable) => {\n const parent = isDocument(element) ? documentElement(element) : element;\n return {\n parent: constant(parent),\n view: constant(element),\n dragContainer: constant(parent),\n origin: constant(SugarPosition(0, 0)),\n isResizable\n };\n };\n const detached = (editable, chrome, isResizable) => {\n const origin = () => absolute(chrome);\n return {\n parent: constant(chrome),\n view: constant(editable),\n dragContainer: constant(chrome),\n origin,\n isResizable\n };\n };\n const body = (editable, chrome, isResizable) => {\n return {\n parent: constant(chrome),\n view: constant(editable),\n dragContainer: constant(chrome),\n origin: constant(SugarPosition(0, 0)),\n isResizable\n };\n };\n const scrollable = (editable, chrome, dragContainer, isResizable) => {\n return {\n parent: constant(chrome),\n view: constant(editable),\n dragContainer: constant(dragContainer),\n origin: () => absolute(chrome),\n isResizable\n };\n };\n const ResizeWire = {\n only,\n detached,\n body,\n scrollable\n };\n\n const createContainer = position => {\n const id = generate('resizer-container');\n const container = SugarElement.fromTag('div');\n set$2(container, 'id', id);\n setAll(container, {\n position,\n height: '0',\n width: '0',\n padding: '0',\n margin: '0',\n border: '0'\n });\n return container;\n };\n const getInlineResizeWire = (editor, isResizable) => {\n const isSplitUiMode$1 = isSplitUiMode(editor);\n const editorBody = SugarElement.fromDom(editor.getBody());\n const container = createContainer(isSplitUiMode$1 ? 'relative' : 'static');\n const body = body$1();\n if (isSplitUiMode$1) {\n after$5(editorBody, container);\n return ResizeWire.scrollable(editorBody, container, body, isResizable);\n }\n append$1(body, container);\n return ResizeWire.body(editorBody, container, isResizable);\n };\n const get = (editor, isResizable) => {\n if (editor.inline) {\n return getInlineResizeWire(editor, isResizable);\n }\n return ResizeWire.only(SugarElement.fromDom(editor.getDoc()), isResizable);\n };\n const remove = (editor, wire) => {\n if (editor.inline) {\n remove$6(wire.parent());\n }\n };\n\n const isTable = node => isNonNullable(node) && node.nodeName === 'TABLE';\n const barResizerPrefix = 'bar-';\n const isResizable = elm => get$b(elm, 'data-mce-resize') !== 'false';\n const syncTableCellPixels = table => {\n const warehouse = Warehouse.fromTable(table);\n if (!Warehouse.hasColumns(warehouse)) {\n each$2(cells$1(table), cell => {\n const computedWidth = get$a(cell, 'width');\n set$1(cell, 'width', computedWidth);\n remove$7(cell, 'width');\n });\n }\n };\n const isCornerResize = origin => startsWith(origin, 'corner-');\n const getCornerLocation = origin => removeLeading(origin, 'corner-');\n const TableResizeHandler = editor => {\n const selectionRng = value();\n const tableResize = value();\n const resizeWire = value();\n let startW;\n let startRawW;\n let startH;\n let startRawH;\n const lazySizing = table => get$5(editor, table);\n const lazyResizingBehaviour = () => isPreserveTableColumnResizing(editor) ? preserveTable() : resizeTable();\n const getNumColumns = table => getGridSize(table).columns;\n const getNumRows = table => getGridSize(table).rows;\n const afterCornerResize = (table, origin, width, height) => {\n const location = getCornerLocation(origin);\n const isRightEdgeResize = endsWith(location, 'e');\n const isNorthEdgeResize = startsWith(location, 'n');\n if (startRawW === '') {\n convertToPercentSizeWidth(table);\n }\n if (startRawH === '') {\n convertToPixelSizeHeight(table);\n }\n if (width !== startW && startRawW !== '') {\n set$1(table, 'width', startRawW);\n const resizing = lazyResizingBehaviour();\n const tableSize = lazySizing(table);\n const col = isPreserveTableColumnResizing(editor) || isRightEdgeResize ? getNumColumns(table) - 1 : 0;\n adjustWidth(table, width - startW, col, resizing, tableSize);\n } else if (isPercentage$1(startRawW)) {\n const percentW = parseFloat(startRawW.replace('%', ''));\n const targetPercentW = width * percentW / startW;\n set$1(table, 'width', targetPercentW + '%');\n }\n if (isPixel(startRawW)) {\n syncTableCellPixels(table);\n }\n if (height !== startH && startRawH !== '') {\n set$1(table, 'height', startRawH);\n const idx = isNorthEdgeResize ? 0 : getNumRows(table) - 1;\n adjustHeight(table, height - startH, idx);\n }\n };\n const destroy = () => {\n tableResize.on(sz => {\n sz.destroy();\n });\n resizeWire.on(w => {\n remove(editor, w);\n });\n };\n editor.on('init', () => {\n const rawWire = get(editor, isResizable);\n resizeWire.set(rawWire);\n if (hasTableObjectResizing(editor) && hasTableResizeBars(editor)) {\n const resizing = lazyResizingBehaviour();\n const sz = TableResize.create(rawWire, resizing, lazySizing);\n if (!editor.mode.isReadOnly()) {\n sz.on();\n }\n sz.events.startDrag.bind(_event => {\n selectionRng.set(editor.selection.getRng());\n });\n sz.events.beforeResize.bind(event => {\n const rawTable = event.table.dom;\n fireObjectResizeStart(editor, rawTable, getPixelWidth(rawTable), getPixelHeight(rawTable), barResizerPrefix + event.type);\n });\n sz.events.afterResize.bind(event => {\n const table = event.table;\n const rawTable = table.dom;\n removeDataStyle(table);\n selectionRng.on(rng => {\n editor.selection.setRng(rng);\n editor.focus();\n });\n fireObjectResized(editor, rawTable, getPixelWidth(rawTable), getPixelHeight(rawTable), barResizerPrefix + event.type);\n editor.undoManager.add();\n });\n tableResize.set(sz);\n }\n });\n editor.on('ObjectResizeStart', e => {\n const targetElm = e.target;\n if (isTable(targetElm) && !editor.mode.isReadOnly()) {\n const table = SugarElement.fromDom(targetElm);\n each$2(editor.dom.select('.mce-clonedresizable'), clone => {\n editor.dom.addClass(clone, 'mce-' + getTableColumnResizingBehaviour(editor) + '-columns');\n });\n if (!isPixelSizing(table) && isTablePixelsForced(editor)) {\n convertToPixelSizeWidth(table);\n } else if (!isPercentSizing(table) && isTablePercentagesForced(editor)) {\n convertToPercentSizeWidth(table);\n }\n if (isNoneSizing(table) && startsWith(e.origin, barResizerPrefix)) {\n convertToPercentSizeWidth(table);\n }\n startW = e.width;\n startRawW = isTableResponsiveForced(editor) ? '' : getRawWidth(editor, targetElm).getOr('');\n startH = e.height;\n startRawH = getRawHeight(editor, targetElm).getOr('');\n }\n });\n editor.on('ObjectResized', e => {\n const targetElm = e.target;\n if (isTable(targetElm)) {\n const table = SugarElement.fromDom(targetElm);\n const origin = e.origin;\n if (isCornerResize(origin)) {\n afterCornerResize(table, origin, e.width, e.height);\n }\n removeDataStyle(table);\n fireTableModified(editor, table.dom, styleModified);\n }\n });\n const showResizeBars = () => {\n tableResize.on(resize => {\n resize.on();\n resize.showBars();\n });\n };\n const hideResizeBars = () => {\n tableResize.on(resize => {\n resize.off();\n resize.hideBars();\n });\n };\n editor.on('DisabledStateChange', e => {\n e.state ? hideResizeBars() : showResizeBars();\n });\n editor.on('SwitchMode', () => {\n editor.mode.isReadOnly() ? hideResizeBars() : showResizeBars();\n });\n editor.on('dragstart dragend', e => {\n e.type === 'dragstart' ? hideResizeBars() : showResizeBars();\n });\n editor.on('remove', () => {\n destroy();\n });\n const refresh = table => {\n tableResize.on(resize => resize.refreshBars(SugarElement.fromDom(table)));\n };\n const hide = () => {\n tableResize.on(resize => resize.hideBars());\n };\n const show = () => {\n tableResize.on(resize => resize.showBars());\n };\n return {\n refresh,\n hide,\n show\n };\n };\n\n const setupTable = editor => {\n register(editor);\n const resizeHandler = TableResizeHandler(editor);\n const cellSelectionHandler = TableCellSelectionHandler(editor, resizeHandler);\n const actions = TableActions(editor, resizeHandler, cellSelectionHandler);\n registerCommands(editor, actions);\n registerQueryCommands(editor, actions);\n registerEvents(editor, actions);\n return {\n getSelectedCells: cellSelectionHandler.getSelectedCells,\n clearSelectedCells: cellSelectionHandler.clearSelectedCells\n };\n };\n\n const DomModel = editor => {\n const table = setupTable(editor);\n return { table };\n };\n var Model = () => {\n global$1.add('dom', DomModel);\n };\n\n Model();\n\n})();\n","// Exports the \"dom\" model for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/models/dom')\n// ES2015:\n// import 'tinymce/models/dom'\nrequire('./model.js');","/**\n * TinyMCE version 7.7.0 (TBD)\n */\n\n(function () {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const applyListFormat = (editor, listName, styleValue) => {\n const cmd = listName === 'UL' ? 'InsertUnorderedList' : 'InsertOrderedList';\n editor.execCommand(cmd, false, styleValue === false ? null : { 'list-style-type': styleValue });\n };\n\n const register$2 = editor => {\n editor.addCommand('ApplyUnorderedListStyle', (ui, value) => {\n applyListFormat(editor, 'UL', value['list-style-type']);\n });\n editor.addCommand('ApplyOrderedListStyle', (ui, value) => {\n applyListFormat(editor, 'OL', value['list-style-type']);\n });\n };\n\n const option = name => editor => editor.options.get(name);\n const register$1 = editor => {\n const registerOption = editor.options.register;\n registerOption('advlist_number_styles', {\n processor: 'string[]',\n default: 'default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman'.split(',')\n });\n registerOption('advlist_bullet_styles', {\n processor: 'string[]',\n default: 'default,circle,square'.split(',')\n });\n };\n const getNumberStyles = option('advlist_number_styles');\n const getBulletStyles = option('advlist_bullet_styles');\n\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativeIndexOf = Array.prototype.indexOf;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const contains = (xs, x) => rawIndexOf(xs, x) > -1;\n const findUntil = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n\n const keys = Object.keys;\n const each = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const map = (obj, f) => {\n return tupleMap(obj, (x, i) => ({\n k: i,\n v: f(x, i)\n }));\n };\n const tupleMap = (obj, f) => {\n const r = {};\n each(obj, (x, i) => {\n const tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const isCustomList = list => /\\btox\\-/.test(list.className);\n const isChildOfBody = (editor, elm) => {\n return editor.dom.isChildOf(elm, editor.getBody());\n };\n const matchNodeNames = regex => node => isNonNullable(node) && regex.test(node.nodeName);\n const isListNode = matchNodeNames(/^(OL|UL|DL)$/);\n const isTableCellNode = matchNodeNames(/^(TH|TD)$/);\n const inList = (editor, parents, nodeName) => findUntil(parents, parent => isListNode(parent) && !isCustomList(parent), isTableCellNode).exists(list => list.nodeName === nodeName && isChildOfBody(editor, list));\n const getSelectedStyleType = editor => {\n const listElm = editor.dom.getParent(editor.selection.getNode(), 'ol,ul');\n const style = editor.dom.getStyle(listElm, 'listStyleType');\n return Optional.from(style);\n };\n const isWithinNonEditable = (editor, element) => element !== null && !editor.dom.isEditable(element);\n const isWithinNonEditableList = (editor, element) => {\n const parentList = editor.dom.getParent(element, 'ol,ul,dl');\n return isWithinNonEditable(editor, parentList) || !editor.selection.isEditable();\n };\n const setNodeChangeHandler = (editor, nodeChangeHandler) => {\n const initialNode = editor.selection.getNode();\n nodeChangeHandler({\n parents: editor.dom.getParents(initialNode),\n element: initialNode\n });\n editor.on('NodeChange', nodeChangeHandler);\n return () => editor.off('NodeChange', nodeChangeHandler);\n };\n\n const styleValueToText = styleValue => {\n return styleValue.replace(/\\-/g, ' ').replace(/\\b\\w/g, chr => {\n return chr.toUpperCase();\n });\n };\n const normalizeStyleValue = styleValue => isNullable(styleValue) || styleValue === 'default' ? '' : styleValue;\n const makeSetupHandler = (editor, nodeName) => api => {\n const updateButtonState = (editor, parents) => {\n const element = editor.selection.getStart(true);\n api.setActive(inList(editor, parents, nodeName));\n api.setEnabled(!isWithinNonEditableList(editor, element));\n };\n const nodeChangeHandler = e => updateButtonState(editor, e.parents);\n return setNodeChangeHandler(editor, nodeChangeHandler);\n };\n const addSplitButton = (editor, id, tooltip, cmd, nodeName, styles) => {\n const listStyleTypeAliases = {\n 'lower-latin': 'lower-alpha',\n 'upper-latin': 'upper-alpha',\n 'lower-alpha': 'lower-latin',\n 'upper-alpha': 'upper-latin'\n };\n const stylesContainsAliasMap = map(listStyleTypeAliases, alias => contains(styles, alias));\n editor.ui.registry.addSplitButton(id, {\n tooltip,\n icon: nodeName === 'OL' ? 'ordered-list' : 'unordered-list',\n presets: 'listpreview',\n columns: 3,\n fetch: callback => {\n const items = global.map(styles, styleValue => {\n const iconStyle = nodeName === 'OL' ? 'num' : 'bull';\n const iconName = styleValue === 'disc' || styleValue === 'decimal' ? 'default' : styleValue;\n const itemValue = normalizeStyleValue(styleValue);\n const displayText = styleValueToText(styleValue);\n return {\n type: 'choiceitem',\n value: itemValue,\n icon: 'list-' + iconStyle + '-' + iconName,\n text: displayText\n };\n });\n callback(items);\n },\n onAction: () => editor.execCommand(cmd),\n onItemAction: (_splitButtonApi, value) => {\n applyListFormat(editor, nodeName, value);\n },\n select: value => {\n const listStyleType = getSelectedStyleType(editor);\n return listStyleType.exists(listStyle => value === listStyle || listStyleTypeAliases[listStyle] === value && !stylesContainsAliasMap[value]);\n },\n onSetup: makeSetupHandler(editor, nodeName)\n });\n };\n const addButton = (editor, id, tooltip, cmd, nodeName, styleValue) => {\n editor.ui.registry.addToggleButton(id, {\n active: false,\n tooltip,\n icon: nodeName === 'OL' ? 'ordered-list' : 'unordered-list',\n onSetup: makeSetupHandler(editor, nodeName),\n onAction: () => editor.queryCommandState(cmd) || styleValue === '' ? editor.execCommand(cmd) : applyListFormat(editor, nodeName, styleValue)\n });\n };\n const addControl = (editor, id, tooltip, cmd, nodeName, styles) => {\n if (styles.length > 1) {\n addSplitButton(editor, id, tooltip, cmd, nodeName, styles);\n } else {\n addButton(editor, id, tooltip, cmd, nodeName, normalizeStyleValue(styles[0]));\n }\n };\n const register = editor => {\n addControl(editor, 'numlist', 'Numbered list', 'InsertOrderedList', 'OL', getNumberStyles(editor));\n addControl(editor, 'bullist', 'Bullet list', 'InsertUnorderedList', 'UL', getBulletStyles(editor));\n };\n\n var Plugin = () => {\n global$1.add('advlist', editor => {\n if (editor.hasPlugin('lists')) {\n register$1(editor);\n register(editor);\n register$2(editor);\n } else {\n console.error('Please use the Lists plugin together with the List Styles plugin.');\n }\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"advlist\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/advlist')\n// ES2015:\n// import 'tinymce/plugins/advlist'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.0 (TBD)\n */\n\n(function () {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const link = () => /(?:[A-Za-z][A-Za-z\\d.+-]{0,14}:\\/\\/(?:[-.~*+=!&;:'%@?^${}(),\\w]+@)?|www\\.|[-;:&=+$,.\\w]+@)[A-Za-z\\d-]+(?:\\.[A-Za-z\\d-]+)*(?::\\d+)?(?:\\/(?:[-.~*+=!;:'%@$(),\\/\\w]*[-~*+=%@$()\\/\\w])?)?(?:\\?(?:[-.~*+=!&;:'%@?^${}(),\\/\\w]+))?(?:#(?:[-.~*+=!&;:'%@?^${}(),\\/\\w]+))?/g;\n\n const option = name => editor => editor.options.get(name);\n const register = editor => {\n const registerOption = editor.options.register;\n registerOption('autolink_pattern', {\n processor: 'regexp',\n default: new RegExp('^' + link().source + '$', 'i')\n });\n registerOption('link_default_target', { processor: 'string' });\n registerOption('link_default_protocol', {\n processor: 'string',\n default: 'https'\n });\n };\n const getAutoLinkPattern = option('autolink_pattern');\n const getDefaultLinkTarget = option('link_default_target');\n const getDefaultLinkProtocol = option('link_default_protocol');\n const allowUnsafeLinkTarget = option('allow_unsafe_link_target');\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType = type => value => typeOf(value) === type;\n const eq = t => a => t === a;\n const isString = isType('string');\n const isUndefined = eq(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n\n const not = f => t => !f(t);\n\n const hasOwnProperty = Object.hasOwnProperty;\n const has = (obj, key) => hasOwnProperty.call(obj, key);\n\n const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n const contains = (str, substr, start = 0, end) => {\n const idx = str.indexOf(substr, start);\n if (idx !== -1) {\n return isUndefined(end) ? true : idx + substr.length <= end;\n } else {\n return false;\n }\n };\n const startsWith = (str, prefix) => {\n return checkRange(str, prefix, 0);\n };\n\n const zeroWidth = '\\uFEFF';\n const isZwsp = char => char === zeroWidth;\n const removeZwsp = s => s.replace(/\\uFEFF/g, '');\n\n var global = tinymce.util.Tools.resolve('tinymce.dom.TextSeeker');\n\n const isTextNode = node => node.nodeType === 3;\n const isElement = node => node.nodeType === 1;\n const isBracketOrSpace = char => /^[(\\[{ \\u00a0]$/.test(char);\n const hasProtocol = url => /^([A-Za-z][A-Za-z\\d.+-]*:\\/\\/)|mailto:/.test(url);\n const isPunctuation = char => /[?!,.;:]/.test(char);\n const findChar = (text, index, predicate) => {\n for (let i = index - 1; i >= 0; i--) {\n const char = text.charAt(i);\n if (!isZwsp(char) && predicate(char)) {\n return i;\n }\n }\n return -1;\n };\n const freefallRtl = (container, offset) => {\n let tempNode = container;\n let tempOffset = offset;\n while (isElement(tempNode) && tempNode.childNodes[tempOffset]) {\n tempNode = tempNode.childNodes[tempOffset];\n tempOffset = isTextNode(tempNode) ? tempNode.data.length : tempNode.childNodes.length;\n }\n return {\n container: tempNode,\n offset: tempOffset\n };\n };\n\n const parseCurrentLine = (editor, offset) => {\n var _a;\n const voidElements = editor.schema.getVoidElements();\n const autoLinkPattern = getAutoLinkPattern(editor);\n const {dom, selection} = editor;\n if (dom.getParent(selection.getNode(), 'a[href]') !== null || editor.mode.isReadOnly()) {\n return null;\n }\n const rng = selection.getRng();\n const textSeeker = global(dom, node => {\n return dom.isBlock(node) || has(voidElements, node.nodeName.toLowerCase()) || dom.getContentEditable(node) === 'false';\n });\n const {\n container: endContainer,\n offset: endOffset\n } = freefallRtl(rng.endContainer, rng.endOffset);\n const root = (_a = dom.getParent(endContainer, dom.isBlock)) !== null && _a !== void 0 ? _a : dom.getRoot();\n const endSpot = textSeeker.backwards(endContainer, endOffset + offset, (node, offset) => {\n const text = node.data;\n const idx = findChar(text, offset, not(isBracketOrSpace));\n return idx === -1 || isPunctuation(text[idx]) ? idx : idx + 1;\n }, root);\n if (!endSpot) {\n return null;\n }\n let lastTextNode = endSpot.container;\n const startSpot = textSeeker.backwards(endSpot.container, endSpot.offset, (node, offset) => {\n lastTextNode = node;\n const idx = findChar(node.data, offset, isBracketOrSpace);\n return idx === -1 ? idx : idx + 1;\n }, root);\n const newRng = dom.createRng();\n if (!startSpot) {\n newRng.setStart(lastTextNode, 0);\n } else {\n newRng.setStart(startSpot.container, startSpot.offset);\n }\n newRng.setEnd(endSpot.container, endSpot.offset);\n const rngText = removeZwsp(newRng.toString());\n const matches = rngText.match(autoLinkPattern);\n if (matches) {\n let url = matches[0];\n if (startsWith(url, 'www.')) {\n const protocol = getDefaultLinkProtocol(editor);\n url = protocol + '://' + url;\n } else if (contains(url, '@') && !hasProtocol(url)) {\n url = 'mailto:' + url;\n }\n return {\n rng: newRng,\n url\n };\n } else {\n return null;\n }\n };\n const convertToLink = (editor, result) => {\n const {dom, selection} = editor;\n const {rng, url} = result;\n const bookmark = selection.getBookmark();\n selection.setRng(rng);\n const command = 'createlink';\n const args = {\n command,\n ui: false,\n value: url\n };\n const beforeExecEvent = editor.dispatch('BeforeExecCommand', args);\n if (!beforeExecEvent.isDefaultPrevented()) {\n editor.getDoc().execCommand(command, false, url);\n editor.dispatch('ExecCommand', args);\n const defaultLinkTarget = getDefaultLinkTarget(editor);\n if (isString(defaultLinkTarget)) {\n const anchor = selection.getNode();\n dom.setAttrib(anchor, 'target', defaultLinkTarget);\n if (defaultLinkTarget === '_blank' && !allowUnsafeLinkTarget(editor)) {\n dom.setAttrib(anchor, 'rel', 'noopener');\n }\n }\n }\n selection.moveToBookmark(bookmark);\n editor.nodeChanged();\n };\n const handleSpacebar = editor => {\n const result = parseCurrentLine(editor, -1);\n if (isNonNullable(result)) {\n convertToLink(editor, result);\n }\n };\n const handleBracket = handleSpacebar;\n const handleEnter = editor => {\n const result = parseCurrentLine(editor, 0);\n if (isNonNullable(result)) {\n convertToLink(editor, result);\n }\n };\n const setup = editor => {\n editor.on('keydown', e => {\n if (e.keyCode === 13 && !e.isDefaultPrevented()) {\n handleEnter(editor);\n }\n });\n editor.on('keyup', e => {\n if (e.keyCode === 32) {\n handleSpacebar(editor);\n } else if (e.keyCode === 48 && e.shiftKey || e.keyCode === 221) {\n handleBracket(editor);\n }\n });\n };\n\n var Plugin = () => {\n global$1.add('autolink', editor => {\n register(editor);\n setup(editor);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"autolink\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/autolink')\n// ES2015:\n// import 'tinymce/plugins/autolink'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.0 (TBD)\n */\n\n(function () {\n 'use strict';\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType$1 = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const isString = isType$1('string');\n const isObject = isType$1('object');\n const isArray = isType$1('array');\n const isBoolean = isSimpleType('boolean');\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isNumber = isSimpleType('number');\n\n const noop = () => {\n };\n const compose1 = (fbc, fab) => a => fbc(fab(a));\n const constant = value => {\n return () => {\n return value;\n };\n };\n const tripleEquals = (a, b) => {\n return a === b;\n };\n function curry(fn, ...initialArgs) {\n return (...restArgs) => {\n const all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n const not = f => t => !f(t);\n const never = constant(false);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativeSlice = Array.prototype.slice;\n const nativeIndexOf = Array.prototype.indexOf;\n const nativePush = Array.prototype.push;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const contains$1 = (xs, x) => rawIndexOf(xs, x) > -1;\n const exists = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n const map = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each$1 = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const filter$1 = (xs, pred) => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n const groupBy = (xs, f) => {\n if (xs.length === 0) {\n return [];\n } else {\n let wasType = f(xs[0]);\n const r = [];\n let group = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n const type = f(x);\n if (type !== wasType) {\n r.push(group);\n group = [];\n }\n wasType = type;\n group.push(x);\n }\n if (group.length !== 0) {\n r.push(group);\n }\n return r;\n }\n };\n const foldl = (xs, f, acc) => {\n each$1(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const findUntil = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n const find = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind = (xs, f) => flatten(map(xs, f));\n const reverse = xs => {\n const r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n const get$1 = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n const head = xs => get$1(xs, 0);\n const last = xs => get$1(xs, xs.length - 1);\n const unique = (xs, comparator) => {\n const r = [];\n const isDuplicated = isFunction(comparator) ? x => exists(r, i => comparator(i, x)) : x => contains$1(r, x);\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (!isDuplicated(x)) {\n r.push(x);\n }\n }\n return r;\n };\n\n const is$2 = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n const equals = (lhs, rhs, comparator = tripleEquals) => lift2(lhs, rhs, comparator).getOr(lhs.isNone() && rhs.isNone());\n const lift2 = (oa, ob, f) => oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n\n const COMMENT = 8;\n const DOCUMENT_FRAGMENT = 11;\n const ELEMENT = 1;\n const TEXT = 3;\n\n const fromHtml = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n const message = 'HTML does not have a single root node';\n console.error(message, html);\n throw new Error(message);\n }\n return fromDom$1(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom$1(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom$1(node);\n };\n const fromDom$1 = node => {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n const fromPoint = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$1);\n const SugarElement = {\n fromHtml,\n fromTag,\n fromText,\n fromDom: fromDom$1,\n fromPoint\n };\n\n const is$1 = (element, selector) => {\n const dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n const elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n\n const eq = (e1, e2) => e1.dom === e2.dom;\n const contains = (e1, e2) => {\n const d1 = e1.dom;\n const d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n const is = is$1;\n\n const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n const path = (parts, scope) => {\n let o = scope !== undefined && scope !== null ? scope : Global;\n for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n const resolve = (p, scope) => {\n const parts = p.split('.');\n return path(parts, scope);\n };\n\n const unsafe = (name, scope) => {\n return resolve(name, scope);\n };\n const getOrDie = (name, scope) => {\n const actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n\n const getPrototypeOf = Object.getPrototypeOf;\n const sandHTMLElement = scope => {\n return getOrDie('HTMLElement', scope);\n };\n const isPrototypeOf = x => {\n const scope = resolve('ownerDocument.defaultView', x);\n return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf(x).constructor.name));\n };\n\n const name = element => {\n const r = element.dom.nodeName;\n return r.toLowerCase();\n };\n const type = element => element.dom.nodeType;\n const isType = t => element => type(element) === t;\n const isComment = element => type(element) === COMMENT || name(element) === '#comment';\n const isHTMLElement = element => isElement$1(element) && isPrototypeOf(element.dom);\n const isElement$1 = isType(ELEMENT);\n const isText = isType(TEXT);\n const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n const isTag = tag => e => isElement$1(e) && name(e) === tag;\n\n const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n const parentElement = element => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n const children = element => map(element.dom.childNodes, SugarElement.fromDom);\n const child = (element, index) => {\n const cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n const firstChild = element => child(element, 0);\n const lastChild = element => child(element, element.dom.childNodes.length - 1);\n\n const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n const getRootNode = e => SugarElement.fromDom(e.dom.getRootNode());\n const getShadowRoot = e => {\n const r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n\n const inBody = element => {\n const dom = isText(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n const doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n };\n\n var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n if (is(scope, a)) {\n return Optional.some(scope);\n } else if (isFunction(isRoot) && isRoot(scope)) {\n return Optional.none();\n } else {\n return ancestor(scope, a, isRoot);\n }\n };\n\n const ancestor$3 = (scope, predicate, isRoot) => {\n let element = scope.dom;\n const stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n const el = SugarElement.fromDom(element);\n if (predicate(el)) {\n return Optional.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n const closest$2 = (scope, predicate, isRoot) => {\n const is = (s, test) => test(s);\n return ClosestOrAncestor(is, ancestor$3, scope, predicate, isRoot);\n };\n\n const ancestor$2 = (scope, selector, isRoot) => ancestor$3(scope, e => is$1(e, selector), isRoot);\n const closest$1 = (scope, selector, isRoot) => {\n const is = (element, selector) => is$1(element, selector);\n return ClosestOrAncestor(is, ancestor$2, scope, selector, isRoot);\n };\n\n const closest = target => closest$1(target, '[contenteditable]');\n const isEditable = (element, assumeEditable = false) => {\n if (inBody(element)) {\n return element.dom.isContentEditable;\n } else {\n return closest(element).fold(constant(assumeEditable), editable => getRaw(editable) === 'true');\n }\n };\n const getRaw = element => element.dom.contentEditable;\n\n const before$1 = (marker, element) => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n const after = (marker, element) => {\n const sibling = nextSibling(marker);\n sibling.fold(() => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n append$1(v, element);\n });\n }, v => {\n before$1(v, element);\n });\n };\n const prepend = (parent, element) => {\n const firstChild$1 = firstChild(parent);\n firstChild$1.fold(() => {\n append$1(parent, element);\n }, v => {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n const append$1 = (parent, element) => {\n parent.dom.appendChild(element.dom);\n };\n\n const before = (marker, elements) => {\n each$1(elements, x => {\n before$1(marker, x);\n });\n };\n const append = (parent, elements) => {\n each$1(elements, x => {\n append$1(parent, x);\n });\n };\n\n const empty = element => {\n element.dom.textContent = '';\n each$1(children(element), rogue => {\n remove(rogue);\n });\n };\n const remove = element => {\n const dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n const fromDom = nodes => map(nodes, SugarElement.fromDom);\n\n const keys = Object.keys;\n const each = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const objAcc = r => (x, i) => {\n r[i] = x;\n };\n const internalFilter = (obj, pred, onTrue, onFalse) => {\n each(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const filter = (obj, pred) => {\n const t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n\n const rawSet = (dom, key, value) => {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n const setAll = (element, attrs) => {\n const dom = element.dom;\n each(attrs, (v, k) => {\n rawSet(dom, k, v);\n });\n };\n const clone$1 = element => foldl(element.dom.attributes, (acc, attr) => {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n\n const clone = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n const deep = original => clone(original, true);\n const shallowAs = (original, tag) => {\n const nu = SugarElement.fromTag(tag);\n const attributes = clone$1(original);\n setAll(nu, attributes);\n return nu;\n };\n const mutate = (original, tag) => {\n const nu = shallowAs(original, tag);\n after(original, nu);\n const children$1 = children(original);\n append(nu, children$1);\n remove(original);\n return nu;\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const matchNodeName = name => node => isNonNullable(node) && node.nodeName.toLowerCase() === name;\n const matchNodeNames = regex => node => isNonNullable(node) && regex.test(node.nodeName);\n const isTextNode$1 = node => isNonNullable(node) && node.nodeType === 3;\n const isElement = node => isNonNullable(node) && node.nodeType === 1;\n const isListNode = matchNodeNames(/^(OL|UL|DL)$/);\n const isOlUlNode = matchNodeNames(/^(OL|UL)$/);\n const isOlNode = matchNodeName('ol');\n const isListItemNode = matchNodeNames(/^(LI|DT|DD)$/);\n const isDlItemNode = matchNodeNames(/^(DT|DD)$/);\n const isTableCellNode = matchNodeNames(/^(TH|TD)$/);\n const isBr = matchNodeName('br');\n const isFirstChild = node => {\n var _a;\n return ((_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.firstChild) === node;\n };\n const isTextBlock = (editor, node) => isNonNullable(node) && node.nodeName in editor.schema.getTextBlockElements();\n const isBlock = (node, blockElements) => isNonNullable(node) && node.nodeName in blockElements;\n const isVoid = (editor, node) => isNonNullable(node) && node.nodeName in editor.schema.getVoidElements();\n const isBogusBr = (dom, node) => {\n if (!isBr(node)) {\n return false;\n }\n return dom.isBlock(node.nextSibling) && !isBr(node.previousSibling);\n };\n const isEmpty$2 = (dom, elm, keepBookmarks) => {\n const empty = dom.isEmpty(elm);\n if (keepBookmarks && dom.select('span[data-mce-type=bookmark]', elm).length > 0) {\n return false;\n }\n return empty;\n };\n const isChildOfBody = (dom, elm) => dom.isChildOf(elm, dom.getRoot());\n\n const option = name => editor => editor.options.get(name);\n const register$3 = editor => {\n const registerOption = editor.options.register;\n registerOption('lists_indent_on_tab', {\n processor: 'boolean',\n default: true\n });\n };\n const shouldIndentOnTab = option('lists_indent_on_tab');\n const getForcedRootBlock = option('forced_root_block');\n const getForcedRootBlockAttrs = option('forced_root_block_attrs');\n\n const createTextBlock = (editor, contentNode, attrs = {}) => {\n const dom = editor.dom;\n const blockElements = editor.schema.getBlockElements();\n const fragment = dom.createFragment();\n const blockName = getForcedRootBlock(editor);\n const blockAttrs = getForcedRootBlockAttrs(editor);\n let node;\n let textBlock;\n let hasContentNode = false;\n textBlock = dom.create(blockName, {\n ...blockAttrs,\n ...attrs.style ? { style: attrs.style } : {}\n });\n if (!isBlock(contentNode.firstChild, blockElements)) {\n fragment.appendChild(textBlock);\n }\n while (node = contentNode.firstChild) {\n const nodeName = node.nodeName;\n if (!hasContentNode && (nodeName !== 'SPAN' || node.getAttribute('data-mce-type') !== 'bookmark')) {\n hasContentNode = true;\n }\n if (isBlock(node, blockElements)) {\n fragment.appendChild(node);\n textBlock = null;\n } else {\n if (!textBlock) {\n textBlock = dom.create(blockName, blockAttrs);\n fragment.appendChild(textBlock);\n }\n textBlock.appendChild(node);\n }\n }\n if (!hasContentNode && textBlock) {\n textBlock.appendChild(dom.create('br', { 'data-mce-bogus': '1' }));\n }\n return fragment;\n };\n\n const DOM$2 = global$3.DOM;\n const splitList = (editor, list, li) => {\n const removeAndKeepBookmarks = targetNode => {\n const parent = targetNode.parentNode;\n if (parent) {\n global$2.each(bookmarks, node => {\n parent.insertBefore(node, li.parentNode);\n });\n }\n DOM$2.remove(targetNode);\n };\n const bookmarks = DOM$2.select('span[data-mce-type=\"bookmark\"]', list);\n const newBlock = createTextBlock(editor, li);\n const tmpRng = DOM$2.createRng();\n tmpRng.setStartAfter(li);\n tmpRng.setEndAfter(list);\n const fragment = tmpRng.extractContents();\n for (let node = fragment.firstChild; node; node = node.firstChild) {\n if (node.nodeName === 'LI' && editor.dom.isEmpty(node)) {\n DOM$2.remove(node);\n break;\n }\n }\n if (!editor.dom.isEmpty(fragment)) {\n DOM$2.insertAfter(fragment, list);\n }\n DOM$2.insertAfter(newBlock, list);\n const parent = li.parentElement;\n if (parent && isEmpty$2(editor.dom, parent)) {\n removeAndKeepBookmarks(parent);\n }\n DOM$2.remove(li);\n if (isEmpty$2(editor.dom, list)) {\n DOM$2.remove(list);\n }\n };\n\n const isDescriptionDetail = isTag('dd');\n const isDescriptionTerm = isTag('dt');\n const outdentDlItem = (editor, item) => {\n if (isDescriptionDetail(item)) {\n mutate(item, 'dt');\n } else if (isDescriptionTerm(item)) {\n parentElement(item).each(dl => splitList(editor, dl.dom, item.dom));\n }\n };\n const indentDlItem = item => {\n if (isDescriptionTerm(item)) {\n mutate(item, 'dd');\n }\n };\n const dlIndentation = (editor, indentation, dlItems) => {\n if (indentation === 'Indent') {\n each$1(dlItems, indentDlItem);\n } else {\n each$1(dlItems, item => outdentDlItem(editor, item));\n }\n };\n\n const getNormalizedPoint = (container, offset) => {\n if (isTextNode$1(container)) {\n return {\n container,\n offset\n };\n }\n const node = global$6.getNode(container, offset);\n if (isTextNode$1(node)) {\n return {\n container: node,\n offset: offset >= container.childNodes.length ? node.data.length : 0\n };\n } else if (node.previousSibling && isTextNode$1(node.previousSibling)) {\n return {\n container: node.previousSibling,\n offset: node.previousSibling.data.length\n };\n } else if (node.nextSibling && isTextNode$1(node.nextSibling)) {\n return {\n container: node.nextSibling,\n offset: 0\n };\n }\n return {\n container,\n offset\n };\n };\n const normalizeRange = rng => {\n const outRng = rng.cloneRange();\n const rangeStart = getNormalizedPoint(rng.startContainer, rng.startOffset);\n outRng.setStart(rangeStart.container, rangeStart.offset);\n const rangeEnd = getNormalizedPoint(rng.endContainer, rng.endOffset);\n outRng.setEnd(rangeEnd.container, rangeEnd.offset);\n return outRng;\n };\n\n const listNames = [\n 'OL',\n 'UL',\n 'DL'\n ];\n const listSelector = listNames.join(',');\n const getParentList = (editor, node) => {\n const selectionStart = node || editor.selection.getStart(true);\n return editor.dom.getParent(selectionStart, listSelector, getClosestListHost(editor, selectionStart));\n };\n const isParentListSelected = (parentList, selectedBlocks) => isNonNullable(parentList) && selectedBlocks.length === 1 && selectedBlocks[0] === parentList;\n const findSubLists = parentList => filter$1(parentList.querySelectorAll(listSelector), isListNode);\n const getSelectedSubLists = editor => {\n const parentList = getParentList(editor);\n const selectedBlocks = editor.selection.getSelectedBlocks();\n if (isParentListSelected(parentList, selectedBlocks)) {\n return findSubLists(parentList);\n } else {\n return filter$1(selectedBlocks, elm => {\n return isListNode(elm) && parentList !== elm;\n });\n }\n };\n const findParentListItemsNodes = (editor, elms) => {\n const listItemsElms = global$2.map(elms, elm => {\n const parentLi = editor.dom.getParent(elm, 'li,dd,dt', getClosestListHost(editor, elm));\n return parentLi ? parentLi : elm;\n });\n return unique(listItemsElms);\n };\n const getSelectedListItems = editor => {\n const selectedBlocks = editor.selection.getSelectedBlocks();\n return filter$1(findParentListItemsNodes(editor, selectedBlocks), isListItemNode);\n };\n const getSelectedDlItems = editor => filter$1(getSelectedListItems(editor), isDlItemNode);\n const getClosestEditingHost = (editor, elm) => {\n const parentTableCell = editor.dom.getParents(elm, 'TD,TH');\n return parentTableCell.length > 0 ? parentTableCell[0] : editor.getBody();\n };\n const isListHost = (schema, node) => !isListNode(node) && !isListItemNode(node) && exists(listNames, listName => schema.isValidChild(node.nodeName, listName));\n const getClosestListHost = (editor, elm) => {\n const parentBlocks = editor.dom.getParents(elm, editor.dom.isBlock);\n const isNotForcedRootBlock = elm => elm.nodeName.toLowerCase() !== getForcedRootBlock(editor);\n const parentBlock = find(parentBlocks, elm => isNotForcedRootBlock(elm) && isListHost(editor.schema, elm));\n return parentBlock.getOr(editor.getBody());\n };\n const isListInsideAnLiWithFirstAndLastNotListElement = list => parent(list).exists(parent => isListItemNode(parent.dom) && firstChild(parent).exists(firstChild => !isListNode(firstChild.dom)) && lastChild(parent).exists(lastChild => !isListNode(lastChild.dom)));\n const findLastParentListNode = (editor, elm) => {\n const parentLists = editor.dom.getParents(elm, 'ol,ul', getClosestListHost(editor, elm));\n return last(parentLists);\n };\n const getSelectedLists = editor => {\n const firstList = findLastParentListNode(editor, editor.selection.getStart());\n const subsequentLists = filter$1(editor.selection.getSelectedBlocks(), isOlUlNode);\n return firstList.toArray().concat(subsequentLists);\n };\n const getParentLists = editor => {\n const elm = editor.selection.getStart();\n return editor.dom.getParents(elm, 'ol,ul', getClosestListHost(editor, elm));\n };\n const getSelectedListRoots = editor => {\n const selectedLists = getSelectedLists(editor);\n const parentLists = getParentLists(editor);\n return find(parentLists, p => isListInsideAnLiWithFirstAndLastNotListElement(SugarElement.fromDom(p))).fold(() => getUniqueListRoots(editor, selectedLists), l => [l]);\n };\n const getUniqueListRoots = (editor, lists) => {\n const listRoots = map(lists, list => findLastParentListNode(editor, list).getOr(list));\n return unique(listRoots);\n };\n\n const isCustomList = list => /\\btox\\-/.test(list.className);\n const inList = (parents, listName) => findUntil(parents, isListNode, isTableCellNode).exists(list => list.nodeName === listName && !isCustomList(list));\n const isWithinNonEditable = (editor, element) => element !== null && !editor.dom.isEditable(element);\n const selectionIsWithinNonEditableList = editor => {\n const parentList = getParentList(editor);\n return isWithinNonEditable(editor, parentList) || !editor.selection.isEditable();\n };\n const isWithinNonEditableList = (editor, element) => {\n const parentList = editor.dom.getParent(element, 'ol,ul,dl');\n return isWithinNonEditable(editor, parentList) || !editor.selection.isEditable();\n };\n const setNodeChangeHandler = (editor, nodeChangeHandler) => {\n const initialNode = editor.selection.getNode();\n nodeChangeHandler({\n parents: editor.dom.getParents(initialNode),\n element: initialNode\n });\n editor.on('NodeChange', nodeChangeHandler);\n return () => editor.off('NodeChange', nodeChangeHandler);\n };\n\n const fromElements = (elements, scope) => {\n const doc = scope || document;\n const fragment = doc.createDocumentFragment();\n each$1(elements, element => {\n fragment.appendChild(element.dom);\n });\n return SugarElement.fromDom(fragment);\n };\n\n const fireListEvent = (editor, action, element) => editor.dispatch('ListMutation', {\n action,\n element\n });\n\n const blank = r => s => s.replace(r, '');\n const trim = blank(/^\\s+|\\s+$/g);\n const isNotEmpty = s => s.length > 0;\n const isEmpty$1 = s => !isNotEmpty(s);\n\n const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n const internalSet = (dom, property, value) => {\n if (!isString(value)) {\n console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n const set = (element, property, value) => {\n const dom = element.dom;\n internalSet(dom, property, value);\n };\n\n const isList = el => is(el, 'OL,UL');\n const isListItem = el => is(el, 'LI');\n const hasFirstChildList = el => firstChild(el).exists(isList);\n const hasLastChildList = el => lastChild(el).exists(isList);\n\n const isEntryList = entry => 'listAttributes' in entry;\n const isEntryComment = entry => 'isComment' in entry;\n const isEntryFragment = entry => 'isFragment' in entry;\n const isIndented = entry => entry.depth > 0;\n const isSelected = entry => entry.isSelected;\n const cloneItemContent = li => {\n const children$1 = children(li);\n const content = hasLastChildList(li) ? children$1.slice(0, -1) : children$1;\n return map(content, deep);\n };\n const createEntry = (li, depth, isSelected) => parent(li).filter(isElement$1).map(list => ({\n depth,\n dirty: false,\n isSelected,\n content: cloneItemContent(li),\n itemAttributes: clone$1(li),\n listAttributes: clone$1(list),\n listType: name(list),\n isInPreviousLi: false\n }));\n\n const joinSegment = (parent, child) => {\n append$1(parent.item, child.list);\n };\n const joinSegments = segments => {\n for (let i = 1; i < segments.length; i++) {\n joinSegment(segments[i - 1], segments[i]);\n }\n };\n const appendSegments = (head$1, tail) => {\n lift2(last(head$1), head(tail), joinSegment);\n };\n const createSegment = (scope, listType) => {\n const segment = {\n list: SugarElement.fromTag(listType, scope),\n item: SugarElement.fromTag('li', scope)\n };\n append$1(segment.list, segment.item);\n return segment;\n };\n const createSegments = (scope, entry, size) => {\n const segments = [];\n for (let i = 0; i < size; i++) {\n segments.push(createSegment(scope, isEntryList(entry) ? entry.listType : entry.parentListType));\n }\n return segments;\n };\n const populateSegments = (segments, entry) => {\n for (let i = 0; i < segments.length - 1; i++) {\n set(segments[i].item, 'list-style-type', 'none');\n }\n last(segments).each(segment => {\n if (isEntryList(entry)) {\n setAll(segment.list, entry.listAttributes);\n setAll(segment.item, entry.itemAttributes);\n }\n append(segment.item, entry.content);\n });\n };\n const normalizeSegment = (segment, entry) => {\n if (name(segment.list) !== entry.listType) {\n segment.list = mutate(segment.list, entry.listType);\n }\n setAll(segment.list, entry.listAttributes);\n };\n const createItem = (scope, attr, content) => {\n const item = SugarElement.fromTag('li', scope);\n setAll(item, attr);\n append(item, content);\n return item;\n };\n const appendItem = (segment, item) => {\n append$1(segment.list, item);\n segment.item = item;\n };\n const writeShallow = (scope, cast, entry) => {\n const newCast = cast.slice(0, entry.depth);\n last(newCast).each(segment => {\n if (isEntryList(entry)) {\n const item = createItem(scope, entry.itemAttributes, entry.content);\n appendItem(segment, item);\n normalizeSegment(segment, entry);\n } else if (isEntryFragment(entry)) {\n append(segment.item, entry.content);\n } else {\n const item = SugarElement.fromHtml(``);\n append$1(segment.list, item);\n }\n });\n return newCast;\n };\n const writeDeep = (scope, cast, entry) => {\n const segments = createSegments(scope, entry, entry.depth - cast.length);\n joinSegments(segments);\n populateSegments(segments, entry);\n appendSegments(cast, segments);\n return cast.concat(segments);\n };\n const composeList = (scope, entries) => {\n let firstCommentEntryOpt = Optional.none();\n const cast = foldl(entries, (cast, entry, i) => {\n if (!isEntryComment(entry)) {\n return entry.depth > cast.length ? writeDeep(scope, cast, entry) : writeShallow(scope, cast, entry);\n } else {\n if (i === 0) {\n firstCommentEntryOpt = Optional.some(entry);\n return cast;\n }\n return writeShallow(scope, cast, entry);\n }\n }, []);\n firstCommentEntryOpt.each(firstCommentEntry => {\n const item = SugarElement.fromHtml(``);\n head(cast).each(fistCast => {\n prepend(fistCast.list, item);\n });\n });\n return head(cast).map(segment => segment.list);\n };\n\n const indentEntry = (indentation, entry) => {\n switch (indentation) {\n case 'Indent':\n entry.depth++;\n break;\n case 'Outdent':\n entry.depth--;\n break;\n case 'Flatten':\n entry.depth = 0;\n }\n entry.dirty = true;\n };\n\n const cloneListProperties = (target, source) => {\n if (isEntryList(target) && isEntryList(source)) {\n target.listType = source.listType;\n target.listAttributes = { ...source.listAttributes };\n }\n };\n const cleanListProperties = entry => {\n entry.listAttributes = filter(entry.listAttributes, (_value, key) => key !== 'start');\n };\n const closestSiblingEntry = (entries, start) => {\n const depth = entries[start].depth;\n const matches = entry => entry.depth === depth && !entry.dirty;\n const until = entry => entry.depth < depth;\n return findUntil(reverse(entries.slice(0, start)), matches, until).orThunk(() => findUntil(entries.slice(start + 1), matches, until));\n };\n const normalizeEntries = entries => {\n each$1(entries, (entry, i) => {\n closestSiblingEntry(entries, i).fold(() => {\n if (entry.dirty && isEntryList(entry)) {\n cleanListProperties(entry);\n }\n }, matchingEntry => cloneListProperties(entry, matchingEntry));\n });\n return entries;\n };\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n const parseSingleItem = (depth, itemSelection, selectionState, item) => {\n var _a;\n if (isComment(item)) {\n return [{\n depth: depth + 1,\n content: (_a = item.dom.nodeValue) !== null && _a !== void 0 ? _a : '',\n dirty: false,\n isSelected: false,\n isComment: true\n }];\n }\n itemSelection.each(selection => {\n if (eq(selection.start, item)) {\n selectionState.set(true);\n }\n });\n const currentItemEntry = createEntry(item, depth, selectionState.get());\n itemSelection.each(selection => {\n if (eq(selection.end, item)) {\n selectionState.set(false);\n }\n });\n const childListEntries = lastChild(item).filter(isList).map(list => parseList(depth, itemSelection, selectionState, list)).getOr([]);\n return currentItemEntry.toArray().concat(childListEntries);\n };\n const parseItem = (depth, itemSelection, selectionState, item) => firstChild(item).filter(isList).fold(() => parseSingleItem(depth, itemSelection, selectionState, item), list => {\n const parsedSiblings = foldl(children(item), (acc, liChild, i) => {\n if (i === 0) {\n return acc;\n } else {\n if (isListItem(liChild)) {\n return acc.concat(parseSingleItem(depth, itemSelection, selectionState, liChild));\n } else {\n const fragment = {\n isFragment: true,\n depth,\n content: [liChild],\n isSelected: false,\n dirty: false,\n parentListType: name(list)\n };\n return acc.concat(fragment);\n }\n }\n }, []);\n return parseList(depth, itemSelection, selectionState, list).concat(parsedSiblings);\n });\n const parseList = (depth, itemSelection, selectionState, list) => bind(children(list), element => {\n const parser = isList(element) ? parseList : parseItem;\n const newDepth = depth + 1;\n return parser(newDepth, itemSelection, selectionState, element);\n });\n const parseLists = (lists, itemSelection) => {\n const selectionState = Cell(false);\n const initialDepth = 0;\n return map(lists, list => ({\n sourceList: list,\n entries: parseList(initialDepth, itemSelection, selectionState, list)\n }));\n };\n\n const outdentedComposer = (editor, entries) => {\n const normalizedEntries = normalizeEntries(entries);\n return map(normalizedEntries, entry => {\n const content = !isEntryComment(entry) ? fromElements(entry.content) : fromElements([SugarElement.fromHtml(``)]);\n const listItemAttrs = isEntryList(entry) ? entry.itemAttributes : {};\n return SugarElement.fromDom(createTextBlock(editor, content.dom, listItemAttrs));\n });\n };\n const indentedComposer = (editor, entries) => {\n const normalizedEntries = normalizeEntries(entries);\n return composeList(editor.contentDocument, normalizedEntries).toArray();\n };\n const composeEntries = (editor, entries) => bind(groupBy(entries, isIndented), entries => {\n const groupIsIndented = head(entries).exists(isIndented);\n return groupIsIndented ? indentedComposer(editor, entries) : outdentedComposer(editor, entries);\n });\n const indentSelectedEntries = (entries, indentation) => {\n each$1(filter$1(entries, isSelected), entry => indentEntry(indentation, entry));\n };\n const getItemSelection = editor => {\n const selectedListItems = map(getSelectedListItems(editor), SugarElement.fromDom);\n return lift2(find(selectedListItems, not(hasFirstChildList)), find(reverse(selectedListItems), not(hasFirstChildList)), (start, end) => ({\n start,\n end\n }));\n };\n const listIndentation = (editor, lists, indentation) => {\n const entrySets = parseLists(lists, getItemSelection(editor));\n each$1(entrySets, entrySet => {\n indentSelectedEntries(entrySet.entries, indentation);\n const composedLists = composeEntries(editor, entrySet.entries);\n each$1(composedLists, composedList => {\n fireListEvent(editor, indentation === 'Indent' ? 'IndentList' : 'OutdentList', composedList.dom);\n });\n before(entrySet.sourceList, composedLists);\n remove(entrySet.sourceList);\n });\n };\n\n const selectionIndentation = (editor, indentation) => {\n const lists = fromDom(getSelectedListRoots(editor));\n const dlItems = fromDom(getSelectedDlItems(editor));\n let isHandled = false;\n if (lists.length || dlItems.length) {\n const bookmark = editor.selection.getBookmark();\n listIndentation(editor, lists, indentation);\n dlIndentation(editor, indentation, dlItems);\n editor.selection.moveToBookmark(bookmark);\n editor.selection.setRng(normalizeRange(editor.selection.getRng()));\n editor.nodeChanged();\n isHandled = true;\n }\n return isHandled;\n };\n const handleIndentation = (editor, indentation) => !selectionIsWithinNonEditableList(editor) && selectionIndentation(editor, indentation);\n const indentListSelection = editor => handleIndentation(editor, 'Indent');\n const outdentListSelection = editor => handleIndentation(editor, 'Outdent');\n const flattenListSelection = editor => handleIndentation(editor, 'Flatten');\n\n const zeroWidth = '\\uFEFF';\n const isZwsp = char => char === zeroWidth;\n\n const ancestor$1 = (scope, predicate, isRoot) => ancestor$3(scope, predicate, isRoot).isSome();\n\n const ancestor = (element, target) => ancestor$1(element, curry(eq, target));\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.BookmarkManager');\n\n const DOM$1 = global$3.DOM;\n const createBookmark = rng => {\n const bookmark = {};\n const setupEndPoint = start => {\n let container = rng[start ? 'startContainer' : 'endContainer'];\n let offset = rng[start ? 'startOffset' : 'endOffset'];\n if (isElement(container)) {\n const offsetNode = DOM$1.create('span', { 'data-mce-type': 'bookmark' });\n if (container.hasChildNodes()) {\n offset = Math.min(offset, container.childNodes.length - 1);\n if (start) {\n container.insertBefore(offsetNode, container.childNodes[offset]);\n } else {\n DOM$1.insertAfter(offsetNode, container.childNodes[offset]);\n }\n } else {\n container.appendChild(offsetNode);\n }\n container = offsetNode;\n offset = 0;\n }\n bookmark[start ? 'startContainer' : 'endContainer'] = container;\n bookmark[start ? 'startOffset' : 'endOffset'] = offset;\n };\n setupEndPoint(true);\n if (!rng.collapsed) {\n setupEndPoint();\n }\n return bookmark;\n };\n const resolveBookmark = bookmark => {\n const restoreEndPoint = start => {\n const nodeIndex = container => {\n var _a;\n let node = (_a = container.parentNode) === null || _a === void 0 ? void 0 : _a.firstChild;\n let idx = 0;\n while (node) {\n if (node === container) {\n return idx;\n }\n if (!isElement(node) || node.getAttribute('data-mce-type') !== 'bookmark') {\n idx++;\n }\n node = node.nextSibling;\n }\n return -1;\n };\n let container = bookmark[start ? 'startContainer' : 'endContainer'];\n let offset = bookmark[start ? 'startOffset' : 'endOffset'];\n if (!container) {\n return;\n }\n if (isElement(container) && container.parentNode) {\n const node = container;\n offset = nodeIndex(container);\n container = container.parentNode;\n DOM$1.remove(node);\n if (!container.hasChildNodes() && DOM$1.isBlock(container)) {\n container.appendChild(DOM$1.create('br'));\n }\n }\n bookmark[start ? 'startContainer' : 'endContainer'] = container;\n bookmark[start ? 'startOffset' : 'endOffset'] = offset;\n };\n restoreEndPoint(true);\n restoreEndPoint();\n const rng = DOM$1.createRng();\n rng.setStart(bookmark.startContainer, bookmark.startOffset);\n if (bookmark.endContainer) {\n rng.setEnd(bookmark.endContainer, bookmark.endOffset);\n }\n return normalizeRange(rng);\n };\n\n const listToggleActionFromListName = listName => {\n switch (listName) {\n case 'UL':\n return 'ToggleUlList';\n case 'OL':\n return 'ToggleOlList';\n case 'DL':\n return 'ToggleDLList';\n }\n };\n\n const updateListStyle = (dom, el, detail) => {\n const type = detail['list-style-type'] ? detail['list-style-type'] : null;\n dom.setStyle(el, 'list-style-type', type);\n };\n const setAttribs = (elm, attrs) => {\n global$2.each(attrs, (value, key) => {\n elm.setAttribute(key, value);\n });\n };\n const updateListAttrs = (dom, el, detail) => {\n setAttribs(el, detail['list-attributes']);\n global$2.each(dom.select('li', el), li => {\n setAttribs(li, detail['list-item-attributes']);\n });\n };\n const updateListWithDetails = (dom, el, detail) => {\n updateListStyle(dom, el, detail);\n updateListAttrs(dom, el, detail);\n };\n const removeStyles = (dom, element, styles) => {\n global$2.each(styles, style => dom.setStyle(element, style, ''));\n };\n const isInline = (editor, node) => isNonNullable(node) && !isBlock(node, editor.schema.getBlockElements());\n const getEndPointNode = (editor, rng, start, root) => {\n let container = rng[start ? 'startContainer' : 'endContainer'];\n const offset = rng[start ? 'startOffset' : 'endOffset'];\n if (isElement(container)) {\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n }\n if (!start && isBr(container.nextSibling)) {\n container = container.nextSibling;\n }\n const findBlockAncestor = node => {\n while (!editor.dom.isBlock(node) && node.parentNode && root !== node) {\n node = node.parentNode;\n }\n return node;\n };\n const findBetterContainer = (container, forward) => {\n var _a;\n const walker = new global$5(container, findBlockAncestor(container));\n const dir = forward ? 'next' : 'prev';\n let node;\n while (node = walker[dir]()) {\n if (!(isVoid(editor, node) || isZwsp(node.textContent) || ((_a = node.textContent) === null || _a === void 0 ? void 0 : _a.length) === 0)) {\n return Optional.some(node);\n }\n }\n return Optional.none();\n };\n if (start && isTextNode$1(container)) {\n if (isZwsp(container.textContent)) {\n container = findBetterContainer(container, false).getOr(container);\n } else {\n if (container.parentNode !== null && isInline(editor, container.parentNode)) {\n container = container.parentNode;\n }\n while (container.previousSibling !== null && (isInline(editor, container.previousSibling) || isTextNode$1(container.previousSibling))) {\n container = container.previousSibling;\n }\n }\n }\n if (!start && isTextNode$1(container)) {\n if (isZwsp(container.textContent)) {\n container = findBetterContainer(container, true).getOr(container);\n } else {\n if (container.parentNode !== null && isInline(editor, container.parentNode)) {\n container = container.parentNode;\n }\n while (container.nextSibling !== null && (isInline(editor, container.nextSibling) || isTextNode$1(container.nextSibling))) {\n container = container.nextSibling;\n }\n }\n }\n while (container.parentNode !== root) {\n const parent = container.parentNode;\n if (isTextBlock(editor, container)) {\n return container;\n }\n if (/^(TD|TH)$/.test(parent.nodeName)) {\n return container;\n }\n container = parent;\n }\n return container;\n };\n const getSelectedTextBlocks = (editor, rng, root) => {\n const textBlocks = [];\n const dom = editor.dom;\n const startNode = getEndPointNode(editor, rng, true, root);\n const endNode = getEndPointNode(editor, rng, false, root);\n let block;\n const siblings = [];\n for (let node = startNode; node; node = node.nextSibling) {\n siblings.push(node);\n if (node === endNode) {\n break;\n }\n }\n global$2.each(siblings, node => {\n var _a;\n if (isTextBlock(editor, node)) {\n textBlocks.push(node);\n block = null;\n return;\n }\n if (dom.isBlock(node) || isBr(node)) {\n if (isBr(node)) {\n dom.remove(node);\n }\n block = null;\n return;\n }\n const nextSibling = node.nextSibling;\n if (global$1.isBookmarkNode(node)) {\n if (isListNode(nextSibling) || isTextBlock(editor, nextSibling) || !nextSibling && node.parentNode === root) {\n block = null;\n return;\n }\n }\n if (!block) {\n block = dom.create('p');\n (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(block, node);\n textBlocks.push(block);\n }\n block.appendChild(node);\n });\n return textBlocks;\n };\n const hasCompatibleStyle = (dom, sib, detail) => {\n const sibStyle = dom.getStyle(sib, 'list-style-type');\n let detailStyle = detail ? detail['list-style-type'] : '';\n detailStyle = detailStyle === null ? '' : detailStyle;\n return sibStyle === detailStyle;\n };\n const getRootSearchStart = (editor, range) => {\n const start = editor.selection.getStart(true);\n const startPoint = getEndPointNode(editor, range, true, editor.getBody());\n if (ancestor(SugarElement.fromDom(startPoint), SugarElement.fromDom(range.commonAncestorContainer))) {\n return range.commonAncestorContainer;\n } else {\n return start;\n }\n };\n const applyList = (editor, listName, detail) => {\n const rng = editor.selection.getRng();\n let listItemName = 'LI';\n const root = getClosestListHost(editor, getRootSearchStart(editor, rng));\n const dom = editor.dom;\n if (dom.getContentEditable(editor.selection.getNode()) === 'false') {\n return;\n }\n listName = listName.toUpperCase();\n if (listName === 'DL') {\n listItemName = 'DT';\n }\n const bookmark = createBookmark(rng);\n const selectedTextBlocks = filter$1(getSelectedTextBlocks(editor, rng, root), editor.dom.isEditable);\n global$2.each(selectedTextBlocks, block => {\n let listBlock;\n const sibling = block.previousSibling;\n const parent = block.parentNode;\n if (!isListItemNode(parent)) {\n if (sibling && isListNode(sibling) && sibling.nodeName === listName && hasCompatibleStyle(dom, sibling, detail)) {\n listBlock = sibling;\n block = dom.rename(block, listItemName);\n sibling.appendChild(block);\n } else {\n listBlock = dom.create(listName);\n parent.insertBefore(listBlock, block);\n listBlock.appendChild(block);\n block = dom.rename(block, listItemName);\n }\n removeStyles(dom, block, [\n 'margin',\n 'margin-right',\n 'margin-bottom',\n 'margin-left',\n 'margin-top',\n 'padding',\n 'padding-right',\n 'padding-bottom',\n 'padding-left',\n 'padding-top'\n ]);\n updateListWithDetails(dom, listBlock, detail);\n mergeWithAdjacentLists(editor.dom, listBlock);\n }\n });\n editor.selection.setRng(resolveBookmark(bookmark));\n };\n const isValidLists = (list1, list2) => {\n return isListNode(list1) && list1.nodeName === (list2 === null || list2 === void 0 ? void 0 : list2.nodeName);\n };\n const hasSameListStyle = (dom, list1, list2) => {\n const targetStyle = dom.getStyle(list1, 'list-style-type', true);\n const style = dom.getStyle(list2, 'list-style-type', true);\n return targetStyle === style;\n };\n const hasSameClasses = (elm1, elm2) => {\n return elm1.className === elm2.className;\n };\n const shouldMerge = (dom, list1, list2) => {\n return isValidLists(list1, list2) && hasSameListStyle(dom, list1, list2) && hasSameClasses(list1, list2);\n };\n const mergeWithAdjacentLists = (dom, listBlock) => {\n let node;\n let sibling = listBlock.nextSibling;\n if (shouldMerge(dom, listBlock, sibling)) {\n const liSibling = sibling;\n while (node = liSibling.firstChild) {\n listBlock.appendChild(node);\n }\n dom.remove(liSibling);\n }\n sibling = listBlock.previousSibling;\n if (shouldMerge(dom, listBlock, sibling)) {\n const liSibling = sibling;\n while (node = liSibling.lastChild) {\n listBlock.insertBefore(node, listBlock.firstChild);\n }\n dom.remove(liSibling);\n }\n };\n const updateList$1 = (editor, list, listName, detail) => {\n if (list.nodeName !== listName) {\n const newList = editor.dom.rename(list, listName);\n updateListWithDetails(editor.dom, newList, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), newList);\n } else {\n updateListWithDetails(editor.dom, list, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), list);\n }\n };\n const updateCustomList = (editor, list, listName, detail) => {\n list.classList.forEach((cls, _, classList) => {\n if (cls.startsWith('tox-')) {\n classList.remove(cls);\n if (classList.length === 0) {\n list.removeAttribute('class');\n }\n }\n });\n if (list.nodeName !== listName) {\n const newList = editor.dom.rename(list, listName);\n updateListWithDetails(editor.dom, newList, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), newList);\n } else {\n updateListWithDetails(editor.dom, list, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), list);\n }\n };\n const toggleMultipleLists = (editor, parentList, lists, listName, detail) => {\n const parentIsList = isListNode(parentList);\n if (parentIsList && parentList.nodeName === listName && !hasListStyleDetail(detail) && !isCustomList(parentList)) {\n flattenListSelection(editor);\n } else {\n applyList(editor, listName, detail);\n const bookmark = createBookmark(editor.selection.getRng());\n const allLists = parentIsList ? [\n parentList,\n ...lists\n ] : lists;\n const updateFunction = parentIsList && isCustomList(parentList) ? updateCustomList : updateList$1;\n global$2.each(allLists, elm => {\n updateFunction(editor, elm, listName, detail);\n });\n editor.selection.setRng(resolveBookmark(bookmark));\n }\n };\n const hasListStyleDetail = detail => {\n return 'list-style-type' in detail;\n };\n const toggleSingleList = (editor, parentList, listName, detail) => {\n if (parentList === editor.getBody()) {\n return;\n }\n if (parentList) {\n if (parentList.nodeName === listName && !hasListStyleDetail(detail) && !isCustomList(parentList)) {\n flattenListSelection(editor);\n } else {\n const bookmark = createBookmark(editor.selection.getRng());\n if (isCustomList(parentList)) {\n parentList.classList.forEach((cls, _, classList) => {\n if (cls.startsWith('tox-')) {\n classList.remove(cls);\n if (classList.length === 0) {\n parentList.removeAttribute('class');\n }\n }\n });\n }\n updateListWithDetails(editor.dom, parentList, detail);\n const newList = editor.dom.rename(parentList, listName);\n mergeWithAdjacentLists(editor.dom, newList);\n editor.selection.setRng(resolveBookmark(bookmark));\n applyList(editor, listName, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), newList);\n }\n } else {\n applyList(editor, listName, detail);\n fireListEvent(editor, listToggleActionFromListName(listName), parentList);\n }\n };\n const toggleList = (editor, listName, _detail) => {\n const parentList = getParentList(editor);\n if (isWithinNonEditableList(editor, parentList)) {\n return;\n }\n const selectedSubLists = getSelectedSubLists(editor);\n const detail = isObject(_detail) ? _detail : {};\n if (selectedSubLists.length > 0) {\n toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail);\n } else {\n toggleSingleList(editor, parentList, listName, detail);\n }\n };\n\n const DOM = global$3.DOM;\n const normalizeList = (dom, list) => {\n const parentNode = list.parentElement;\n if (parentNode && parentNode.nodeName === 'LI' && parentNode.firstChild === list) {\n const sibling = parentNode.previousSibling;\n if (sibling && sibling.nodeName === 'LI') {\n sibling.appendChild(list);\n if (isEmpty$2(dom, parentNode)) {\n DOM.remove(parentNode);\n }\n } else {\n DOM.setStyle(parentNode, 'listStyleType', 'none');\n }\n }\n if (isListNode(parentNode)) {\n const sibling = parentNode.previousSibling;\n if (sibling && sibling.nodeName === 'LI') {\n sibling.appendChild(list);\n }\n }\n };\n const normalizeLists = (dom, element) => {\n const lists = global$2.grep(dom.select('ol,ul', element));\n global$2.each(lists, list => {\n normalizeList(dom, list);\n });\n };\n\n const findNextCaretContainer = (editor, rng, isForward, root) => {\n let node = rng.startContainer;\n const offset = rng.startOffset;\n if (isTextNode$1(node) && (isForward ? offset < node.data.length : offset > 0)) {\n return node;\n }\n const nonEmptyBlocks = editor.schema.getNonEmptyElements();\n if (isElement(node)) {\n node = global$6.getNode(node, offset);\n }\n const walker = new global$5(node, root);\n if (isForward) {\n if (isBogusBr(editor.dom, node)) {\n walker.next();\n }\n }\n const walkFn = isForward ? walker.next.bind(walker) : walker.prev2.bind(walker);\n while (node = walkFn()) {\n if (node.nodeName === 'LI' && !node.hasChildNodes()) {\n return node;\n }\n if (nonEmptyBlocks[node.nodeName]) {\n return node;\n }\n if (isTextNode$1(node) && node.data.length > 0) {\n return node;\n }\n }\n return null;\n };\n const hasOnlyOneBlockChild = (dom, elm) => {\n const childNodes = elm.childNodes;\n return childNodes.length === 1 && !isListNode(childNodes[0]) && dom.isBlock(childNodes[0]);\n };\n const isUnwrappable = node => Optional.from(node).map(SugarElement.fromDom).filter(isHTMLElement).exists(el => isEditable(el) && !contains$1(['details'], name(el)));\n const unwrapSingleBlockChild = (dom, elm) => {\n if (hasOnlyOneBlockChild(dom, elm) && isUnwrappable(elm.firstChild)) {\n dom.remove(elm.firstChild, true);\n }\n };\n const moveChildren = (dom, fromElm, toElm) => {\n let node;\n const targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm;\n unwrapSingleBlockChild(dom, fromElm);\n if (!isEmpty$2(dom, fromElm, true)) {\n while (node = fromElm.firstChild) {\n targetElm.appendChild(node);\n }\n }\n };\n const mergeLiElements = (dom, fromElm, toElm) => {\n let listNode;\n const ul = fromElm.parentNode;\n if (!isChildOfBody(dom, fromElm) || !isChildOfBody(dom, toElm)) {\n return;\n }\n if (isListNode(toElm.lastChild)) {\n listNode = toElm.lastChild;\n }\n if (ul === toElm.lastChild) {\n if (isBr(ul.previousSibling)) {\n dom.remove(ul.previousSibling);\n }\n }\n const node = toElm.lastChild;\n if (node && isBr(node) && fromElm.hasChildNodes()) {\n dom.remove(node);\n }\n if (isEmpty$2(dom, toElm, true)) {\n empty(SugarElement.fromDom(toElm));\n }\n moveChildren(dom, fromElm, toElm);\n if (listNode) {\n toElm.appendChild(listNode);\n }\n const contains$1 = contains(SugarElement.fromDom(toElm), SugarElement.fromDom(fromElm));\n const nestedLists = contains$1 ? dom.getParents(fromElm, isListNode, toElm) : [];\n dom.remove(fromElm);\n each$1(nestedLists, list => {\n if (isEmpty$2(dom, list) && list !== dom.getRoot()) {\n dom.remove(list);\n }\n });\n };\n const mergeIntoEmptyLi = (editor, fromLi, toLi) => {\n empty(SugarElement.fromDom(toLi));\n mergeLiElements(editor.dom, fromLi, toLi);\n editor.selection.setCursorLocation(toLi, 0);\n };\n const mergeForward = (editor, rng, fromLi, toLi) => {\n const dom = editor.dom;\n if (dom.isEmpty(toLi)) {\n mergeIntoEmptyLi(editor, fromLi, toLi);\n } else {\n const bookmark = createBookmark(rng);\n mergeLiElements(dom, fromLi, toLi);\n editor.selection.setRng(resolveBookmark(bookmark));\n }\n };\n const mergeBackward = (editor, rng, fromLi, toLi) => {\n const bookmark = createBookmark(rng);\n mergeLiElements(editor.dom, fromLi, toLi);\n const resolvedBookmark = resolveBookmark(bookmark);\n editor.selection.setRng(resolvedBookmark);\n };\n const backspaceDeleteFromListToListCaret = (editor, isForward) => {\n const dom = editor.dom, selection = editor.selection;\n const selectionStartElm = selection.getStart();\n const root = getClosestEditingHost(editor, selectionStartElm);\n const li = dom.getParent(selection.getStart(), 'LI', root);\n if (li) {\n const ul = li.parentElement;\n if (ul === editor.getBody() && isEmpty$2(dom, ul)) {\n return true;\n }\n const rng = normalizeRange(selection.getRng());\n const otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);\n const willMergeParentIntoChild = otherLi && (isForward ? dom.isChildOf(li, otherLi) : dom.isChildOf(otherLi, li));\n if (otherLi && otherLi !== li && !willMergeParentIntoChild) {\n editor.undoManager.transact(() => {\n if (isForward) {\n mergeForward(editor, rng, otherLi, li);\n } else {\n if (isFirstChild(li)) {\n outdentListSelection(editor);\n } else {\n mergeBackward(editor, rng, li, otherLi);\n }\n }\n });\n return true;\n } else if (willMergeParentIntoChild && !isForward && otherLi !== li) {\n editor.undoManager.transact(() => {\n if (rng.commonAncestorContainer.parentElement) {\n const bookmark = createBookmark(rng);\n const oldParentElRef = rng.commonAncestorContainer.parentElement;\n moveChildren(dom, rng.commonAncestorContainer.parentElement, otherLi);\n oldParentElRef.remove();\n const resolvedBookmark = resolveBookmark(bookmark);\n editor.selection.setRng(resolvedBookmark);\n }\n });\n return true;\n } else if (!otherLi) {\n if (!isForward && rng.startOffset === 0 && rng.endOffset === 0) {\n editor.undoManager.transact(() => {\n flattenListSelection(editor);\n });\n return true;\n }\n }\n }\n return false;\n };\n const removeBlock = (dom, block, root) => {\n const parentBlock = dom.getParent(block.parentNode, dom.isBlock, root);\n dom.remove(block);\n if (parentBlock && dom.isEmpty(parentBlock)) {\n dom.remove(parentBlock);\n }\n };\n const backspaceDeleteIntoListCaret = (editor, isForward) => {\n const dom = editor.dom;\n const selectionStartElm = editor.selection.getStart();\n const root = getClosestEditingHost(editor, selectionStartElm);\n const block = dom.getParent(selectionStartElm, dom.isBlock, root);\n if (block && dom.isEmpty(block, undefined, { checkRootAsContent: true })) {\n const rng = normalizeRange(editor.selection.getRng());\n const otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);\n if (otherLi) {\n const findValidElement = element => contains$1([\n 'td',\n 'th',\n 'caption'\n ], name(element));\n const findRoot = node => node.dom === root;\n const otherLiCell = closest$2(SugarElement.fromDom(otherLi), findValidElement, findRoot);\n const caretCell = closest$2(SugarElement.fromDom(rng.startContainer), findValidElement, findRoot);\n if (!equals(otherLiCell, caretCell, eq)) {\n return false;\n }\n editor.undoManager.transact(() => {\n const parentNode = otherLi.parentNode;\n removeBlock(dom, block, root);\n mergeWithAdjacentLists(dom, parentNode);\n editor.selection.select(otherLi, true);\n editor.selection.collapse(isForward);\n });\n return true;\n }\n }\n return false;\n };\n const backspaceDeleteCaret = (editor, isForward) => {\n return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward);\n };\n const hasListSelection = editor => {\n const selectionStartElm = editor.selection.getStart();\n const root = getClosestEditingHost(editor, selectionStartElm);\n const startListParent = editor.dom.getParent(selectionStartElm, 'LI,DT,DD', root);\n return startListParent || getSelectedListItems(editor).length > 0;\n };\n const backspaceDeleteRange = editor => {\n if (hasListSelection(editor)) {\n editor.undoManager.transact(() => {\n let shouldFireInput = true;\n const inputHandler = () => shouldFireInput = false;\n editor.on('input', inputHandler);\n editor.execCommand('Delete');\n editor.off('input', inputHandler);\n if (shouldFireInput) {\n editor.dispatch('input');\n }\n normalizeLists(editor.dom, editor.getBody());\n });\n return true;\n }\n return false;\n };\n const backspaceDelete = (editor, isForward) => {\n const selection = editor.selection;\n return !isWithinNonEditableList(editor, selection.getNode()) && (selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor));\n };\n const setup$2 = editor => {\n editor.on('ExecCommand', e => {\n const cmd = e.command.toLowerCase();\n if ((cmd === 'delete' || cmd === 'forwarddelete') && hasListSelection(editor)) {\n normalizeLists(editor.dom, editor.getBody());\n }\n });\n editor.on('keydown', e => {\n if (e.keyCode === global$4.BACKSPACE) {\n if (backspaceDelete(editor, false)) {\n e.preventDefault();\n }\n } else if (e.keyCode === global$4.DELETE) {\n if (backspaceDelete(editor, true)) {\n e.preventDefault();\n }\n }\n });\n };\n\n const get = editor => ({\n backspaceDelete: isForward => {\n backspaceDelete(editor, isForward);\n }\n });\n\n const updateList = (editor, update) => {\n const parentList = getParentList(editor);\n if (parentList === null || isWithinNonEditableList(editor, parentList)) {\n return;\n }\n editor.undoManager.transact(() => {\n if (isObject(update.styles)) {\n editor.dom.setStyles(parentList, update.styles);\n }\n if (isObject(update.attrs)) {\n each(update.attrs, (v, k) => editor.dom.setAttrib(parentList, k, v));\n }\n });\n };\n\n const parseAlphabeticBase26 = str => {\n const chars = reverse(trim(str).split(''));\n const values = map(chars, (char, i) => {\n const charValue = char.toUpperCase().charCodeAt(0) - 'A'.charCodeAt(0) + 1;\n return Math.pow(26, i) * charValue;\n });\n return foldl(values, (sum, v) => sum + v, 0);\n };\n const composeAlphabeticBase26 = value => {\n value--;\n if (value < 0) {\n return '';\n } else {\n const remainder = value % 26;\n const quotient = Math.floor(value / 26);\n const rest = composeAlphabeticBase26(quotient);\n const char = String.fromCharCode('A'.charCodeAt(0) + remainder);\n return rest + char;\n }\n };\n const isUppercase = str => /^[A-Z]+$/.test(str);\n const isLowercase = str => /^[a-z]+$/.test(str);\n const isNumeric = str => /^[0-9]+$/.test(str);\n const deduceListType = start => {\n if (isNumeric(start)) {\n return 2;\n } else if (isUppercase(start)) {\n return 0;\n } else if (isLowercase(start)) {\n return 1;\n } else if (isEmpty$1(start)) {\n return 3;\n } else {\n return 4;\n }\n };\n const parseStartValue = start => {\n switch (deduceListType(start)) {\n case 2:\n return Optional.some({\n listStyleType: Optional.none(),\n start\n });\n case 0:\n return Optional.some({\n listStyleType: Optional.some('upper-alpha'),\n start: parseAlphabeticBase26(start).toString()\n });\n case 1:\n return Optional.some({\n listStyleType: Optional.some('lower-alpha'),\n start: parseAlphabeticBase26(start).toString()\n });\n case 3:\n return Optional.some({\n listStyleType: Optional.none(),\n start: ''\n });\n case 4:\n return Optional.none();\n }\n };\n const parseDetail = detail => {\n const start = parseInt(detail.start, 10);\n if (is$2(detail.listStyleType, 'upper-alpha')) {\n return composeAlphabeticBase26(start);\n } else if (is$2(detail.listStyleType, 'lower-alpha')) {\n return composeAlphabeticBase26(start).toLowerCase();\n } else {\n return detail.start;\n }\n };\n\n const open = editor => {\n const currentList = getParentList(editor);\n if (!isOlNode(currentList) || isWithinNonEditableList(editor, currentList)) {\n return;\n }\n editor.windowManager.open({\n title: 'List Properties',\n body: {\n type: 'panel',\n items: [{\n type: 'input',\n name: 'start',\n label: 'Start list at number',\n inputMode: 'numeric'\n }]\n },\n initialData: {\n start: parseDetail({\n start: editor.dom.getAttrib(currentList, 'start', '1'),\n listStyleType: Optional.from(editor.dom.getStyle(currentList, 'list-style-type'))\n })\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n onSubmit: api => {\n const data = api.getData();\n parseStartValue(data.start).each(detail => {\n editor.execCommand('mceListUpdate', false, {\n attrs: { start: detail.start === '1' ? '' : detail.start },\n styles: { 'list-style-type': detail.listStyleType.getOr('') }\n });\n });\n api.close();\n }\n });\n };\n\n const queryListCommandState = (editor, listName) => () => {\n const parentList = getParentList(editor);\n return isNonNullable(parentList) && parentList.nodeName === listName;\n };\n const registerDialog = editor => {\n editor.addCommand('mceListProps', () => {\n open(editor);\n });\n };\n const register$2 = editor => {\n editor.on('BeforeExecCommand', e => {\n const cmd = e.command.toLowerCase();\n if (cmd === 'indent') {\n indentListSelection(editor);\n } else if (cmd === 'outdent') {\n outdentListSelection(editor);\n }\n });\n editor.addCommand('InsertUnorderedList', (ui, detail) => {\n toggleList(editor, 'UL', detail);\n });\n editor.addCommand('InsertOrderedList', (ui, detail) => {\n toggleList(editor, 'OL', detail);\n });\n editor.addCommand('InsertDefinitionList', (ui, detail) => {\n toggleList(editor, 'DL', detail);\n });\n editor.addCommand('RemoveList', () => {\n flattenListSelection(editor);\n });\n registerDialog(editor);\n editor.addCommand('mceListUpdate', (ui, detail) => {\n if (isObject(detail)) {\n updateList(editor, detail);\n }\n });\n editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState(editor, 'UL'));\n editor.addQueryStateHandler('InsertOrderedList', queryListCommandState(editor, 'OL'));\n editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState(editor, 'DL'));\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.html.Node');\n\n const isTextNode = node => node.type === 3;\n const isEmpty = nodeBuffer => nodeBuffer.length === 0;\n const wrapInvalidChildren = list => {\n const insertListItem = (buffer, refNode) => {\n const li = global.create('li');\n each$1(buffer, node => li.append(node));\n if (refNode) {\n list.insert(li, refNode, true);\n } else {\n list.append(li);\n }\n };\n const reducer = (buffer, node) => {\n if (isTextNode(node)) {\n return [\n ...buffer,\n node\n ];\n } else if (!isEmpty(buffer) && !isTextNode(node)) {\n insertListItem(buffer, node);\n return [];\n } else {\n return buffer;\n }\n };\n const restBuffer = foldl(list.children(), reducer, []);\n if (!isEmpty(restBuffer)) {\n insertListItem(restBuffer);\n }\n };\n const setup$1 = editor => {\n editor.on('PreInit', () => {\n const {parser} = editor;\n parser.addNodeFilter('ul,ol', nodes => each$1(nodes, wrapInvalidChildren));\n });\n };\n\n const setupTabKey = editor => {\n editor.on('keydown', e => {\n if (e.keyCode !== global$4.TAB || global$4.metaKeyPressed(e)) {\n return;\n }\n editor.undoManager.transact(() => {\n if (e.shiftKey ? outdentListSelection(editor) : indentListSelection(editor)) {\n e.preventDefault();\n }\n });\n });\n };\n const setup = editor => {\n if (shouldIndentOnTab(editor)) {\n setupTabKey(editor);\n }\n setup$2(editor);\n };\n\n const setupToggleButtonHandler = (editor, listName) => api => {\n const toggleButtonHandler = e => {\n api.setActive(inList(e.parents, listName));\n api.setEnabled(!isWithinNonEditableList(editor, e.element) && editor.selection.isEditable());\n };\n api.setEnabled(editor.selection.isEditable());\n return setNodeChangeHandler(editor, toggleButtonHandler);\n };\n const register$1 = editor => {\n const exec = command => () => editor.execCommand(command);\n if (!editor.hasPlugin('advlist')) {\n editor.ui.registry.addToggleButton('numlist', {\n icon: 'ordered-list',\n active: false,\n tooltip: 'Numbered list',\n onAction: exec('InsertOrderedList'),\n onSetup: setupToggleButtonHandler(editor, 'OL')\n });\n editor.ui.registry.addToggleButton('bullist', {\n icon: 'unordered-list',\n active: false,\n tooltip: 'Bullet list',\n onAction: exec('InsertUnorderedList'),\n onSetup: setupToggleButtonHandler(editor, 'UL')\n });\n }\n };\n\n const setupMenuButtonHandler = (editor, listName) => api => {\n const menuButtonHandler = e => api.setEnabled(inList(e.parents, listName) && !isWithinNonEditableList(editor, e.element));\n return setNodeChangeHandler(editor, menuButtonHandler);\n };\n const register = editor => {\n const listProperties = {\n text: 'List properties...',\n icon: 'ordered-list',\n onAction: () => editor.execCommand('mceListProps'),\n onSetup: setupMenuButtonHandler(editor, 'OL')\n };\n editor.ui.registry.addMenuItem('listprops', listProperties);\n editor.ui.registry.addContextMenu('lists', {\n update: node => {\n const parentList = getParentList(editor, node);\n return isOlNode(parentList) ? ['listprops'] : [];\n }\n });\n };\n\n var Plugin = () => {\n global$7.add('lists', editor => {\n register$3(editor);\n setup$1(editor);\n if (!editor.hasPlugin('rtc', true)) {\n setup(editor);\n register$2(editor);\n } else {\n registerDialog(editor);\n }\n register$1(editor);\n register(editor);\n return get(editor);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"lists\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/lists')\n// ES2015:\n// import 'tinymce/plugins/lists'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.0 (TBD)\n */\n\n(function () {\n 'use strict';\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq = t => a => t === a;\n const isString = isType('string');\n const isObject = isType('object');\n const isArray = isType('array');\n const isNull = eq(null);\n const isBoolean = isSimpleType('boolean');\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isArrayOf = (value, pred) => {\n if (isArray(value)) {\n for (let i = 0, len = value.length; i < len; ++i) {\n if (!pred(value[i])) {\n return false;\n }\n }\n return true;\n }\n return false;\n };\n\n const noop = () => {\n };\n const constant = value => {\n return () => {\n return value;\n };\n };\n const tripleEquals = (a, b) => {\n return a === b;\n };\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativeIndexOf = Array.prototype.indexOf;\n const nativePush = Array.prototype.push;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const contains = (xs, x) => rawIndexOf(xs, x) > -1;\n const map = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each$1 = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const foldl = (xs, f, acc) => {\n each$1(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind = (xs, f) => flatten(map(xs, f));\n const findMap = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n const r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n const is = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n const cat = arr => {\n const r = [];\n const push = x => {\n r.push(x);\n };\n for (let i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n const option = name => editor => editor.options.get(name);\n const register$1 = editor => {\n const registerOption = editor.options.register;\n registerOption('link_assume_external_targets', {\n processor: value => {\n const valid = isString(value) || isBoolean(value);\n if (valid) {\n if (value === true) {\n return {\n value: 1,\n valid\n };\n } else if (value === 'http' || value === 'https') {\n return {\n value,\n valid\n };\n } else {\n return {\n value: 0,\n valid\n };\n }\n } else {\n return {\n valid: false,\n message: 'Must be a string or a boolean.'\n };\n }\n },\n default: false\n });\n registerOption('link_context_toolbar', {\n processor: 'boolean',\n default: false\n });\n registerOption('link_list', { processor: value => isString(value) || isFunction(value) || isArrayOf(value, isObject) });\n registerOption('link_default_target', { processor: 'string' });\n registerOption('link_default_protocol', {\n processor: 'string',\n default: 'https'\n });\n registerOption('link_target_list', {\n processor: value => isBoolean(value) || isArrayOf(value, isObject),\n default: true\n });\n registerOption('link_rel_list', {\n processor: 'object[]',\n default: []\n });\n registerOption('link_class_list', {\n processor: 'object[]',\n default: []\n });\n registerOption('link_title', {\n processor: 'boolean',\n default: true\n });\n registerOption('allow_unsafe_link_target', {\n processor: 'boolean',\n default: false\n });\n registerOption('link_quicklink', {\n processor: 'boolean',\n default: false\n });\n registerOption('link_attributes_postprocess', { processor: 'function' });\n };\n const assumeExternalTargets = option('link_assume_external_targets');\n const hasContextToolbar = option('link_context_toolbar');\n const getLinkList = option('link_list');\n const getDefaultLinkTarget = option('link_default_target');\n const getDefaultLinkProtocol = option('link_default_protocol');\n const getTargetList = option('link_target_list');\n const getRelList = option('link_rel_list');\n const getLinkClassList = option('link_class_list');\n const shouldShowLinkTitle = option('link_title');\n const allowUnsafeLinkTarget = option('allow_unsafe_link_target');\n const useQuickLink = option('link_quicklink');\n const attributesPostProcess = option('link_attributes_postprocess');\n\n const keys = Object.keys;\n const hasOwnProperty = Object.hasOwnProperty;\n const each = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const objAcc = r => (x, i) => {\n r[i] = x;\n };\n const internalFilter = (obj, pred, onTrue, onFalse) => {\n each(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const filter = (obj, pred) => {\n const t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n const has = (obj, key) => hasOwnProperty.call(obj, key);\n const hasNonNullableKey = (obj, key) => has(obj, key) && obj[key] !== undefined && obj[key] !== null;\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.URI');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const isAnchor = elm => isNonNullable(elm) && elm.nodeName.toLowerCase() === 'a';\n const isLink = elm => isAnchor(elm) && !!getHref(elm);\n const collectNodesInRange = (rng, predicate) => {\n if (rng.collapsed) {\n return [];\n } else {\n const contents = rng.cloneContents();\n const firstChild = contents.firstChild;\n const walker = new global$3(firstChild, contents);\n const elements = [];\n let current = firstChild;\n do {\n if (predicate(current)) {\n elements.push(current);\n }\n } while (current = walker.next());\n return elements;\n }\n };\n const hasProtocol = url => /^\\w+:/i.test(url);\n const getHref = elm => {\n var _a, _b;\n return (_b = (_a = elm.getAttribute('data-mce-href')) !== null && _a !== void 0 ? _a : elm.getAttribute('href')) !== null && _b !== void 0 ? _b : '';\n };\n const applyRelTargetRules = (rel, isUnsafe) => {\n const rules = ['noopener'];\n const rels = rel ? rel.split(/\\s+/) : [];\n const toString = rels => global$2.trim(rels.sort().join(' '));\n const addTargetRules = rels => {\n rels = removeTargetRules(rels);\n return rels.length > 0 ? rels.concat(rules) : rules;\n };\n const removeTargetRules = rels => rels.filter(val => global$2.inArray(rules, val) === -1);\n const newRels = isUnsafe ? addTargetRules(rels) : removeTargetRules(rels);\n return newRels.length > 0 ? toString(newRels) : '';\n };\n const trimCaretContainers = text => text.replace(/\\uFEFF/g, '');\n const getAnchorElement = (editor, selectedElm) => {\n selectedElm = selectedElm || getLinksInSelection(editor.selection.getRng())[0] || editor.selection.getNode();\n if (isImageFigure(selectedElm)) {\n return Optional.from(editor.dom.select('a[href]', selectedElm)[0]);\n } else {\n return Optional.from(editor.dom.getParent(selectedElm, 'a[href]'));\n }\n };\n const isInAnchor = (editor, selectedElm) => getAnchorElement(editor, selectedElm).isSome();\n const getAnchorText = (selection, anchorElm) => {\n const text = anchorElm.fold(() => selection.getContent({ format: 'text' }), anchorElm => anchorElm.innerText || anchorElm.textContent || '');\n return trimCaretContainers(text);\n };\n const getLinksInSelection = rng => collectNodesInRange(rng, isLink);\n const getLinks$1 = elements => global$2.grep(elements, isLink);\n const hasLinks = elements => getLinks$1(elements).length > 0;\n const hasLinksInSelection = rng => getLinksInSelection(rng).length > 0;\n const isOnlyTextSelected = editor => {\n const inlineTextElements = editor.schema.getTextInlineElements();\n const isElement = elm => elm.nodeType === 1 && !isAnchor(elm) && !has(inlineTextElements, elm.nodeName.toLowerCase());\n const isInBlockAnchor = getAnchorElement(editor).exists(anchor => anchor.hasAttribute('data-mce-block'));\n if (isInBlockAnchor) {\n return false;\n }\n const rng = editor.selection.getRng();\n if (!rng.collapsed) {\n const elements = collectNodesInRange(rng, isElement);\n return elements.length === 0;\n } else {\n return true;\n }\n };\n const isImageFigure = elm => isNonNullable(elm) && elm.nodeName === 'FIGURE' && /\\bimage\\b/i.test(elm.className);\n\n const getLinkAttrs = data => {\n const attrs = [\n 'title',\n 'rel',\n 'class',\n 'target'\n ];\n return foldl(attrs, (acc, key) => {\n data[key].each(value => {\n acc[key] = value.length > 0 ? value : null;\n });\n return acc;\n }, { href: data.href });\n };\n const handleExternalTargets = (href, assumeExternalTargets) => {\n if ((assumeExternalTargets === 'http' || assumeExternalTargets === 'https') && !hasProtocol(href)) {\n return assumeExternalTargets + '://' + href;\n }\n return href;\n };\n const applyLinkOverrides = (editor, linkAttrs) => {\n const newLinkAttrs = { ...linkAttrs };\n if (getRelList(editor).length === 0 && !allowUnsafeLinkTarget(editor)) {\n const newRel = applyRelTargetRules(newLinkAttrs.rel, newLinkAttrs.target === '_blank');\n newLinkAttrs.rel = newRel ? newRel : null;\n }\n if (Optional.from(newLinkAttrs.target).isNone() && getTargetList(editor) === false) {\n newLinkAttrs.target = getDefaultLinkTarget(editor);\n }\n newLinkAttrs.href = handleExternalTargets(newLinkAttrs.href, assumeExternalTargets(editor));\n return newLinkAttrs;\n };\n const updateLink = (editor, anchorElm, text, linkAttrs) => {\n text.each(text => {\n if (has(anchorElm, 'innerText')) {\n anchorElm.innerText = text;\n } else {\n anchorElm.textContent = text;\n }\n });\n editor.dom.setAttribs(anchorElm, linkAttrs);\n const rng = editor.dom.createRng();\n rng.setStartAfter(anchorElm);\n rng.setEndAfter(anchorElm);\n editor.selection.setRng(rng);\n };\n const createLink = (editor, selectedElm, text, linkAttrs) => {\n const dom = editor.dom;\n if (isImageFigure(selectedElm)) {\n linkImageFigure(dom, selectedElm, linkAttrs);\n } else {\n text.fold(() => {\n editor.execCommand('mceInsertLink', false, linkAttrs);\n const end = editor.selection.getEnd();\n const rng = dom.createRng();\n rng.setStartAfter(end);\n rng.setEndAfter(end);\n editor.selection.setRng(rng);\n }, text => {\n editor.insertContent(dom.createHTML('a', linkAttrs, dom.encode(text)));\n });\n }\n };\n const linkDomMutation = (editor, attachState, data) => {\n const selectedElm = editor.selection.getNode();\n const anchorElm = getAnchorElement(editor, selectedElm);\n const linkAttrs = applyLinkOverrides(editor, getLinkAttrs(data));\n const attributesPostProcess$1 = attributesPostProcess(editor);\n if (isNonNullable(attributesPostProcess$1)) {\n attributesPostProcess$1(linkAttrs);\n }\n editor.undoManager.transact(() => {\n if (data.href === attachState.href) {\n attachState.attach();\n }\n anchorElm.fold(() => {\n createLink(editor, selectedElm, data.text, linkAttrs);\n }, elm => {\n editor.focus();\n updateLink(editor, elm, data.text, linkAttrs);\n });\n });\n };\n const unlinkSelection = editor => {\n const dom = editor.dom, selection = editor.selection;\n const bookmark = selection.getBookmark();\n const rng = selection.getRng().cloneRange();\n const startAnchorElm = dom.getParent(rng.startContainer, 'a[href]', editor.getBody());\n const endAnchorElm = dom.getParent(rng.endContainer, 'a[href]', editor.getBody());\n if (startAnchorElm) {\n rng.setStartBefore(startAnchorElm);\n }\n if (endAnchorElm) {\n rng.setEndAfter(endAnchorElm);\n }\n selection.setRng(rng);\n editor.execCommand('unlink');\n selection.moveToBookmark(bookmark);\n };\n const unlinkDomMutation = editor => {\n editor.undoManager.transact(() => {\n const node = editor.selection.getNode();\n if (isImageFigure(node)) {\n unlinkImageFigure(editor, node);\n } else {\n unlinkSelection(editor);\n }\n editor.focus();\n });\n };\n const unwrapOptions = data => {\n const {\n class: cls,\n href,\n rel,\n target,\n text,\n title\n } = data;\n return filter({\n class: cls.getOrNull(),\n href,\n rel: rel.getOrNull(),\n target: target.getOrNull(),\n text: text.getOrNull(),\n title: title.getOrNull()\n }, (v, _k) => isNull(v) === false);\n };\n const sanitizeData = (editor, data) => {\n const getOption = editor.options.get;\n const uriOptions = {\n allow_html_data_urls: getOption('allow_html_data_urls'),\n allow_script_urls: getOption('allow_script_urls'),\n allow_svg_data_urls: getOption('allow_svg_data_urls')\n };\n const href = data.href;\n return {\n ...data,\n href: global$4.isDomSafe(href, 'a', uriOptions) ? href : ''\n };\n };\n const link = (editor, attachState, data) => {\n const sanitizedData = sanitizeData(editor, data);\n editor.hasPlugin('rtc', true) ? editor.execCommand('createlink', false, unwrapOptions(sanitizedData)) : linkDomMutation(editor, attachState, sanitizedData);\n };\n const unlink = editor => {\n editor.hasPlugin('rtc', true) ? editor.execCommand('unlink') : unlinkDomMutation(editor);\n };\n const unlinkImageFigure = (editor, fig) => {\n var _a;\n const img = editor.dom.select('img', fig)[0];\n if (img) {\n const a = editor.dom.getParents(img, 'a[href]', fig)[0];\n if (a) {\n (_a = a.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(img, a);\n editor.dom.remove(a);\n }\n }\n };\n const linkImageFigure = (dom, fig, attrs) => {\n var _a;\n const img = dom.select('img', fig)[0];\n if (img) {\n const a = dom.create('a', attrs);\n (_a = img.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(a, img);\n a.appendChild(img);\n }\n };\n\n const getValue = item => isString(item.value) ? item.value : '';\n const getText = item => {\n if (isString(item.text)) {\n return item.text;\n } else if (isString(item.title)) {\n return item.title;\n } else {\n return '';\n }\n };\n const sanitizeList = (list, extractValue) => {\n const out = [];\n global$2.each(list, item => {\n const text = getText(item);\n if (item.menu !== undefined) {\n const items = sanitizeList(item.menu, extractValue);\n out.push({\n text,\n items\n });\n } else {\n const value = extractValue(item);\n out.push({\n text,\n value\n });\n }\n });\n return out;\n };\n const sanitizeWith = (extracter = getValue) => list => Optional.from(list).map(list => sanitizeList(list, extracter));\n const sanitize = list => sanitizeWith(getValue)(list);\n const createUi = (name, label) => items => ({\n name,\n type: 'listbox',\n label,\n items\n });\n const ListOptions = {\n sanitize,\n sanitizeWith,\n createUi,\n getValue\n };\n\n const isListGroup = item => hasNonNullableKey(item, 'items');\n const findTextByValue = (value, catalog) => findMap(catalog, item => {\n if (isListGroup(item)) {\n return findTextByValue(value, item.items);\n } else {\n return someIf(item.value === value, item);\n }\n });\n const getDelta = (persistentText, fieldName, catalog, data) => {\n const value = data[fieldName];\n const hasPersistentText = persistentText.length > 0;\n return value !== undefined ? findTextByValue(value, catalog).map(i => ({\n url: {\n value: i.value,\n meta: {\n text: hasPersistentText ? persistentText : i.text,\n attach: noop\n }\n },\n text: hasPersistentText ? persistentText : i.text\n })) : Optional.none();\n };\n const findCatalog = (catalogs, fieldName) => {\n if (fieldName === 'link') {\n return catalogs.link;\n } else if (fieldName === 'anchor') {\n return catalogs.anchor;\n } else {\n return Optional.none();\n }\n };\n const init = (initialData, linkCatalog) => {\n const persistentData = {\n text: initialData.text,\n title: initialData.title\n };\n const getTitleFromUrlChange = url => {\n var _a;\n return someIf(persistentData.title.length <= 0, Optional.from((_a = url.meta) === null || _a === void 0 ? void 0 : _a.title).getOr(''));\n };\n const getTextFromUrlChange = url => {\n var _a;\n return someIf(persistentData.text.length <= 0, Optional.from((_a = url.meta) === null || _a === void 0 ? void 0 : _a.text).getOr(url.value));\n };\n const onUrlChange = data => {\n const text = getTextFromUrlChange(data.url);\n const title = getTitleFromUrlChange(data.url);\n if (text.isSome() || title.isSome()) {\n return Optional.some({\n ...text.map(text => ({ text })).getOr({}),\n ...title.map(title => ({ title })).getOr({})\n });\n } else {\n return Optional.none();\n }\n };\n const onCatalogChange = (data, change) => {\n const catalog = findCatalog(linkCatalog, change).getOr([]);\n return getDelta(persistentData.text, change, catalog, data);\n };\n const onChange = (getData, change) => {\n const name = change.name;\n if (name === 'url') {\n return onUrlChange(getData());\n } else if (contains([\n 'anchor',\n 'link'\n ], name)) {\n return onCatalogChange(getData(), name);\n } else if (name === 'text' || name === 'title') {\n persistentData[name] = getData()[name];\n return Optional.none();\n } else {\n return Optional.none();\n }\n };\n return { onChange };\n };\n const DialogChanges = {\n init,\n getDelta\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n const delayedConfirm = (editor, message, callback) => {\n const rng = editor.selection.getRng();\n global$1.setEditorTimeout(editor, () => {\n editor.windowManager.confirm(message, state => {\n editor.selection.setRng(rng);\n callback(state);\n });\n });\n };\n const tryEmailTransform = data => {\n const url = data.href;\n const suggestMailTo = url.indexOf('@') > 0 && url.indexOf('/') === -1 && url.indexOf('mailto:') === -1;\n return suggestMailTo ? Optional.some({\n message: 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?',\n preprocess: oldData => ({\n ...oldData,\n href: 'mailto:' + url\n })\n }) : Optional.none();\n };\n const tryProtocolTransform = (assumeExternalTargets, defaultLinkProtocol) => data => {\n const url = data.href;\n const suggestProtocol = assumeExternalTargets === 1 && !hasProtocol(url) || assumeExternalTargets === 0 && /^\\s*www(\\.|\\d\\.)/i.test(url);\n return suggestProtocol ? Optional.some({\n message: `The URL you entered seems to be an external link. Do you want to add the required ${ defaultLinkProtocol }:// prefix?`,\n preprocess: oldData => ({\n ...oldData,\n href: defaultLinkProtocol + '://' + url\n })\n }) : Optional.none();\n };\n const preprocess = (editor, data) => findMap([\n tryEmailTransform,\n tryProtocolTransform(assumeExternalTargets(editor), getDefaultLinkProtocol(editor))\n ], f => f(data)).fold(() => Promise.resolve(data), transform => new Promise(callback => {\n delayedConfirm(editor, transform.message, state => {\n callback(state ? transform.preprocess(data) : data);\n });\n }));\n const DialogConfirms = { preprocess };\n\n const getAnchors = editor => {\n const anchorNodes = editor.dom.select('a:not([href])');\n const anchors = bind(anchorNodes, anchor => {\n const id = anchor.name || anchor.id;\n return id ? [{\n text: id,\n value: '#' + id\n }] : [];\n });\n return anchors.length > 0 ? Optional.some([{\n text: 'None',\n value: ''\n }].concat(anchors)) : Optional.none();\n };\n const AnchorListOptions = { getAnchors };\n\n const getClasses = editor => {\n const list = getLinkClassList(editor);\n if (list.length > 0) {\n return ListOptions.sanitize(list);\n }\n return Optional.none();\n };\n const ClassListOptions = { getClasses };\n\n const parseJson = text => {\n try {\n return Optional.some(JSON.parse(text));\n } catch (_a) {\n return Optional.none();\n }\n };\n const getLinks = editor => {\n const extractor = item => editor.convertURL(item.value || item.url || '', 'href');\n const linkList = getLinkList(editor);\n return new Promise(resolve => {\n if (isString(linkList)) {\n fetch(linkList).then(res => res.ok ? res.text().then(parseJson) : Promise.reject()).then(resolve, () => resolve(Optional.none()));\n } else if (isFunction(linkList)) {\n linkList(output => resolve(Optional.some(output)));\n } else {\n resolve(Optional.from(linkList));\n }\n }).then(optItems => optItems.bind(ListOptions.sanitizeWith(extractor)).map(items => {\n if (items.length > 0) {\n const noneItem = [{\n text: 'None',\n value: ''\n }];\n return noneItem.concat(items);\n } else {\n return items;\n }\n }));\n };\n const LinkListOptions = { getLinks };\n\n const getRels = (editor, initialTarget) => {\n const list = getRelList(editor);\n if (list.length > 0) {\n const isTargetBlank = is(initialTarget, '_blank');\n const enforceSafe = allowUnsafeLinkTarget(editor) === false;\n const safeRelExtractor = item => applyRelTargetRules(ListOptions.getValue(item), isTargetBlank);\n const sanitizer = enforceSafe ? ListOptions.sanitizeWith(safeRelExtractor) : ListOptions.sanitize;\n return sanitizer(list);\n }\n return Optional.none();\n };\n const RelOptions = { getRels };\n\n const fallbacks = [\n {\n text: 'Current window',\n value: ''\n },\n {\n text: 'New window',\n value: '_blank'\n }\n ];\n const getTargets = editor => {\n const list = getTargetList(editor);\n if (isArray(list)) {\n return ListOptions.sanitize(list).orThunk(() => Optional.some(fallbacks));\n } else if (list === false) {\n return Optional.none();\n }\n return Optional.some(fallbacks);\n };\n const TargetOptions = { getTargets };\n\n const nonEmptyAttr = (dom, elem, name) => {\n const val = dom.getAttrib(elem, name);\n return val !== null && val.length > 0 ? Optional.some(val) : Optional.none();\n };\n const extractFromAnchor = (editor, anchor) => {\n const dom = editor.dom;\n const onlyText = isOnlyTextSelected(editor);\n const text = onlyText ? Optional.some(getAnchorText(editor.selection, anchor)) : Optional.none();\n const url = anchor.bind(anchorElm => Optional.from(dom.getAttrib(anchorElm, 'href')));\n const target = anchor.bind(anchorElm => Optional.from(dom.getAttrib(anchorElm, 'target')));\n const rel = anchor.bind(anchorElm => nonEmptyAttr(dom, anchorElm, 'rel'));\n const linkClass = anchor.bind(anchorElm => nonEmptyAttr(dom, anchorElm, 'class'));\n const title = anchor.bind(anchorElm => nonEmptyAttr(dom, anchorElm, 'title'));\n return {\n url,\n text,\n title,\n target,\n rel,\n linkClass\n };\n };\n const collect = (editor, linkNode) => LinkListOptions.getLinks(editor).then(links => {\n const anchor = extractFromAnchor(editor, linkNode);\n return {\n anchor,\n catalogs: {\n targets: TargetOptions.getTargets(editor),\n rels: RelOptions.getRels(editor, anchor.target),\n classes: ClassListOptions.getClasses(editor),\n anchor: AnchorListOptions.getAnchors(editor),\n link: links\n },\n optNode: linkNode,\n flags: { titleEnabled: shouldShowLinkTitle(editor) }\n };\n });\n const DialogInfo = { collect };\n\n const handleSubmit = (editor, info) => api => {\n const data = api.getData();\n if (!data.url.value) {\n unlink(editor);\n api.close();\n return;\n }\n const getChangedValue = key => Optional.from(data[key]).filter(value => !is(info.anchor[key], value));\n const changedData = {\n href: data.url.value,\n text: getChangedValue('text'),\n target: getChangedValue('target'),\n rel: getChangedValue('rel'),\n class: getChangedValue('linkClass'),\n title: getChangedValue('title')\n };\n const attachState = {\n href: data.url.value,\n attach: data.url.meta !== undefined && data.url.meta.attach ? data.url.meta.attach : noop\n };\n DialogConfirms.preprocess(editor, changedData).then(pData => {\n link(editor, attachState, pData);\n });\n api.close();\n };\n const collectData = editor => {\n const anchorNode = getAnchorElement(editor);\n return DialogInfo.collect(editor, anchorNode);\n };\n const getInitialData = (info, defaultTarget) => {\n const anchor = info.anchor;\n const url = anchor.url.getOr('');\n return {\n url: {\n value: url,\n meta: { original: { value: url } }\n },\n text: anchor.text.getOr(''),\n title: anchor.title.getOr(''),\n anchor: url,\n link: url,\n rel: anchor.rel.getOr(''),\n target: anchor.target.or(defaultTarget).getOr(''),\n linkClass: anchor.linkClass.getOr('')\n };\n };\n const makeDialog = (settings, onSubmit, editor) => {\n const urlInput = [{\n name: 'url',\n type: 'urlinput',\n filetype: 'file',\n label: 'URL',\n picker_text: 'Browse links'\n }];\n const displayText = settings.anchor.text.map(() => ({\n name: 'text',\n type: 'input',\n label: 'Text to display'\n })).toArray();\n const titleText = settings.flags.titleEnabled ? [{\n name: 'title',\n type: 'input',\n label: 'Title'\n }] : [];\n const defaultTarget = Optional.from(getDefaultLinkTarget(editor));\n const initialData = getInitialData(settings, defaultTarget);\n const catalogs = settings.catalogs;\n const dialogDelta = DialogChanges.init(initialData, catalogs);\n const body = {\n type: 'panel',\n items: flatten([\n urlInput,\n displayText,\n titleText,\n cat([\n catalogs.anchor.map(ListOptions.createUi('anchor', 'Anchors')),\n catalogs.rels.map(ListOptions.createUi('rel', 'Rel')),\n catalogs.targets.map(ListOptions.createUi('target', 'Open link in...')),\n catalogs.link.map(ListOptions.createUi('link', 'Link list')),\n catalogs.classes.map(ListOptions.createUi('linkClass', 'Class'))\n ])\n ])\n };\n return {\n title: 'Insert/Edit Link',\n size: 'normal',\n body,\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData,\n onChange: (api, {name}) => {\n dialogDelta.onChange(api.getData, { name }).each(newData => {\n api.setData(newData);\n });\n },\n onSubmit\n };\n };\n const open = editor => {\n const data = collectData(editor);\n data.then(info => {\n const onSubmit = handleSubmit(editor, info);\n return makeDialog(info, onSubmit, editor);\n }).then(spec => {\n editor.windowManager.open(spec);\n });\n };\n\n const register = editor => {\n editor.addCommand('mceLink', (_ui, value) => {\n if ((value === null || value === void 0 ? void 0 : value.dialog) === true || !useQuickLink(editor)) {\n open(editor);\n } else {\n editor.dispatch('contexttoolbar-show', { toolbarKey: 'quicklink' });\n }\n });\n };\n\n const setup$2 = editor => {\n editor.addShortcut('Meta+K', '', () => {\n editor.execCommand('mceLink');\n });\n };\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n const singleton = doRevoke => {\n const subject = Cell(Optional.none());\n const revoke = () => subject.get().each(doRevoke);\n const clear = () => {\n revoke();\n subject.set(Optional.none());\n };\n const isSet = () => subject.get().isSome();\n const get = () => subject.get();\n const set = s => {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear,\n isSet,\n get,\n set\n };\n };\n const value = () => {\n const subject = singleton(noop);\n const on = f => subject.get().each(f);\n return {\n ...subject,\n on\n };\n };\n\n const removeFromStart = (str, numChars) => {\n return str.substring(numChars);\n };\n\n const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n const removeLeading = (str, prefix) => {\n return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n };\n const startsWith = (str, prefix) => {\n return checkRange(str, prefix, 0);\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n const appendClickRemove = (link, evt) => {\n document.body.appendChild(link);\n link.dispatchEvent(evt);\n document.body.removeChild(link);\n };\n const openLink = url => {\n const link = document.createElement('a');\n link.target = '_blank';\n link.href = url;\n link.rel = 'noreferrer noopener';\n const evt = new MouseEvent('click', {\n bubbles: true,\n cancelable: true,\n view: window\n });\n document.dispatchEvent(evt);\n appendClickRemove(link, evt);\n };\n const hasOnlyAltModifier = e => {\n return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false;\n };\n const gotoLink = (editor, a) => {\n if (a) {\n const href = getHref(a);\n if (/^#/.test(href)) {\n const targetEl = editor.dom.select(`${ href },[name=\"${ removeLeading(href, '#') }\"]`);\n if (targetEl.length) {\n editor.selection.scrollIntoView(targetEl[0], true);\n }\n } else {\n openLink(a.href);\n }\n }\n };\n const isSelectionOnImageWithEmbeddedLink = editor => {\n const rng = editor.selection.getRng();\n const node = rng.startContainer;\n return isLink(node) && rng.startContainer === rng.endContainer && editor.dom.select('img', node).length === 1;\n };\n const getLinkFromElement = (editor, element) => {\n const links = getLinks$1(editor.dom.getParents(element));\n return someIf(links.length === 1, links[0]);\n };\n const getLinkInSelection = editor => {\n const links = getLinksInSelection(editor.selection.getRng());\n return someIf(links.length > 0, links[0]).or(getLinkFromElement(editor, editor.selection.getNode()));\n };\n const getLinkFromSelection = editor => editor.selection.isCollapsed() || isSelectionOnImageWithEmbeddedLink(editor) ? getLinkFromElement(editor, editor.selection.getStart()) : getLinkInSelection(editor);\n const setup$1 = editor => {\n const selectedLink = value();\n const getSelectedLink = () => selectedLink.get().or(getLinkFromSelection(editor));\n const gotoSelectedLink = () => getSelectedLink().each(link => gotoLink(editor, link));\n editor.on('contextmenu', e => {\n getLinkFromElement(editor, e.target).each(selectedLink.set);\n });\n editor.on('SelectionChange', () => {\n if (!selectedLink.isSet()) {\n getLinkFromSelection(editor).each(selectedLink.set);\n }\n });\n editor.on('click', e => {\n selectedLink.clear();\n const links = getLinks$1(editor.dom.getParents(e.target));\n if (links.length === 1 && global.metaKeyPressed(e)) {\n e.preventDefault();\n gotoLink(editor, links[0]);\n }\n });\n editor.on('keydown', e => {\n selectedLink.clear();\n if (!e.isDefaultPrevented() && e.keyCode === 13 && hasOnlyAltModifier(e)) {\n getSelectedLink().each(link => {\n e.preventDefault();\n gotoLink(editor, link);\n });\n }\n });\n return { gotoSelectedLink };\n };\n\n const openDialog = editor => () => {\n editor.execCommand('mceLink', false, { dialog: true });\n };\n const toggleState = (editor, toggler) => {\n editor.on('NodeChange', toggler);\n return () => editor.off('NodeChange', toggler);\n };\n const toggleLinkState = editor => api => {\n const updateState = () => {\n api.setActive(!editor.mode.isReadOnly() && isInAnchor(editor, editor.selection.getNode()));\n api.setEnabled(editor.selection.isEditable());\n };\n updateState();\n return toggleState(editor, updateState);\n };\n const toggleLinkMenuState = editor => api => {\n const updateState = () => {\n api.setEnabled(editor.selection.isEditable());\n };\n updateState();\n return toggleState(editor, updateState);\n };\n const toggleRequiresLinkState = editor => api => {\n const hasLinks$1 = parents => hasLinks(parents) || hasLinksInSelection(editor.selection.getRng());\n const parents = editor.dom.getParents(editor.selection.getStart());\n const updateEnabled = parents => {\n api.setEnabled(hasLinks$1(parents) && editor.selection.isEditable());\n };\n updateEnabled(parents);\n return toggleState(editor, e => updateEnabled(e.parents));\n };\n const setupButtons = (editor, openLink) => {\n editor.ui.registry.addToggleButton('link', {\n icon: 'link',\n tooltip: 'Insert/edit link',\n shortcut: 'Meta+K',\n onAction: openDialog(editor),\n onSetup: toggleLinkState(editor)\n });\n editor.ui.registry.addButton('openlink', {\n icon: 'new-tab',\n tooltip: 'Open link',\n onAction: openLink.gotoSelectedLink,\n onSetup: toggleRequiresLinkState(editor)\n });\n editor.ui.registry.addButton('unlink', {\n icon: 'unlink',\n tooltip: 'Remove link',\n onAction: () => unlink(editor),\n onSetup: toggleRequiresLinkState(editor)\n });\n };\n const setupMenuItems = (editor, openLink) => {\n editor.ui.registry.addMenuItem('openlink', {\n text: 'Open link',\n icon: 'new-tab',\n onAction: openLink.gotoSelectedLink,\n onSetup: toggleRequiresLinkState(editor)\n });\n editor.ui.registry.addMenuItem('link', {\n icon: 'link',\n text: 'Link...',\n shortcut: 'Meta+K',\n onAction: openDialog(editor),\n onSetup: toggleLinkMenuState(editor)\n });\n editor.ui.registry.addMenuItem('unlink', {\n icon: 'unlink',\n text: 'Remove link',\n onAction: () => unlink(editor),\n onSetup: toggleRequiresLinkState(editor)\n });\n };\n const setupContextMenu = editor => {\n const inLink = 'link unlink openlink';\n const noLink = 'link';\n editor.ui.registry.addContextMenu('link', {\n update: element => {\n const isEditable = editor.dom.isEditable(element);\n if (!isEditable) {\n return '';\n }\n return hasLinks(editor.dom.getParents(element, 'a')) ? inLink : noLink;\n }\n });\n };\n const setupContextToolbars = (editor, openLink) => {\n const collapseSelectionToEnd = editor => {\n editor.selection.collapse(false);\n };\n const onSetupLink = buttonApi => {\n const node = editor.selection.getNode();\n buttonApi.setEnabled(isInAnchor(editor, node) && editor.selection.isEditable());\n return noop;\n };\n const getLinkText = value => {\n const anchor = getAnchorElement(editor);\n const onlyText = isOnlyTextSelected(editor);\n if (anchor.isNone() && onlyText) {\n const text = getAnchorText(editor.selection, anchor);\n return someIf(text.length === 0, value);\n } else {\n return Optional.none();\n }\n };\n editor.ui.registry.addContextForm('quicklink', {\n launch: {\n type: 'contextformtogglebutton',\n icon: 'link',\n tooltip: 'Link',\n onSetup: toggleLinkState(editor)\n },\n label: 'Link',\n predicate: node => hasContextToolbar(editor) && isInAnchor(editor, node),\n initValue: () => {\n const elm = getAnchorElement(editor);\n return elm.fold(constant(''), getHref);\n },\n commands: [\n {\n type: 'contextformtogglebutton',\n icon: 'link',\n tooltip: 'Link',\n primary: true,\n onSetup: buttonApi => {\n const node = editor.selection.getNode();\n buttonApi.setActive(isInAnchor(editor, node));\n return toggleLinkState(editor)(buttonApi);\n },\n onAction: formApi => {\n const value = formApi.getValue();\n const text = getLinkText(value);\n const attachState = {\n href: value,\n attach: noop\n };\n link(editor, attachState, {\n href: value,\n text,\n title: Optional.none(),\n rel: Optional.none(),\n target: Optional.from(getDefaultLinkTarget(editor)),\n class: Optional.none()\n });\n collapseSelectionToEnd(editor);\n formApi.hide();\n }\n },\n {\n type: 'contextformbutton',\n icon: 'unlink',\n tooltip: 'Remove link',\n onSetup: onSetupLink,\n onAction: formApi => {\n unlink(editor);\n formApi.hide();\n }\n },\n {\n type: 'contextformbutton',\n icon: 'new-tab',\n tooltip: 'Open link',\n onSetup: onSetupLink,\n onAction: formApi => {\n openLink.gotoSelectedLink();\n formApi.hide();\n }\n }\n ]\n });\n };\n const setup = editor => {\n const openLink = setup$1(editor);\n setupButtons(editor, openLink);\n setupMenuItems(editor, openLink);\n setupContextMenu(editor);\n setupContextToolbars(editor, openLink);\n };\n\n var Plugin = () => {\n global$5.add('link', editor => {\n register$1(editor);\n register(editor);\n setup(editor);\n setup$2(editor);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"link\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/link')\n// ES2015:\n// import 'tinymce/plugins/link'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.0 (TBD)\n */\n\n(function () {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const fireInsertCustomChar = (editor, chr) => {\n return editor.dispatch('insertCustomChar', { chr });\n };\n\n const insertChar = (editor, chr) => {\n const evtChr = fireInsertCustomChar(editor, chr).chr;\n editor.execCommand('mceInsertContent', false, evtChr);\n };\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq = t => a => t === a;\n const isArray$1 = isType('array');\n const isNull = eq(null);\n const isUndefined = eq(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n\n const constant = value => {\n return () => {\n return value;\n };\n };\n const never = constant(false);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativePush = Array.prototype.push;\n const map = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const findUntil = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n const find = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray$1(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind = (xs, f) => flatten(map(xs, f));\n\n var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const option = name => editor => editor.options.get(name);\n const register$2 = editor => {\n const registerOption = editor.options.register;\n const charMapProcessor = value => isFunction(value) || isArray$1(value);\n registerOption('charmap', { processor: charMapProcessor });\n registerOption('charmap_append', { processor: charMapProcessor });\n };\n const getCharMap$1 = option('charmap');\n const getCharMapAppend = option('charmap_append');\n\n const isArray = global.isArray;\n const UserDefined = 'User Defined';\n const getDefaultCharMap = () => {\n return [\n {\n name: 'Currency',\n characters: [\n [\n 36,\n 'dollar sign'\n ],\n [\n 162,\n 'cent sign'\n ],\n [\n 8364,\n 'euro sign'\n ],\n [\n 163,\n 'pound sign'\n ],\n [\n 165,\n 'yen sign'\n ],\n [\n 164,\n 'currency sign'\n ],\n [\n 8352,\n 'euro-currency sign'\n ],\n [\n 8353,\n 'colon sign'\n ],\n [\n 8354,\n 'cruzeiro sign'\n ],\n [\n 8355,\n 'french franc sign'\n ],\n [\n 8356,\n 'lira sign'\n ],\n [\n 8357,\n 'mill sign'\n ],\n [\n 8358,\n 'naira sign'\n ],\n [\n 8359,\n 'peseta sign'\n ],\n [\n 8360,\n 'rupee sign'\n ],\n [\n 8361,\n 'won sign'\n ],\n [\n 8362,\n 'new sheqel sign'\n ],\n [\n 8363,\n 'dong sign'\n ],\n [\n 8365,\n 'kip sign'\n ],\n [\n 8366,\n 'tugrik sign'\n ],\n [\n 8367,\n 'drachma sign'\n ],\n [\n 8368,\n 'german penny symbol'\n ],\n [\n 8369,\n 'peso sign'\n ],\n [\n 8370,\n 'guarani sign'\n ],\n [\n 8371,\n 'austral sign'\n ],\n [\n 8372,\n 'hryvnia sign'\n ],\n [\n 8373,\n 'cedi sign'\n ],\n [\n 8374,\n 'livre tournois sign'\n ],\n [\n 8375,\n 'spesmilo sign'\n ],\n [\n 8376,\n 'tenge sign'\n ],\n [\n 8377,\n 'indian rupee sign'\n ],\n [\n 8378,\n 'turkish lira sign'\n ],\n [\n 8379,\n 'nordic mark sign'\n ],\n [\n 8380,\n 'manat sign'\n ],\n [\n 8381,\n 'ruble sign'\n ],\n [\n 20870,\n 'yen character'\n ],\n [\n 20803,\n 'yuan character'\n ],\n [\n 22291,\n 'yuan character, in hong kong and taiwan'\n ],\n [\n 22278,\n 'yen/yuan character variant one'\n ]\n ]\n },\n {\n name: 'Text',\n characters: [\n [\n 169,\n 'copyright sign'\n ],\n [\n 174,\n 'registered sign'\n ],\n [\n 8482,\n 'trade mark sign'\n ],\n [\n 8240,\n 'per mille sign'\n ],\n [\n 181,\n 'micro sign'\n ],\n [\n 183,\n 'middle dot'\n ],\n [\n 8226,\n 'bullet'\n ],\n [\n 8230,\n 'three dot leader'\n ],\n [\n 8242,\n 'minutes / feet'\n ],\n [\n 8243,\n 'seconds / inches'\n ],\n [\n 167,\n 'section sign'\n ],\n [\n 182,\n 'paragraph sign'\n ],\n [\n 223,\n 'sharp s / ess-zed'\n ]\n ]\n },\n {\n name: 'Quotations',\n characters: [\n [\n 8249,\n 'single left-pointing angle quotation mark'\n ],\n [\n 8250,\n 'single right-pointing angle quotation mark'\n ],\n [\n 171,\n 'left pointing guillemet'\n ],\n [\n 187,\n 'right pointing guillemet'\n ],\n [\n 8216,\n 'left single quotation mark'\n ],\n [\n 8217,\n 'right single quotation mark'\n ],\n [\n 8220,\n 'left double quotation mark'\n ],\n [\n 8221,\n 'right double quotation mark'\n ],\n [\n 8218,\n 'single low-9 quotation mark'\n ],\n [\n 8222,\n 'double low-9 quotation mark'\n ],\n [\n 60,\n 'less-than sign'\n ],\n [\n 62,\n 'greater-than sign'\n ],\n [\n 8804,\n 'less-than or equal to'\n ],\n [\n 8805,\n 'greater-than or equal to'\n ],\n [\n 8211,\n 'en dash'\n ],\n [\n 8212,\n 'em dash'\n ],\n [\n 175,\n 'macron'\n ],\n [\n 8254,\n 'overline'\n ],\n [\n 164,\n 'currency sign'\n ],\n [\n 166,\n 'broken bar'\n ],\n [\n 168,\n 'diaeresis'\n ],\n [\n 161,\n 'inverted exclamation mark'\n ],\n [\n 191,\n 'turned question mark'\n ],\n [\n 710,\n 'circumflex accent'\n ],\n [\n 732,\n 'small tilde'\n ],\n [\n 176,\n 'degree sign'\n ],\n [\n 8722,\n 'minus sign'\n ],\n [\n 177,\n 'plus-minus sign'\n ],\n [\n 247,\n 'division sign'\n ],\n [\n 8260,\n 'fraction slash'\n ],\n [\n 215,\n 'multiplication sign'\n ],\n [\n 185,\n 'superscript one'\n ],\n [\n 178,\n 'superscript two'\n ],\n [\n 179,\n 'superscript three'\n ],\n [\n 188,\n 'fraction one quarter'\n ],\n [\n 189,\n 'fraction one half'\n ],\n [\n 190,\n 'fraction three quarters'\n ]\n ]\n },\n {\n name: 'Mathematical',\n characters: [\n [\n 402,\n 'function / florin'\n ],\n [\n 8747,\n 'integral'\n ],\n [\n 8721,\n 'n-ary sumation'\n ],\n [\n 8734,\n 'infinity'\n ],\n [\n 8730,\n 'square root'\n ],\n [\n 8764,\n 'similar to'\n ],\n [\n 8773,\n 'approximately equal to'\n ],\n [\n 8776,\n 'almost equal to'\n ],\n [\n 8800,\n 'not equal to'\n ],\n [\n 8801,\n 'identical to'\n ],\n [\n 8712,\n 'element of'\n ],\n [\n 8713,\n 'not an element of'\n ],\n [\n 8715,\n 'contains as member'\n ],\n [\n 8719,\n 'n-ary product'\n ],\n [\n 8743,\n 'logical and'\n ],\n [\n 8744,\n 'logical or'\n ],\n [\n 172,\n 'not sign'\n ],\n [\n 8745,\n 'intersection'\n ],\n [\n 8746,\n 'union'\n ],\n [\n 8706,\n 'partial differential'\n ],\n [\n 8704,\n 'for all'\n ],\n [\n 8707,\n 'there exists'\n ],\n [\n 8709,\n 'diameter'\n ],\n [\n 8711,\n 'backward difference'\n ],\n [\n 8727,\n 'asterisk operator'\n ],\n [\n 8733,\n 'proportional to'\n ],\n [\n 8736,\n 'angle'\n ]\n ]\n },\n {\n name: 'Extended Latin',\n characters: [\n [\n 192,\n 'A - grave'\n ],\n [\n 193,\n 'A - acute'\n ],\n [\n 194,\n 'A - circumflex'\n ],\n [\n 195,\n 'A - tilde'\n ],\n [\n 196,\n 'A - diaeresis'\n ],\n [\n 197,\n 'A - ring above'\n ],\n [\n 256,\n 'A - macron'\n ],\n [\n 198,\n 'ligature AE'\n ],\n [\n 199,\n 'C - cedilla'\n ],\n [\n 200,\n 'E - grave'\n ],\n [\n 201,\n 'E - acute'\n ],\n [\n 202,\n 'E - circumflex'\n ],\n [\n 203,\n 'E - diaeresis'\n ],\n [\n 274,\n 'E - macron'\n ],\n [\n 204,\n 'I - grave'\n ],\n [\n 205,\n 'I - acute'\n ],\n [\n 206,\n 'I - circumflex'\n ],\n [\n 207,\n 'I - diaeresis'\n ],\n [\n 298,\n 'I - macron'\n ],\n [\n 208,\n 'ETH'\n ],\n [\n 209,\n 'N - tilde'\n ],\n [\n 210,\n 'O - grave'\n ],\n [\n 211,\n 'O - acute'\n ],\n [\n 212,\n 'O - circumflex'\n ],\n [\n 213,\n 'O - tilde'\n ],\n [\n 214,\n 'O - diaeresis'\n ],\n [\n 216,\n 'O - slash'\n ],\n [\n 332,\n 'O - macron'\n ],\n [\n 338,\n 'ligature OE'\n ],\n [\n 352,\n 'S - caron'\n ],\n [\n 217,\n 'U - grave'\n ],\n [\n 218,\n 'U - acute'\n ],\n [\n 219,\n 'U - circumflex'\n ],\n [\n 220,\n 'U - diaeresis'\n ],\n [\n 362,\n 'U - macron'\n ],\n [\n 221,\n 'Y - acute'\n ],\n [\n 376,\n 'Y - diaeresis'\n ],\n [\n 562,\n 'Y - macron'\n ],\n [\n 222,\n 'THORN'\n ],\n [\n 224,\n 'a - grave'\n ],\n [\n 225,\n 'a - acute'\n ],\n [\n 226,\n 'a - circumflex'\n ],\n [\n 227,\n 'a - tilde'\n ],\n [\n 228,\n 'a - diaeresis'\n ],\n [\n 229,\n 'a - ring above'\n ],\n [\n 257,\n 'a - macron'\n ],\n [\n 230,\n 'ligature ae'\n ],\n [\n 231,\n 'c - cedilla'\n ],\n [\n 232,\n 'e - grave'\n ],\n [\n 233,\n 'e - acute'\n ],\n [\n 234,\n 'e - circumflex'\n ],\n [\n 235,\n 'e - diaeresis'\n ],\n [\n 275,\n 'e - macron'\n ],\n [\n 236,\n 'i - grave'\n ],\n [\n 237,\n 'i - acute'\n ],\n [\n 238,\n 'i - circumflex'\n ],\n [\n 239,\n 'i - diaeresis'\n ],\n [\n 299,\n 'i - macron'\n ],\n [\n 240,\n 'eth'\n ],\n [\n 241,\n 'n - tilde'\n ],\n [\n 242,\n 'o - grave'\n ],\n [\n 243,\n 'o - acute'\n ],\n [\n 244,\n 'o - circumflex'\n ],\n [\n 245,\n 'o - tilde'\n ],\n [\n 246,\n 'o - diaeresis'\n ],\n [\n 248,\n 'o slash'\n ],\n [\n 333,\n 'o macron'\n ],\n [\n 339,\n 'ligature oe'\n ],\n [\n 353,\n 's - caron'\n ],\n [\n 249,\n 'u - grave'\n ],\n [\n 250,\n 'u - acute'\n ],\n [\n 251,\n 'u - circumflex'\n ],\n [\n 252,\n 'u - diaeresis'\n ],\n [\n 363,\n 'u - macron'\n ],\n [\n 253,\n 'y - acute'\n ],\n [\n 254,\n 'thorn'\n ],\n [\n 255,\n 'y - diaeresis'\n ],\n [\n 563,\n 'y - macron'\n ],\n [\n 913,\n 'Alpha'\n ],\n [\n 914,\n 'Beta'\n ],\n [\n 915,\n 'Gamma'\n ],\n [\n 916,\n 'Delta'\n ],\n [\n 917,\n 'Epsilon'\n ],\n [\n 918,\n 'Zeta'\n ],\n [\n 919,\n 'Eta'\n ],\n [\n 920,\n 'Theta'\n ],\n [\n 921,\n 'Iota'\n ],\n [\n 922,\n 'Kappa'\n ],\n [\n 923,\n 'Lambda'\n ],\n [\n 924,\n 'Mu'\n ],\n [\n 925,\n 'Nu'\n ],\n [\n 926,\n 'Xi'\n ],\n [\n 927,\n 'Omicron'\n ],\n [\n 928,\n 'Pi'\n ],\n [\n 929,\n 'Rho'\n ],\n [\n 931,\n 'Sigma'\n ],\n [\n 932,\n 'Tau'\n ],\n [\n 933,\n 'Upsilon'\n ],\n [\n 934,\n 'Phi'\n ],\n [\n 935,\n 'Chi'\n ],\n [\n 936,\n 'Psi'\n ],\n [\n 937,\n 'Omega'\n ],\n [\n 945,\n 'alpha'\n ],\n [\n 946,\n 'beta'\n ],\n [\n 947,\n 'gamma'\n ],\n [\n 948,\n 'delta'\n ],\n [\n 949,\n 'epsilon'\n ],\n [\n 950,\n 'zeta'\n ],\n [\n 951,\n 'eta'\n ],\n [\n 952,\n 'theta'\n ],\n [\n 953,\n 'iota'\n ],\n [\n 954,\n 'kappa'\n ],\n [\n 955,\n 'lambda'\n ],\n [\n 956,\n 'mu'\n ],\n [\n 957,\n 'nu'\n ],\n [\n 958,\n 'xi'\n ],\n [\n 959,\n 'omicron'\n ],\n [\n 960,\n 'pi'\n ],\n [\n 961,\n 'rho'\n ],\n [\n 962,\n 'final sigma'\n ],\n [\n 963,\n 'sigma'\n ],\n [\n 964,\n 'tau'\n ],\n [\n 965,\n 'upsilon'\n ],\n [\n 966,\n 'phi'\n ],\n [\n 967,\n 'chi'\n ],\n [\n 968,\n 'psi'\n ],\n [\n 969,\n 'omega'\n ]\n ]\n },\n {\n name: 'Symbols',\n characters: [\n [\n 8501,\n 'alef symbol'\n ],\n [\n 982,\n 'pi symbol'\n ],\n [\n 8476,\n 'real part symbol'\n ],\n [\n 978,\n 'upsilon - hook symbol'\n ],\n [\n 8472,\n 'Weierstrass p'\n ],\n [\n 8465,\n 'imaginary part'\n ]\n ]\n },\n {\n name: 'Arrows',\n characters: [\n [\n 8592,\n 'leftwards arrow'\n ],\n [\n 8593,\n 'upwards arrow'\n ],\n [\n 8594,\n 'rightwards arrow'\n ],\n [\n 8595,\n 'downwards arrow'\n ],\n [\n 8596,\n 'left right arrow'\n ],\n [\n 8629,\n 'carriage return'\n ],\n [\n 8656,\n 'leftwards double arrow'\n ],\n [\n 8657,\n 'upwards double arrow'\n ],\n [\n 8658,\n 'rightwards double arrow'\n ],\n [\n 8659,\n 'downwards double arrow'\n ],\n [\n 8660,\n 'left right double arrow'\n ],\n [\n 8756,\n 'therefore'\n ],\n [\n 8834,\n 'subset of'\n ],\n [\n 8835,\n 'superset of'\n ],\n [\n 8836,\n 'not a subset of'\n ],\n [\n 8838,\n 'subset of or equal to'\n ],\n [\n 8839,\n 'superset of or equal to'\n ],\n [\n 8853,\n 'circled plus'\n ],\n [\n 8855,\n 'circled times'\n ],\n [\n 8869,\n 'perpendicular'\n ],\n [\n 8901,\n 'dot operator'\n ],\n [\n 8968,\n 'left ceiling'\n ],\n [\n 8969,\n 'right ceiling'\n ],\n [\n 8970,\n 'left floor'\n ],\n [\n 8971,\n 'right floor'\n ],\n [\n 9001,\n 'left-pointing angle bracket'\n ],\n [\n 9002,\n 'right-pointing angle bracket'\n ],\n [\n 9674,\n 'lozenge'\n ],\n [\n 9824,\n 'black spade suit'\n ],\n [\n 9827,\n 'black club suit'\n ],\n [\n 9829,\n 'black heart suit'\n ],\n [\n 9830,\n 'black diamond suit'\n ],\n [\n 8194,\n 'en space'\n ],\n [\n 8195,\n 'em space'\n ],\n [\n 8201,\n 'thin space'\n ],\n [\n 8204,\n 'zero width non-joiner'\n ],\n [\n 8205,\n 'zero width joiner'\n ],\n [\n 8206,\n 'left-to-right mark'\n ],\n [\n 8207,\n 'right-to-left mark'\n ]\n ]\n }\n ];\n };\n const charmapFilter = charmap => {\n return global.grep(charmap, item => {\n return isArray(item) && item.length === 2;\n });\n };\n const getCharsFromOption = optionValue => {\n if (isArray(optionValue)) {\n return charmapFilter(optionValue);\n }\n if (typeof optionValue === 'function') {\n return optionValue();\n }\n return [];\n };\n const extendCharMap = (editor, charmap) => {\n const userCharMap = getCharMap$1(editor);\n if (userCharMap) {\n charmap = [{\n name: UserDefined,\n characters: getCharsFromOption(userCharMap)\n }];\n }\n const userCharMapAppend = getCharMapAppend(editor);\n if (userCharMapAppend) {\n const userDefinedGroup = global.grep(charmap, cg => cg.name === UserDefined);\n if (userDefinedGroup.length) {\n userDefinedGroup[0].characters = [\n ...userDefinedGroup[0].characters,\n ...getCharsFromOption(userCharMapAppend)\n ];\n return charmap;\n }\n return charmap.concat({\n name: UserDefined,\n characters: getCharsFromOption(userCharMapAppend)\n });\n }\n return charmap;\n };\n const getCharMap = editor => {\n const groups = extendCharMap(editor, getDefaultCharMap());\n return groups.length > 1 ? [{\n name: 'All',\n characters: bind(groups, g => g.characters)\n }].concat(groups) : groups;\n };\n\n const get = editor => {\n const getCharMap$1 = () => {\n return getCharMap(editor);\n };\n const insertChar$1 = chr => {\n insertChar(editor, chr);\n };\n return {\n getCharMap: getCharMap$1,\n insertChar: insertChar$1\n };\n };\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n const last = (fn, rate) => {\n let timer = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const throttle = (...args) => {\n cancel();\n timer = setTimeout(() => {\n timer = null;\n fn.apply(null, args);\n }, rate);\n };\n return {\n cancel,\n throttle\n };\n };\n\n const contains = (str, substr, start = 0, end) => {\n const idx = str.indexOf(substr, start);\n if (idx !== -1) {\n return isUndefined(end) ? true : idx + substr.length <= end;\n } else {\n return false;\n }\n };\n const fromCodePoint = String.fromCodePoint;\n\n const charMatches = (charCode, name, lowerCasePattern) => {\n if (contains(fromCodePoint(charCode).toLowerCase(), lowerCasePattern)) {\n return true;\n } else {\n return contains(name.toLowerCase(), lowerCasePattern) || contains(name.toLowerCase().replace(/\\s+/g, ''), lowerCasePattern);\n }\n };\n const scan = (group, pattern) => {\n const matches = [];\n const lowerCasePattern = pattern.toLowerCase();\n each(group.characters, g => {\n if (charMatches(g[0], g[1], lowerCasePattern)) {\n matches.push(g);\n }\n });\n return map(matches, m => ({\n text: m[1],\n value: fromCodePoint(m[0]),\n icon: fromCodePoint(m[0])\n }));\n };\n\n const patternName = 'pattern';\n const open = (editor, charMap) => {\n const makeGroupItems = () => [\n {\n label: 'Search',\n type: 'input',\n name: patternName\n },\n {\n type: 'collection',\n name: 'results'\n }\n ];\n const makeTabs = () => map(charMap, charGroup => ({\n title: charGroup.name,\n name: charGroup.name,\n items: makeGroupItems()\n }));\n const makePanel = () => ({\n type: 'panel',\n items: makeGroupItems()\n });\n const makeTabPanel = () => ({\n type: 'tabpanel',\n tabs: makeTabs()\n });\n const currentTab = charMap.length === 1 ? Cell(UserDefined) : Cell('All');\n const scanAndSet = (dialogApi, pattern) => {\n find(charMap, group => group.name === currentTab.get()).each(f => {\n const items = scan(f, pattern);\n dialogApi.setData({ results: items });\n });\n };\n const SEARCH_DELAY = 40;\n const updateFilter = last(dialogApi => {\n const pattern = dialogApi.getData().pattern;\n scanAndSet(dialogApi, pattern);\n }, SEARCH_DELAY);\n const body = charMap.length === 1 ? makePanel() : makeTabPanel();\n const initialData = {\n pattern: '',\n results: scan(charMap[0], '')\n };\n const bridgeSpec = {\n title: 'Special Character',\n size: 'normal',\n body,\n buttons: [{\n type: 'cancel',\n name: 'close',\n text: 'Close',\n primary: true\n }],\n initialData,\n onAction: (api, details) => {\n if (details.name === 'results') {\n insertChar(editor, details.value);\n api.close();\n }\n },\n onTabChange: (dialogApi, details) => {\n currentTab.set(details.newTabName);\n updateFilter.throttle(dialogApi);\n },\n onChange: (dialogApi, changeData) => {\n if (changeData.name === patternName) {\n updateFilter.throttle(dialogApi);\n }\n }\n };\n const dialogApi = editor.windowManager.open(bridgeSpec);\n dialogApi.focus(patternName);\n };\n\n const register$1 = (editor, charMap) => {\n editor.addCommand('mceShowCharmap', () => {\n open(editor, charMap);\n });\n };\n\n const init = (editor, all) => {\n editor.ui.registry.addAutocompleter('charmap', {\n trigger: ':',\n columns: 'auto',\n minChars: 2,\n fetch: (pattern, _maxResults) => new Promise((resolve, _reject) => {\n resolve(scan(all, pattern));\n }),\n onAction: (autocompleteApi, rng, value) => {\n editor.selection.setRng(rng);\n editor.insertContent(value);\n autocompleteApi.hide();\n }\n });\n };\n\n const onSetupEditable = editor => api => {\n const nodeChanged = () => {\n api.setEnabled(editor.selection.isEditable());\n };\n editor.on('NodeChange', nodeChanged);\n nodeChanged();\n return () => {\n editor.off('NodeChange', nodeChanged);\n };\n };\n const register = editor => {\n const onAction = () => editor.execCommand('mceShowCharmap');\n editor.ui.registry.addButton('charmap', {\n icon: 'insert-character',\n tooltip: 'Special character',\n onAction,\n onSetup: onSetupEditable(editor)\n });\n editor.ui.registry.addMenuItem('charmap', {\n icon: 'insert-character',\n text: 'Special character...',\n onAction,\n onSetup: onSetupEditable(editor)\n });\n };\n\n var Plugin = () => {\n global$1.add('charmap', editor => {\n register$2(editor);\n const charMap = getCharMap(editor);\n register$1(editor, charMap);\n register(editor);\n init(editor, charMap[0]);\n return get(editor);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"charmap\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/charmap')\n// ES2015:\n// import 'tinymce/plugins/charmap'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.0 (TBD)\n */\n\n(function () {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const eq = t => a => t === a;\n const isUndefined = eq(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const constant = value => {\n return () => {\n return value;\n };\n };\n const never = constant(false);\n\n const findUntil = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n const find$1 = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\n const findMap = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n const r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n typeof window !== 'undefined' ? window : Function('return this;')();\n\n const cached = f => {\n let called = false;\n let r;\n return (...args) => {\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n const DeviceType = (os, browser, userAgent, mediaMatch) => {\n const isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n const isiPhone = os.isiOS() && !isiPad;\n const isMobile = os.isiOS() || os.isAndroid();\n const isTouch = isMobile || mediaMatch('(pointer:coarse)');\n const isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n const isPhone = isiPhone || isMobile && !isTablet;\n const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n const isDesktop = !isPhone && !isTablet && !iOSwebview;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview),\n isDesktop: constant(isDesktop)\n };\n };\n\n const firstMatch = (regexes, s) => {\n for (let i = 0; i < regexes.length; i++) {\n const x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n const find = (regexes, agent) => {\n const r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n const group = i => {\n return Number(agent.replace(r, '$' + i));\n };\n return nu$2(group(1), group(2));\n };\n const detect$3 = (versionRegexes, agent) => {\n const cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$2();\n }\n return find(versionRegexes, cleanedAgent);\n };\n const unknown$2 = () => {\n return nu$2(0, 0);\n };\n const nu$2 = (major, minor) => {\n return {\n major,\n minor\n };\n };\n const Version = {\n nu: nu$2,\n detect: detect$3,\n unknown: unknown$2\n };\n\n const detectBrowser$1 = (browsers, userAgentData) => {\n return findMap(userAgentData.brands, uaBrand => {\n const lcBrand = uaBrand.brand.toLowerCase();\n return find$1(browsers, browser => {\n var _a;\n return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n }).map(info => ({\n current: info.name,\n version: Version.nu(parseInt(uaBrand.version, 10), 0)\n }));\n });\n };\n\n const detect$2 = (candidates, userAgent) => {\n const agent = String(userAgent).toLowerCase();\n return find$1(candidates, candidate => {\n return candidate.search(agent);\n });\n };\n const detectBrowser = (browsers, userAgent) => {\n return detect$2(browsers, userAgent).map(browser => {\n const version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version\n };\n });\n };\n const detectOs = (oses, userAgent) => {\n return detect$2(oses, userAgent).map(os => {\n const version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version\n };\n });\n };\n\n const contains = (str, substr, start = 0, end) => {\n const idx = str.indexOf(substr, start);\n if (idx !== -1) {\n return isUndefined(end) ? true : idx + substr.length <= end;\n } else {\n return false;\n }\n };\n\n const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n const checkContains = target => {\n return uastring => {\n return contains(uastring, target);\n };\n };\n const browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: uastring => {\n return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chromium',\n brand: 'Chromium',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: uastring => {\n return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: uastring => {\n return contains(uastring, 'msie') || contains(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: uastring => {\n return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');\n }\n }\n ];\n const oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: uastring => {\n return contains(uastring, 'iphone') || contains(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'macOS',\n search: checkContains('mac os x'),\n versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n },\n {\n name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n const PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n const edge = 'Edge';\n const chromium = 'Chromium';\n const ie = 'IE';\n const opera = 'Opera';\n const firefox = 'Firefox';\n const safari = 'Safari';\n const unknown$1 = () => {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$1 = info => {\n const current = info.current;\n const version = info.version;\n const isBrowser = name => () => current === name;\n return {\n current,\n version,\n isEdge: isBrowser(edge),\n isChromium: isBrowser(chromium),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n const Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chromium: constant(chromium),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n const windows = 'Windows';\n const ios = 'iOS';\n const android = 'Android';\n const linux = 'Linux';\n const macos = 'macOS';\n const solaris = 'Solaris';\n const freebsd = 'FreeBSD';\n const chromeos = 'ChromeOS';\n const unknown = () => {\n return nu({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu = info => {\n const current = info.current;\n const version = info.version;\n const isOS = name => () => current === name;\n return {\n current,\n version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isMacOS: isOS(macos),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n const OperatingSystem = {\n unknown,\n nu,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n macos: constant(macos),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n const detect$1 = (userAgent, userAgentDataOpt, mediaMatch) => {\n const browsers = PlatformInfo.browsers();\n const oses = PlatformInfo.oses();\n const browser = userAgentDataOpt.bind(userAgentData => detectBrowser$1(browsers, userAgentData)).orThunk(() => detectBrowser(browsers, userAgent)).fold(Browser.unknown, Browser.nu);\n const os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n const deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n return {\n browser,\n os,\n deviceType\n };\n };\n const PlatformDetection = { detect: detect$1 };\n\n const mediaMatch = query => window.matchMedia(query).matches;\n let platform = cached(() => PlatformDetection.detect(window.navigator.userAgent, Optional.from(window.navigator.userAgentData), mediaMatch));\n const detect = () => platform();\n\n const isMacOS = () => detect().os.isMacOS();\n const isiOS = () => detect().os.isiOS();\n\n const getPreventClicksOnLinksScript = () => {\n const isMacOSOrIOS = isMacOS() || isiOS();\n const fn = isMacOSOrIOS => {\n document.addEventListener('click', e => {\n for (let elm = e.target; elm; elm = elm.parentNode) {\n if (elm.nodeName === 'A') {\n const anchor = elm;\n const href = anchor.getAttribute('href');\n if (href && href.startsWith('#')) {\n e.preventDefault();\n const targetElement = document.getElementById(href.substring(1));\n if (targetElement) {\n targetElement.scrollIntoView({ behavior: 'smooth' });\n }\n return;\n }\n const isMetaKeyPressed = isMacOSOrIOS ? e.metaKey : e.ctrlKey && !e.altKey;\n if (!isMetaKeyPressed) {\n e.preventDefault();\n }\n }\n }\n }, false);\n };\n return ``;\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const option = name => editor => editor.options.get(name);\n const getContentStyle = option('content_style');\n const shouldUseContentCssCors = option('content_css_cors');\n const getBodyClass = option('body_class');\n const getBodyId = option('body_id');\n\n const getPreviewHtml = editor => {\n var _a;\n let headHtml = '';\n const encode = editor.dom.encode;\n const contentStyle = (_a = getContentStyle(editor)) !== null && _a !== void 0 ? _a : '';\n headHtml += ``;\n const cors = shouldUseContentCssCors(editor) ? ' crossorigin=\"anonymous\"' : '';\n global.each(editor.contentCSS, url => {\n headHtml += '';\n });\n if (contentStyle) {\n headHtml += '';\n }\n const bodyId = getBodyId(editor);\n const bodyClass = getBodyClass(editor);\n const directionality = editor.getBody().dir;\n const dirAttr = directionality ? ' dir=\"' + encode(directionality) + '\"' : '';\n const previewHtml = '' + '' + '' + headHtml + '' + '' + editor.getContent() + getPreventClicksOnLinksScript() + '' + '';\n return previewHtml;\n };\n\n const open = editor => {\n const content = getPreviewHtml(editor);\n const dataApi = editor.windowManager.open({\n title: 'Preview',\n size: 'large',\n body: {\n type: 'panel',\n items: [{\n name: 'preview',\n type: 'iframe',\n sandboxed: true,\n transparent: false\n }]\n },\n buttons: [{\n type: 'cancel',\n name: 'close',\n text: 'Close',\n primary: true\n }],\n initialData: { preview: content }\n });\n dataApi.focus('close');\n };\n\n const register$1 = editor => {\n editor.addCommand('mcePreview', () => {\n open(editor);\n });\n };\n\n const register = editor => {\n const onAction = () => editor.execCommand('mcePreview');\n editor.ui.registry.addButton('preview', {\n icon: 'preview',\n tooltip: 'Preview',\n onAction,\n context: 'any'\n });\n editor.ui.registry.addMenuItem('preview', {\n icon: 'preview',\n text: 'Preview',\n onAction,\n context: 'any'\n });\n };\n\n var Plugin = () => {\n global$1.add('preview', editor => {\n register$1(editor);\n register(editor);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"preview\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/preview')\n// ES2015:\n// import 'tinymce/plugins/preview'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.0 (TBD)\n */\n\n(function () {\n 'use strict';\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');\n\n var global = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const option = name => editor => editor.options.get(name);\n const register$2 = editor => {\n const registerOption = editor.options.register;\n registerOption('allow_html_in_named_anchor', {\n processor: 'boolean',\n default: false\n });\n };\n const allowHtmlInNamedAnchor = option('allow_html_in_named_anchor');\n\n const namedAnchorSelector = 'a:not([href])';\n const isEmptyString = str => !str;\n const getIdFromAnchor = elm => {\n const id = elm.getAttribute('id') || elm.getAttribute('name');\n return id || '';\n };\n const isAnchor = elm => elm.nodeName.toLowerCase() === 'a';\n const isNamedAnchor = elm => isAnchor(elm) && !elm.getAttribute('href') && getIdFromAnchor(elm) !== '';\n const isEmptyNamedAnchor = elm => isNamedAnchor(elm) && !elm.firstChild;\n\n const removeEmptyNamedAnchorsInSelection = editor => {\n const dom = editor.dom;\n global$1(dom).walk(editor.selection.getRng(), nodes => {\n global.each(nodes, node => {\n if (isEmptyNamedAnchor(node)) {\n dom.remove(node, false);\n }\n });\n });\n };\n const isValidId = id => /^[A-Za-z][A-Za-z0-9\\-:._]*$/.test(id);\n const getNamedAnchor = editor => editor.dom.getParent(editor.selection.getStart(), namedAnchorSelector);\n const getId = editor => {\n const anchor = getNamedAnchor(editor);\n if (anchor) {\n return getIdFromAnchor(anchor);\n } else {\n return '';\n }\n };\n const createAnchor = (editor, id) => {\n editor.undoManager.transact(() => {\n if (!allowHtmlInNamedAnchor(editor)) {\n editor.selection.collapse(true);\n }\n if (editor.selection.isCollapsed()) {\n editor.insertContent(editor.dom.createHTML('a', { id }));\n } else {\n removeEmptyNamedAnchorsInSelection(editor);\n editor.formatter.remove('namedAnchor', undefined, undefined, true);\n editor.formatter.apply('namedAnchor', { value: id });\n editor.addVisual();\n }\n });\n };\n const updateAnchor = (editor, id, anchorElement) => {\n anchorElement.removeAttribute('name');\n anchorElement.id = id;\n editor.addVisual();\n editor.undoManager.add();\n };\n const insert = (editor, id) => {\n const anchor = getNamedAnchor(editor);\n if (anchor) {\n updateAnchor(editor, id, anchor);\n } else {\n createAnchor(editor, id);\n }\n editor.focus();\n };\n\n const insertAnchor = (editor, newId) => {\n if (!isValidId(newId)) {\n editor.windowManager.alert('ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.');\n return false;\n } else {\n insert(editor, newId);\n return true;\n }\n };\n const open = editor => {\n const currentId = getId(editor);\n editor.windowManager.open({\n title: 'Anchor',\n size: 'normal',\n body: {\n type: 'panel',\n items: [{\n name: 'id',\n type: 'input',\n label: 'ID',\n placeholder: 'example'\n }]\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: { id: currentId },\n onSubmit: api => {\n if (insertAnchor(editor, api.getData().id)) {\n api.close();\n }\n }\n });\n };\n\n const register$1 = editor => {\n editor.addCommand('mceAnchor', () => {\n open(editor);\n });\n };\n\n const isNamedAnchorNode = node => isEmptyString(node.attr('href')) && !isEmptyString(node.attr('id') || node.attr('name'));\n const isEmptyNamedAnchorNode = node => isNamedAnchorNode(node) && !node.firstChild;\n const setContentEditable = state => nodes => {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if (isEmptyNamedAnchorNode(node)) {\n node.attr('contenteditable', state);\n }\n }\n };\n const setup = editor => {\n editor.on('PreInit', () => {\n editor.parser.addNodeFilter('a', setContentEditable('false'));\n editor.serializer.addNodeFilter('a', setContentEditable(null));\n });\n };\n\n const registerFormats = editor => {\n editor.formatter.register('namedAnchor', {\n inline: 'a',\n selector: namedAnchorSelector,\n remove: 'all',\n split: true,\n deep: true,\n attributes: { id: '%value' },\n onmatch: (node, _fmt, _itemName) => {\n return isNamedAnchor(node);\n }\n });\n };\n\n const onSetupEditable = editor => api => {\n const nodeChanged = () => {\n api.setEnabled(editor.selection.isEditable());\n };\n editor.on('NodeChange', nodeChanged);\n nodeChanged();\n return () => {\n editor.off('NodeChange', nodeChanged);\n };\n };\n const register = editor => {\n const onAction = () => editor.execCommand('mceAnchor');\n editor.ui.registry.addToggleButton('anchor', {\n icon: 'bookmark',\n tooltip: 'Anchor',\n onAction,\n onSetup: buttonApi => {\n const unbindSelectorChanged = editor.selection.selectorChangedWithUnbind('a:not([href])', buttonApi.setActive).unbind;\n const unbindEditableChanged = onSetupEditable(editor)(buttonApi);\n return () => {\n unbindSelectorChanged();\n unbindEditableChanged();\n };\n }\n });\n editor.ui.registry.addMenuItem('anchor', {\n icon: 'bookmark',\n text: 'Anchor...',\n onAction,\n onSetup: onSetupEditable(editor)\n });\n };\n\n var Plugin = () => {\n global$2.add('anchor', editor => {\n register$2(editor);\n setup(editor);\n register$1(editor);\n register(editor);\n editor.on('PreInit', () => {\n registerFormats(editor);\n });\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"anchor\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/anchor')\n// ES2015:\n// import 'tinymce/plugins/anchor'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.0 (TBD)\n */\n\n(function () {\n 'use strict';\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType$1 = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const isString = isType$1('string');\n const isArray = isType$1('array');\n const isBoolean = isSimpleType('boolean');\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isNumber = isSimpleType('number');\n\n const noop = () => {\n };\n const constant = value => {\n return () => {\n return value;\n };\n };\n const always = constant(true);\n\n const punctuationStr = `[~\\u2116|!-*+-\\\\/:;?@\\\\[-\\`{}\\u00A1\\u00AB\\u00B7\\u00BB\\u00BF;\\u00B7\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1361-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u3008\\u3009\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30\\u2E31\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]`;\n\n const punctuation$1 = constant(punctuationStr);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const punctuation = punctuation$1;\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n const nativeSlice = Array.prototype.slice;\n const nativePush = Array.prototype.push;\n const map = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const eachr = (xs, f) => {\n for (let i = xs.length - 1; i >= 0; i--) {\n const x = xs[i];\n f(x, i);\n }\n };\n const groupBy = (xs, f) => {\n if (xs.length === 0) {\n return [];\n } else {\n let wasType = f(xs[0]);\n const r = [];\n let group = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n const type = f(x);\n if (type !== wasType) {\n r.push(group);\n group = [];\n }\n wasType = type;\n group.push(x);\n }\n if (group.length !== 0) {\n r.push(group);\n }\n return r;\n }\n };\n const foldl = (xs, f, acc) => {\n each(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind = (xs, f) => flatten(map(xs, f));\n const sort = (xs, comparator) => {\n const copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n\n const hasOwnProperty = Object.hasOwnProperty;\n const has = (obj, key) => hasOwnProperty.call(obj, key);\n\n typeof window !== 'undefined' ? window : Function('return this;')();\n\n const DOCUMENT = 9;\n const DOCUMENT_FRAGMENT = 11;\n const ELEMENT = 1;\n const TEXT = 3;\n\n const type = element => element.dom.nodeType;\n const isType = t => element => type(element) === t;\n const isText$1 = isType(TEXT);\n\n const rawSet = (dom, key, value) => {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n const set = (element, key, value) => {\n rawSet(element.dom, key, value);\n };\n\n const fromHtml = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n const message = 'HTML does not have a single root node';\n console.error(message, html);\n throw new Error(message);\n }\n return fromDom(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom(node);\n };\n const fromDom = node => {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n const fromPoint = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n const SugarElement = {\n fromHtml,\n fromTag,\n fromText,\n fromDom,\n fromPoint\n };\n\n const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n const all = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n\n const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n const children = element => map(element.dom.childNodes, SugarElement.fromDom);\n const spot = (element, offset) => ({\n element,\n offset\n });\n const leaf = (element, offset) => {\n const cs = children(element);\n return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);\n };\n\n const before = (marker, element) => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n const append = (parent, element) => {\n parent.dom.appendChild(element.dom);\n };\n const wrap = (element, wrapper) => {\n before(element, wrapper);\n append(wrapper, element);\n };\n\n const NodeValue = (is, name) => {\n const get = element => {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n const set = (element, value) => {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom.nodeValue = value;\n };\n return {\n get,\n getOption,\n set\n };\n };\n\n const api = NodeValue(isText$1, 'text');\n const get$1 = element => api.get(element);\n\n const compareDocumentPosition = (a, b, match) => {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n const documentPositionPreceding = (a, b) => {\n return compareDocumentPosition(a, b, Node.DOCUMENT_POSITION_PRECEDING);\n };\n\n const descendants = (scope, selector) => all(selector, scope);\n\n var global = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n const isSimpleBoundary = (dom, node) => dom.isBlock(node) || has(dom.schema.getVoidElements(), node.nodeName);\n const isContentEditableFalse = (dom, node) => !dom.isEditable(node);\n const isContentEditableTrueInCef = (dom, node) => dom.getContentEditable(node) === 'true' && node.parentNode && !dom.isEditable(node.parentNode);\n const isHidden = (dom, node) => !dom.isBlock(node) && has(dom.schema.getWhitespaceElements(), node.nodeName);\n const isBoundary = (dom, node) => isSimpleBoundary(dom, node) || isContentEditableFalse(dom, node) || isHidden(dom, node) || isContentEditableTrueInCef(dom, node);\n const isText = node => node.nodeType === 3;\n const nuSection = () => ({\n sOffset: 0,\n fOffset: 0,\n elements: []\n });\n const toLeaf = (node, offset) => leaf(SugarElement.fromDom(node), offset);\n const walk = (dom, walkerFn, startNode, callbacks, endNode, skipStart = true) => {\n let next = skipStart ? walkerFn(false) : startNode;\n while (next) {\n const isCefNode = isContentEditableFalse(dom, next);\n if (isCefNode || isHidden(dom, next)) {\n const stopWalking = isCefNode ? callbacks.cef(next) : callbacks.boundary(next);\n if (stopWalking) {\n break;\n } else {\n next = walkerFn(true);\n continue;\n }\n } else if (isSimpleBoundary(dom, next)) {\n if (callbacks.boundary(next)) {\n break;\n }\n } else if (isText(next)) {\n callbacks.text(next);\n }\n if (next === endNode) {\n break;\n } else {\n next = walkerFn(false);\n }\n }\n };\n const collectTextToBoundary = (dom, section, node, rootNode, forwards) => {\n var _a;\n if (isBoundary(dom, node)) {\n return;\n }\n const rootBlock = (_a = dom.getParent(rootNode, dom.isBlock)) !== null && _a !== void 0 ? _a : dom.getRoot();\n const walker = new global(node, rootBlock);\n const walkerFn = forwards ? walker.next.bind(walker) : walker.prev.bind(walker);\n walk(dom, walkerFn, node, {\n boundary: always,\n cef: always,\n text: next => {\n if (forwards) {\n section.fOffset += next.length;\n } else {\n section.sOffset += next.length;\n }\n section.elements.push(SugarElement.fromDom(next));\n }\n });\n };\n const collect = (dom, rootNode, startNode, endNode, callbacks, skipStart = true) => {\n const walker = new global(startNode, rootNode);\n const sections = [];\n let current = nuSection();\n collectTextToBoundary(dom, current, startNode, rootNode, false);\n const finishSection = () => {\n if (current.elements.length > 0) {\n sections.push(current);\n current = nuSection();\n }\n return false;\n };\n walk(dom, walker.next.bind(walker), startNode, {\n boundary: finishSection,\n cef: node => {\n finishSection();\n if (callbacks) {\n sections.push(...callbacks.cef(node));\n }\n return false;\n },\n text: next => {\n current.elements.push(SugarElement.fromDom(next));\n if (callbacks) {\n callbacks.text(next, current);\n }\n }\n }, endNode, skipStart);\n if (endNode) {\n collectTextToBoundary(dom, current, endNode, rootNode, true);\n }\n finishSection();\n return sections;\n };\n const collectRangeSections = (dom, rng) => {\n const start = toLeaf(rng.startContainer, rng.startOffset);\n const startNode = start.element.dom;\n const end = toLeaf(rng.endContainer, rng.endOffset);\n const endNode = end.element.dom;\n return collect(dom, rng.commonAncestorContainer, startNode, endNode, {\n text: (node, section) => {\n if (node === endNode) {\n section.fOffset += node.length - end.offset;\n } else if (node === startNode) {\n section.sOffset += start.offset;\n }\n },\n cef: node => {\n const sections = bind(descendants(SugarElement.fromDom(node), '*[contenteditable=true]'), e => {\n const ceTrueNode = e.dom;\n return collect(dom, ceTrueNode, ceTrueNode);\n });\n return sort(sections, (a, b) => documentPositionPreceding(a.elements[0].dom, b.elements[0].dom) ? 1 : -1);\n }\n }, false);\n };\n const fromRng = (dom, rng) => rng.collapsed ? [] : collectRangeSections(dom, rng);\n const fromNode = (dom, node) => {\n const rng = dom.createRng();\n rng.selectNode(node);\n return fromRng(dom, rng);\n };\n const fromNodes = (dom, nodes) => bind(nodes, node => fromNode(dom, node));\n\n const find$2 = (text, pattern, start = 0, finish = text.length) => {\n const regex = pattern.regex;\n regex.lastIndex = start;\n const results = [];\n let match;\n while (match = regex.exec(text)) {\n const matchedText = match[pattern.matchIndex];\n const matchStart = match.index + match[0].indexOf(matchedText);\n const matchFinish = matchStart + matchedText.length;\n if (matchFinish > finish) {\n break;\n }\n results.push({\n start: matchStart,\n finish: matchFinish\n });\n regex.lastIndex = matchFinish;\n }\n return results;\n };\n const extract = (elements, matches) => {\n const nodePositions = foldl(elements, (acc, element) => {\n const content = get$1(element);\n const start = acc.last;\n const finish = start + content.length;\n const positions = bind(matches, (match, matchIdx) => {\n if (match.start < finish && match.finish > start) {\n return [{\n element,\n start: Math.max(start, match.start) - start,\n finish: Math.min(finish, match.finish) - start,\n matchId: matchIdx\n }];\n } else {\n return [];\n }\n });\n return {\n results: acc.results.concat(positions),\n last: finish\n };\n }, {\n results: [],\n last: 0\n }).results;\n return groupBy(nodePositions, position => position.matchId);\n };\n\n const find$1 = (pattern, sections) => bind(sections, section => {\n const elements = section.elements;\n const content = map(elements, get$1).join('');\n const positions = find$2(content, pattern, section.sOffset, content.length - section.fOffset);\n return extract(elements, positions);\n });\n const mark = (matches, replacementNode) => {\n eachr(matches, (match, idx) => {\n eachr(match, pos => {\n const wrapper = SugarElement.fromDom(replacementNode.cloneNode(false));\n set(wrapper, 'data-mce-index', idx);\n const textNode = pos.element.dom;\n if (textNode.length === pos.finish && pos.start === 0) {\n wrap(pos.element, wrapper);\n } else {\n if (textNode.length !== pos.finish) {\n textNode.splitText(pos.finish);\n }\n const matchNode = textNode.splitText(pos.start);\n wrap(SugarElement.fromDom(matchNode), wrapper);\n }\n });\n });\n };\n const findAndMark = (dom, pattern, node, replacementNode) => {\n const textSections = fromNode(dom, node);\n const matches = find$1(pattern, textSections);\n mark(matches, replacementNode);\n return matches.length;\n };\n const findAndMarkInSelection = (dom, pattern, selection, replacementNode) => {\n const bookmark = selection.getBookmark();\n const nodes = dom.select('td[data-mce-selected],th[data-mce-selected]');\n const textSections = nodes.length > 0 ? fromNodes(dom, nodes) : fromRng(dom, selection.getRng());\n const matches = find$1(pattern, textSections);\n mark(matches, replacementNode);\n selection.moveToBookmark(bookmark);\n return matches.length;\n };\n\n const getElmIndex = elm => {\n return elm.getAttribute('data-mce-index');\n };\n const markAllMatches = (editor, currentSearchState, pattern, inSelection) => {\n const marker = editor.dom.create('span', { 'data-mce-bogus': 1 });\n marker.className = 'mce-match-marker';\n const node = editor.getBody();\n done(editor, currentSearchState, false);\n if (inSelection) {\n return findAndMarkInSelection(editor.dom, pattern, editor.selection, marker);\n } else {\n return findAndMark(editor.dom, pattern, node, marker);\n }\n };\n const unwrap = node => {\n var _a;\n const parentNode = node.parentNode;\n if (node.firstChild) {\n parentNode.insertBefore(node.firstChild, node);\n }\n (_a = node.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(node);\n };\n const findSpansByIndex = (editor, index) => {\n const spans = [];\n const nodes = global$1.toArray(editor.getBody().getElementsByTagName('span'));\n if (nodes.length) {\n for (let i = 0; i < nodes.length; i++) {\n const nodeIndex = getElmIndex(nodes[i]);\n if (nodeIndex === null || !nodeIndex.length) {\n continue;\n }\n if (nodeIndex === index.toString()) {\n spans.push(nodes[i]);\n }\n }\n }\n return spans;\n };\n const moveSelection = (editor, currentSearchState, forward) => {\n const searchState = currentSearchState.get();\n let testIndex = searchState.index;\n const dom = editor.dom;\n if (forward) {\n if (testIndex + 1 === searchState.count) {\n testIndex = 0;\n } else {\n testIndex++;\n }\n } else {\n if (testIndex - 1 === -1) {\n testIndex = searchState.count - 1;\n } else {\n testIndex--;\n }\n }\n dom.removeClass(findSpansByIndex(editor, searchState.index), 'mce-match-marker-selected');\n const spans = findSpansByIndex(editor, testIndex);\n if (spans.length) {\n dom.addClass(findSpansByIndex(editor, testIndex), 'mce-match-marker-selected');\n editor.selection.scrollIntoView(spans[0]);\n return testIndex;\n }\n return -1;\n };\n const removeNode = (dom, node) => {\n const parent = node.parentNode;\n dom.remove(node);\n if (parent && dom.isEmpty(parent)) {\n dom.remove(parent);\n }\n };\n const escapeSearchText = (text, wholeWord) => {\n const escapedText = text.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&').replace(/\\s/g, '[^\\\\S\\\\r\\\\n\\\\uFEFF]');\n const wordRegex = '(' + escapedText + ')';\n return wholeWord ? `(?:^|\\\\s|${ punctuation() })` + wordRegex + `(?=$|\\\\s|${ punctuation() })` : wordRegex;\n };\n const find = (editor, currentSearchState, text, matchCase, wholeWord, inSelection) => {\n const selection = editor.selection;\n const escapedText = escapeSearchText(text, wholeWord);\n const isForwardSelection = selection.isForward();\n const pattern = {\n regex: new RegExp(escapedText, matchCase ? 'g' : 'gi'),\n matchIndex: 1\n };\n const count = markAllMatches(editor, currentSearchState, pattern, inSelection);\n if (global$2.browser.isSafari()) {\n selection.setRng(selection.getRng(), isForwardSelection);\n }\n if (count) {\n const newIndex = moveSelection(editor, currentSearchState, true);\n currentSearchState.set({\n index: newIndex,\n count,\n text,\n matchCase,\n wholeWord,\n inSelection\n });\n }\n return count;\n };\n const next = (editor, currentSearchState) => {\n const index = moveSelection(editor, currentSearchState, true);\n currentSearchState.set({\n ...currentSearchState.get(),\n index\n });\n };\n const prev = (editor, currentSearchState) => {\n const index = moveSelection(editor, currentSearchState, false);\n currentSearchState.set({\n ...currentSearchState.get(),\n index\n });\n };\n const isMatchSpan = node => {\n const matchIndex = getElmIndex(node);\n return matchIndex !== null && matchIndex.length > 0;\n };\n const replace = (editor, currentSearchState, text, forward, all) => {\n const searchState = currentSearchState.get();\n const currentIndex = searchState.index;\n let currentMatchIndex, nextIndex = currentIndex;\n forward = forward !== false;\n const node = editor.getBody();\n const nodes = global$1.grep(global$1.toArray(node.getElementsByTagName('span')), isMatchSpan);\n for (let i = 0; i < nodes.length; i++) {\n const nodeIndex = getElmIndex(nodes[i]);\n let matchIndex = currentMatchIndex = parseInt(nodeIndex, 10);\n if (all || matchIndex === searchState.index) {\n if (text.length) {\n nodes[i].innerText = text;\n unwrap(nodes[i]);\n } else {\n removeNode(editor.dom, nodes[i]);\n }\n while (nodes[++i]) {\n matchIndex = parseInt(getElmIndex(nodes[i]), 10);\n if (matchIndex === currentMatchIndex) {\n removeNode(editor.dom, nodes[i]);\n } else {\n i--;\n break;\n }\n }\n if (forward) {\n nextIndex--;\n }\n } else if (currentMatchIndex > currentIndex) {\n nodes[i].setAttribute('data-mce-index', String(currentMatchIndex - 1));\n }\n }\n currentSearchState.set({\n ...searchState,\n count: all ? 0 : searchState.count - 1,\n index: nextIndex\n });\n if (forward) {\n next(editor, currentSearchState);\n } else {\n prev(editor, currentSearchState);\n }\n return !all && currentSearchState.get().count > 0;\n };\n const done = (editor, currentSearchState, keepEditorSelection) => {\n let startContainer;\n let endContainer;\n const searchState = currentSearchState.get();\n const nodes = global$1.toArray(editor.getBody().getElementsByTagName('span'));\n for (let i = 0; i < nodes.length; i++) {\n const nodeIndex = getElmIndex(nodes[i]);\n if (nodeIndex !== null && nodeIndex.length) {\n if (nodeIndex === searchState.index.toString()) {\n if (!startContainer) {\n startContainer = nodes[i].firstChild;\n }\n endContainer = nodes[i].firstChild;\n }\n unwrap(nodes[i]);\n }\n }\n currentSearchState.set({\n ...searchState,\n index: -1,\n count: 0,\n text: ''\n });\n if (startContainer && endContainer) {\n const rng = editor.dom.createRng();\n rng.setStart(startContainer, 0);\n rng.setEnd(endContainer, endContainer.data.length);\n if (keepEditorSelection !== false) {\n editor.selection.setRng(rng);\n }\n return rng;\n } else {\n return undefined;\n }\n };\n const hasNext = (editor, currentSearchState) => currentSearchState.get().count > 1;\n const hasPrev = (editor, currentSearchState) => currentSearchState.get().count > 1;\n\n const get = (editor, currentState) => {\n const done$1 = keepEditorSelection => {\n return done(editor, currentState, keepEditorSelection);\n };\n const find$1 = (text, matchCase, wholeWord, inSelection = false) => {\n return find(editor, currentState, text, matchCase, wholeWord, inSelection);\n };\n const next$1 = () => {\n return next(editor, currentState);\n };\n const prev$1 = () => {\n return prev(editor, currentState);\n };\n const replace$1 = (text, forward, all) => {\n return replace(editor, currentState, text, forward, all);\n };\n return {\n done: done$1,\n find: find$1,\n next: next$1,\n prev: prev$1,\n replace: replace$1\n };\n };\n\n const singleton = doRevoke => {\n const subject = Cell(Optional.none());\n const revoke = () => subject.get().each(doRevoke);\n const clear = () => {\n revoke();\n subject.set(Optional.none());\n };\n const isSet = () => subject.get().isSome();\n const get = () => subject.get();\n const set = s => {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear,\n isSet,\n get,\n set\n };\n };\n const value = () => {\n const subject = singleton(noop);\n const on = f => subject.get().each(f);\n return {\n ...subject,\n on\n };\n };\n\n const open = (editor, currentSearchState) => {\n const dialogApi = value();\n editor.undoManager.add();\n const selectedText = global$1.trim(editor.selection.getContent({ format: 'text' }));\n const updateButtonStates = api => {\n api.setEnabled('next', hasNext(editor, currentSearchState));\n api.setEnabled('prev', hasPrev(editor, currentSearchState));\n };\n const updateSearchState = api => {\n const data = api.getData();\n const current = currentSearchState.get();\n currentSearchState.set({\n ...current,\n matchCase: data.matchcase,\n wholeWord: data.wholewords,\n inSelection: data.inselection\n });\n };\n const disableAll = (api, disable) => {\n const buttons = [\n 'replace',\n 'replaceall',\n 'prev',\n 'next'\n ];\n const toggle = name => api.setEnabled(name, !disable);\n each(buttons, toggle);\n };\n const toggleNotFoundAlert = (isVisible, api) => {\n api.redial(getDialogSpec(isVisible, api.getData()));\n };\n const focusButtonIfRequired = (api, name) => {\n if (global$2.browser.isSafari() && global$2.deviceType.isTouch() && (name === 'find' || name === 'replace' || name === 'replaceall')) {\n api.focus(name);\n }\n };\n const reset = api => {\n done(editor, currentSearchState, false);\n disableAll(api, true);\n updateButtonStates(api);\n };\n const doFind = api => {\n const data = api.getData();\n const last = currentSearchState.get();\n if (!data.findtext.length) {\n reset(api);\n return;\n }\n if (last.text === data.findtext && last.matchCase === data.matchcase && last.wholeWord === data.wholewords) {\n next(editor, currentSearchState);\n } else {\n const count = find(editor, currentSearchState, data.findtext, data.matchcase, data.wholewords, data.inselection);\n if (count <= 0) {\n toggleNotFoundAlert(true, api);\n }\n disableAll(api, count === 0);\n }\n updateButtonStates(api);\n };\n const initialState = currentSearchState.get();\n const initialData = {\n findtext: selectedText,\n replacetext: '',\n wholewords: initialState.wholeWord,\n matchcase: initialState.matchCase,\n inselection: initialState.inSelection\n };\n const getPanelItems = error => {\n const items = [\n {\n type: 'label',\n label: 'Find',\n for: 'findtext',\n items: [{\n type: 'bar',\n items: [\n {\n type: 'input',\n name: 'findtext',\n maximized: true,\n inputMode: 'search'\n },\n {\n type: 'button',\n name: 'prev',\n text: 'Previous',\n icon: 'action-prev',\n enabled: false,\n borderless: true\n },\n {\n type: 'button',\n name: 'next',\n text: 'Next',\n icon: 'action-next',\n enabled: false,\n borderless: true\n }\n ]\n }]\n },\n {\n type: 'input',\n name: 'replacetext',\n label: 'Replace with',\n inputMode: 'search'\n }\n ];\n if (error) {\n items.push({\n type: 'alertbanner',\n level: 'error',\n text: 'Could not find the specified string.',\n icon: 'warning'\n });\n }\n return items;\n };\n const getDialogSpec = (showNoMatchesAlertBanner, initialData) => ({\n title: 'Find and Replace',\n size: 'normal',\n body: {\n type: 'panel',\n items: getPanelItems(showNoMatchesAlertBanner)\n },\n buttons: [\n {\n type: 'menu',\n name: 'options',\n icon: 'preferences',\n tooltip: 'Preferences',\n align: 'start',\n items: [\n {\n type: 'togglemenuitem',\n name: 'matchcase',\n text: 'Match case'\n },\n {\n type: 'togglemenuitem',\n name: 'wholewords',\n text: 'Find whole words only'\n },\n {\n type: 'togglemenuitem',\n name: 'inselection',\n text: 'Find in selection'\n }\n ]\n },\n {\n type: 'custom',\n name: 'find',\n text: 'Find',\n primary: true\n },\n {\n type: 'custom',\n name: 'replace',\n text: 'Replace',\n enabled: false\n },\n {\n type: 'custom',\n name: 'replaceall',\n text: 'Replace all',\n enabled: false\n }\n ],\n initialData,\n onChange: (api, details) => {\n if (showNoMatchesAlertBanner) {\n toggleNotFoundAlert(false, api);\n }\n if (details.name === 'findtext' && currentSearchState.get().count > 0) {\n reset(api);\n }\n },\n onAction: (api, details) => {\n const data = api.getData();\n switch (details.name) {\n case 'find':\n doFind(api);\n break;\n case 'replace':\n if (!replace(editor, currentSearchState, data.replacetext)) {\n reset(api);\n } else {\n updateButtonStates(api);\n }\n break;\n case 'replaceall':\n replace(editor, currentSearchState, data.replacetext, true, true);\n reset(api);\n break;\n case 'prev':\n prev(editor, currentSearchState);\n updateButtonStates(api);\n break;\n case 'next':\n next(editor, currentSearchState);\n updateButtonStates(api);\n break;\n case 'matchcase':\n case 'wholewords':\n case 'inselection':\n toggleNotFoundAlert(false, api);\n updateSearchState(api);\n reset(api);\n break;\n }\n focusButtonIfRequired(api, details.name);\n },\n onSubmit: api => {\n doFind(api);\n focusButtonIfRequired(api, 'find');\n },\n onClose: () => {\n editor.focus();\n done(editor, currentSearchState);\n editor.undoManager.add();\n }\n });\n dialogApi.set(editor.windowManager.open(getDialogSpec(false, initialData), { inline: 'toolbar' }));\n };\n\n const register$1 = (editor, currentSearchState) => {\n editor.addCommand('SearchReplace', () => {\n open(editor, currentSearchState);\n });\n };\n\n const showDialog = (editor, currentSearchState) => () => {\n open(editor, currentSearchState);\n };\n const register = (editor, currentSearchState) => {\n editor.ui.registry.addMenuItem('searchreplace', {\n text: 'Find and replace...',\n shortcut: 'Meta+F',\n onAction: showDialog(editor, currentSearchState),\n icon: 'search'\n });\n editor.ui.registry.addButton('searchreplace', {\n tooltip: 'Find and replace',\n onAction: showDialog(editor, currentSearchState),\n icon: 'search',\n shortcut: 'Meta+F'\n });\n editor.shortcuts.add('Meta+F', '', showDialog(editor, currentSearchState));\n };\n\n var Plugin = () => {\n global$3.add('searchreplace', editor => {\n const currentSearchState = Cell({\n index: -1,\n count: 0,\n text: '',\n matchCase: false,\n wholeWord: false,\n inSelection: false\n });\n register$1(editor, currentSearchState);\n register(editor, currentSearchState);\n return get(editor, currentSearchState);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"searchreplace\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/searchreplace')\n// ES2015:\n// import 'tinymce/plugins/searchreplace'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.0 (TBD)\n */\n\n(function () {\n 'use strict';\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const fireVisualBlocks = (editor, state) => {\n editor.dispatch('VisualBlocks', { state });\n };\n\n const toggleVisualBlocks = (editor, pluginUrl, enabledState) => {\n const dom = editor.dom;\n dom.toggleClass(editor.getBody(), 'mce-visualblocks');\n enabledState.set(!enabledState.get());\n fireVisualBlocks(editor, enabledState.get());\n };\n\n const register$2 = (editor, pluginUrl, enabledState) => {\n editor.addCommand('mceVisualBlocks', () => {\n toggleVisualBlocks(editor, pluginUrl, enabledState);\n });\n };\n\n const option = name => editor => editor.options.get(name);\n const register$1 = editor => {\n const registerOption = editor.options.register;\n registerOption('visualblocks_default_state', {\n processor: 'boolean',\n default: false\n });\n };\n const isEnabledByDefault = option('visualblocks_default_state');\n\n const setup = (editor, pluginUrl, enabledState) => {\n editor.on('PreviewFormats AfterPreviewFormats', e => {\n if (enabledState.get()) {\n editor.dom.toggleClass(editor.getBody(), 'mce-visualblocks', e.type === 'afterpreviewformats');\n }\n });\n editor.on('init', () => {\n if (isEnabledByDefault(editor)) {\n toggleVisualBlocks(editor, pluginUrl, enabledState);\n }\n });\n };\n\n const toggleActiveState = (editor, enabledState) => api => {\n api.setActive(enabledState.get());\n const editorEventCallback = e => api.setActive(e.state);\n editor.on('VisualBlocks', editorEventCallback);\n return () => editor.off('VisualBlocks', editorEventCallback);\n };\n const register = (editor, enabledState) => {\n const onAction = () => editor.execCommand('mceVisualBlocks');\n editor.ui.registry.addToggleButton('visualblocks', {\n icon: 'visualblocks',\n tooltip: 'Show blocks',\n onAction,\n onSetup: toggleActiveState(editor, enabledState),\n context: 'any'\n });\n editor.ui.registry.addToggleMenuItem('visualblocks', {\n text: 'Show blocks',\n icon: 'visualblocks',\n onAction,\n onSetup: toggleActiveState(editor, enabledState),\n context: 'any'\n });\n };\n\n var Plugin = () => {\n global.add('visualblocks', (editor, pluginUrl) => {\n register$1(editor);\n const enabledState = Cell(false);\n register$2(editor, pluginUrl, enabledState);\n register(editor, enabledState);\n setup(editor, pluginUrl, enabledState);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"visualblocks\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/visualblocks')\n// ES2015:\n// import 'tinymce/plugins/visualblocks'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.0 (TBD)\n */\n\n(function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const setContent = (editor, html) => {\n editor.focus();\n editor.undoManager.transact(() => {\n editor.setContent(html);\n });\n editor.selection.setCursorLocation();\n editor.nodeChanged();\n };\n const getContent = editor => {\n return editor.getContent({ source_view: true });\n };\n\n const open = editor => {\n const editorContent = getContent(editor);\n editor.windowManager.open({\n title: 'Source Code',\n size: 'large',\n body: {\n type: 'panel',\n items: [{\n type: 'textarea',\n name: 'code'\n }]\n },\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n initialData: { code: editorContent },\n onSubmit: api => {\n setContent(editor, api.getData().code);\n api.close();\n }\n });\n };\n\n const register$1 = editor => {\n editor.addCommand('mceCodeEditor', () => {\n open(editor);\n });\n };\n\n const register = editor => {\n const onAction = () => editor.execCommand('mceCodeEditor');\n editor.ui.registry.addButton('code', {\n icon: 'sourcecode',\n tooltip: 'Source code',\n onAction\n });\n editor.ui.registry.addMenuItem('code', {\n icon: 'sourcecode',\n text: 'Source code',\n onAction\n });\n };\n\n var Plugin = () => {\n global.add('code', editor => {\n register$1(editor);\n register(editor);\n return {};\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"code\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/code')\n// ES2015:\n// import 'tinymce/plugins/code'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.0 (TBD)\n */\n\n(function () {\n 'use strict';\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const get$5 = fullscreenState => ({ isFullscreen: () => fullscreenState.get() !== null });\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType$1 = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq$1 = t => a => t === a;\n const isString = isType$1('string');\n const isObject = isType$1('object');\n const isArray = isType$1('array');\n const isNull = eq$1(null);\n const isBoolean = isSimpleType('boolean');\n const isUndefined = eq$1(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isNumber = isSimpleType('number');\n\n const noop = () => {\n };\n const compose = (fa, fb) => {\n return (...args) => {\n return fa(fb.apply(null, args));\n };\n };\n const compose1 = (fbc, fab) => a => fbc(fab(a));\n const constant = value => {\n return () => {\n return value;\n };\n };\n function curry(fn, ...initialArgs) {\n return (...restArgs) => {\n const all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n const never = constant(false);\n const always = constant(true);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativePush = Array.prototype.push;\n const map = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each$1 = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const filter$1 = (xs, pred) => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n const findUntil = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n const find$1 = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind$3 = (xs, f) => flatten(map(xs, f));\n const get$4 = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n const head = xs => get$4(xs, 0);\n const findMap = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n const r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n const lift2 = (oa, ob, f) => oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n\n const singleton = doRevoke => {\n const subject = Cell(Optional.none());\n const revoke = () => subject.get().each(doRevoke);\n const clear = () => {\n revoke();\n subject.set(Optional.none());\n };\n const isSet = () => subject.get().isSome();\n const get = () => subject.get();\n const set = s => {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear,\n isSet,\n get,\n set\n };\n };\n const unbindable = () => singleton(s => s.unbind());\n const value = () => {\n const subject = singleton(noop);\n const on = f => subject.get().each(f);\n return {\n ...subject,\n on\n };\n };\n\n const first = (fn, rate) => {\n let timer = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const throttle = (...args) => {\n if (isNull(timer)) {\n timer = setTimeout(() => {\n timer = null;\n fn.apply(null, args);\n }, rate);\n }\n };\n return {\n cancel,\n throttle\n };\n };\n\n const keys = Object.keys;\n const each = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n\n const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n const path = (parts, scope) => {\n let o = scope !== undefined && scope !== null ? scope : Global;\n for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n const resolve = (p, scope) => {\n const parts = p.split('.');\n return path(parts, scope);\n };\n\n const unsafe = (name, scope) => {\n return resolve(name, scope);\n };\n const getOrDie = (name, scope) => {\n const actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n\n const getPrototypeOf = Object.getPrototypeOf;\n const sandHTMLElement = scope => {\n return getOrDie('HTMLElement', scope);\n };\n const isPrototypeOf = x => {\n const scope = resolve('ownerDocument.defaultView', x);\n return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf(x).constructor.name));\n };\n\n const DOCUMENT = 9;\n const DOCUMENT_FRAGMENT = 11;\n const ELEMENT = 1;\n const TEXT = 3;\n\n const type = element => element.dom.nodeType;\n const isType = t => element => type(element) === t;\n const isHTMLElement = element => isElement(element) && isPrototypeOf(element.dom);\n const isElement = isType(ELEMENT);\n const isText = isType(TEXT);\n const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n\n const rawSet = (dom, key, value) => {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n const set$1 = (element, key, value) => {\n rawSet(element.dom, key, value);\n };\n const get$3 = (element, key) => {\n const v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n const remove = (element, key) => {\n element.dom.removeAttribute(key);\n };\n\n const supports = element => element.dom.classList !== undefined;\n\n const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n\n const contains = (str, substr, start = 0, end) => {\n const idx = str.indexOf(substr, start);\n if (idx !== -1) {\n return isUndefined(end) ? true : idx + substr.length <= end;\n } else {\n return false;\n }\n };\n\n const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n const fromHtml = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n const message = 'HTML does not have a single root node';\n console.error(message, html);\n throw new Error(message);\n }\n return fromDom(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom(node);\n };\n const fromDom = node => {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n const fromPoint = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n const SugarElement = {\n fromHtml,\n fromTag,\n fromText,\n fromDom,\n fromPoint\n };\n\n const is = (element, selector) => {\n const dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n const elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n const all$1 = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n\n const eq = (e1, e2) => e1.dom === e2.dom;\n\n const owner = element => SugarElement.fromDom(element.dom.ownerDocument);\n const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n const parents = (element, isRoot) => {\n const stop = isFunction(isRoot) ? isRoot : never;\n let dom = element.dom;\n const ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n const rawParent = dom.parentNode;\n const p = SugarElement.fromDom(rawParent);\n ret.push(p);\n if (stop(p) === true) {\n break;\n } else {\n dom = rawParent;\n }\n }\n return ret;\n };\n const siblings$2 = element => {\n const filterSelf = elements => filter$1(elements, x => !eq(element, x));\n return parent(element).map(children).map(filterSelf).getOr([]);\n };\n const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n const children = element => map(element.dom.childNodes, SugarElement.fromDom);\n\n const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n const getRootNode = e => SugarElement.fromDom(e.dom.getRootNode());\n const getShadowRoot = e => {\n const r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n const getOriginalEventTarget = event => {\n if (isNonNullable(event.target)) {\n const el = SugarElement.fromDom(event.target);\n if (isElement(el) && isOpenShadowHost(el)) {\n if (event.composed && event.composedPath) {\n const composedPath = event.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Optional.from(event.target);\n };\n const isOpenShadowHost = element => isNonNullable(element.dom.shadowRoot);\n\n const inBody = element => {\n const dom = isText(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n const doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n };\n const getBody = doc => {\n const b = doc.dom.body;\n if (b === null || b === undefined) {\n throw new Error('Body is not available yet');\n }\n return SugarElement.fromDom(b);\n };\n\n const internalSet = (dom, property, value) => {\n if (!isString(value)) {\n console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n const set = (element, property, value) => {\n const dom = element.dom;\n internalSet(dom, property, value);\n };\n const setAll = (element, css) => {\n const dom = element.dom;\n each(css, (v, k) => {\n internalSet(dom, k, v);\n });\n };\n const get$2 = (element, property) => {\n const dom = element.dom;\n const styles = window.getComputedStyle(dom);\n const r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n const getUnsafeProperty = (dom, property) => isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n\n const mkEvent = (target, x, y, stop, prevent, kill, raw) => ({\n target,\n x,\n y,\n stop,\n prevent,\n kill,\n raw\n });\n const fromRawEvent = rawEvent => {\n const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n const stop = () => rawEvent.stopPropagation();\n const prevent = () => rawEvent.preventDefault();\n const kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n const handle = (filter, handler) => rawEvent => {\n if (filter(rawEvent)) {\n handler(fromRawEvent(rawEvent));\n }\n };\n const binder = (element, event, filter, handler, useCapture) => {\n const wrapped = handle(filter, handler);\n element.dom.addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n const bind$2 = (element, event, filter, handler) => binder(element, event, filter, handler, false);\n const unbind = (element, event, handler, useCapture) => {\n element.dom.removeEventListener(event, handler, useCapture);\n };\n\n const filter = always;\n const bind$1 = (element, event, handler) => bind$2(element, event, filter, handler);\n\n const cached = f => {\n let called = false;\n let r;\n return (...args) => {\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n const DeviceType = (os, browser, userAgent, mediaMatch) => {\n const isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n const isiPhone = os.isiOS() && !isiPad;\n const isMobile = os.isiOS() || os.isAndroid();\n const isTouch = isMobile || mediaMatch('(pointer:coarse)');\n const isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n const isPhone = isiPhone || isMobile && !isTablet;\n const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n const isDesktop = !isPhone && !isTablet && !iOSwebview;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview),\n isDesktop: constant(isDesktop)\n };\n };\n\n const firstMatch = (regexes, s) => {\n for (let i = 0; i < regexes.length; i++) {\n const x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n const find = (regexes, agent) => {\n const r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n const group = i => {\n return Number(agent.replace(r, '$' + i));\n };\n return nu$2(group(1), group(2));\n };\n const detect$3 = (versionRegexes, agent) => {\n const cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$2();\n }\n return find(versionRegexes, cleanedAgent);\n };\n const unknown$2 = () => {\n return nu$2(0, 0);\n };\n const nu$2 = (major, minor) => {\n return {\n major,\n minor\n };\n };\n const Version = {\n nu: nu$2,\n detect: detect$3,\n unknown: unknown$2\n };\n\n const detectBrowser$1 = (browsers, userAgentData) => {\n return findMap(userAgentData.brands, uaBrand => {\n const lcBrand = uaBrand.brand.toLowerCase();\n return find$1(browsers, browser => {\n var _a;\n return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n }).map(info => ({\n current: info.name,\n version: Version.nu(parseInt(uaBrand.version, 10), 0)\n }));\n });\n };\n\n const detect$2 = (candidates, userAgent) => {\n const agent = String(userAgent).toLowerCase();\n return find$1(candidates, candidate => {\n return candidate.search(agent);\n });\n };\n const detectBrowser = (browsers, userAgent) => {\n return detect$2(browsers, userAgent).map(browser => {\n const version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version\n };\n });\n };\n const detectOs = (oses, userAgent) => {\n return detect$2(oses, userAgent).map(os => {\n const version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version\n };\n });\n };\n\n const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n const checkContains = target => {\n return uastring => {\n return contains(uastring, target);\n };\n };\n const browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: uastring => {\n return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chromium',\n brand: 'Chromium',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: uastring => {\n return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: uastring => {\n return contains(uastring, 'msie') || contains(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: uastring => {\n return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');\n }\n }\n ];\n const oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: uastring => {\n return contains(uastring, 'iphone') || contains(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'macOS',\n search: checkContains('mac os x'),\n versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n },\n {\n name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n const PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n const edge = 'Edge';\n const chromium = 'Chromium';\n const ie = 'IE';\n const opera = 'Opera';\n const firefox = 'Firefox';\n const safari = 'Safari';\n const unknown$1 = () => {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$1 = info => {\n const current = info.current;\n const version = info.version;\n const isBrowser = name => () => current === name;\n return {\n current,\n version,\n isEdge: isBrowser(edge),\n isChromium: isBrowser(chromium),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n const Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chromium: constant(chromium),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n const windows = 'Windows';\n const ios = 'iOS';\n const android = 'Android';\n const linux = 'Linux';\n const macos = 'macOS';\n const solaris = 'Solaris';\n const freebsd = 'FreeBSD';\n const chromeos = 'ChromeOS';\n const unknown = () => {\n return nu({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu = info => {\n const current = info.current;\n const version = info.version;\n const isOS = name => () => current === name;\n return {\n current,\n version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isMacOS: isOS(macos),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n const OperatingSystem = {\n unknown,\n nu,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n macos: constant(macos),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n const detect$1 = (userAgent, userAgentDataOpt, mediaMatch) => {\n const browsers = PlatformInfo.browsers();\n const oses = PlatformInfo.oses();\n const browser = userAgentDataOpt.bind(userAgentData => detectBrowser$1(browsers, userAgentData)).orThunk(() => detectBrowser(browsers, userAgent)).fold(Browser.unknown, Browser.nu);\n const os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n const deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n return {\n browser,\n os,\n deviceType\n };\n };\n const PlatformDetection = { detect: detect$1 };\n\n const mediaMatch = query => window.matchMedia(query).matches;\n let platform = cached(() => PlatformDetection.detect(window.navigator.userAgent, Optional.from(window.navigator.userAgentData), mediaMatch));\n const detect = () => platform();\n\n const r = (left, top) => {\n const translate = (x, y) => r(left + x, top + y);\n return {\n left,\n top,\n translate\n };\n };\n const SugarPosition = r;\n\n const get$1 = _DOC => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n const y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return SugarPosition(x, y);\n };\n\n const get = _win => {\n const win = _win === undefined ? window : _win;\n if (detect().browser.isFirefox()) {\n return Optional.none();\n } else {\n return Optional.from(win.visualViewport);\n }\n };\n const bounds = (x, y, width, height) => ({\n x,\n y,\n width,\n height,\n right: x + width,\n bottom: y + height\n });\n const getBounds = _win => {\n const win = _win === undefined ? window : _win;\n const doc = win.document;\n const scroll = get$1(SugarElement.fromDom(doc));\n return get(win).fold(() => {\n const html = win.document.documentElement;\n const width = html.clientWidth;\n const height = html.clientHeight;\n return bounds(scroll.left, scroll.top, width, height);\n }, visualViewport => bounds(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height));\n };\n const bind = (name, callback, _win) => get(_win).map(visualViewport => {\n const handler = e => callback(fromRawEvent(e));\n visualViewport.addEventListener(name, handler);\n return { unbind: () => visualViewport.removeEventListener(name, handler) };\n }).getOrThunk(() => ({ unbind: noop }));\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n const fireFullscreenStateChanged = (editor, state) => {\n editor.dispatch('FullscreenStateChanged', { state });\n editor.dispatch('ResizeEditor');\n };\n\n const option = name => editor => editor.options.get(name);\n const register$2 = editor => {\n const registerOption = editor.options.register;\n registerOption('fullscreen_native', {\n processor: 'boolean',\n default: false\n });\n };\n const getFullscreenNative = option('fullscreen_native');\n\n const getFullscreenRoot = editor => {\n const elem = SugarElement.fromDom(editor.getElement());\n return getShadowRoot(elem).map(getShadowHost).getOrThunk(() => getBody(owner(elem)));\n };\n const getFullscreenElement = root => {\n if (root.fullscreenElement !== undefined) {\n return root.fullscreenElement;\n } else if (root.msFullscreenElement !== undefined) {\n return root.msFullscreenElement;\n } else if (root.webkitFullscreenElement !== undefined) {\n return root.webkitFullscreenElement;\n } else {\n return null;\n }\n };\n const getFullscreenchangeEventName = () => {\n if (document.fullscreenElement !== undefined) {\n return 'fullscreenchange';\n } else if (document.msFullscreenElement !== undefined) {\n return 'MSFullscreenChange';\n } else if (document.webkitFullscreenElement !== undefined) {\n return 'webkitfullscreenchange';\n } else {\n return 'fullscreenchange';\n }\n };\n const requestFullscreen = sugarElem => {\n const elem = sugarElem.dom;\n if (elem.requestFullscreen) {\n elem.requestFullscreen();\n } else if (elem.msRequestFullscreen) {\n elem.msRequestFullscreen();\n } else if (elem.webkitRequestFullScreen) {\n elem.webkitRequestFullScreen();\n }\n };\n const exitFullscreen = sugarDoc => {\n const doc = sugarDoc.dom;\n if (doc.exitFullscreen) {\n doc.exitFullscreen();\n } else if (doc.msExitFullscreen) {\n doc.msExitFullscreen();\n } else if (doc.webkitCancelFullScreen) {\n doc.webkitCancelFullScreen();\n }\n };\n const isFullscreenElement = elem => elem.dom === getFullscreenElement(owner(elem).dom);\n\n const ancestors$1 = (scope, predicate, isRoot) => filter$1(parents(scope, isRoot), predicate);\n const siblings$1 = (scope, predicate) => filter$1(siblings$2(scope), predicate);\n\n const all = selector => all$1(selector);\n const ancestors = (scope, selector, isRoot) => ancestors$1(scope, e => is(e, selector), isRoot);\n const siblings = (scope, selector) => siblings$1(scope, e => is(e, selector));\n\n const attr = 'data-ephox-mobile-fullscreen-style';\n const siblingStyles = 'display:none!important;';\n const ancestorPosition = 'position:absolute!important;';\n const ancestorStyles = 'top:0!important;left:0!important;margin:0!important;padding:0!important;width:100%!important;height:100%!important;overflow:visible!important;';\n const bgFallback = 'background-color:rgb(255,255,255)!important;';\n const isAndroid = global$1.os.isAndroid();\n const matchColor = editorBody => {\n const color = get$2(editorBody, 'background-color');\n return color !== undefined && color !== '' ? 'background-color:' + color + '!important' : bgFallback;\n };\n const clobberStyles = (dom, container, editorBody) => {\n const gatherSiblings = element => {\n return siblings(element, '*:not(.tox-silver-sink)');\n };\n const clobber = clobberStyle => element => {\n const styles = get$3(element, 'style');\n const backup = styles === undefined ? 'no-styles' : styles.trim();\n if (backup === clobberStyle) {\n return;\n } else {\n set$1(element, attr, backup);\n setAll(element, dom.parseStyle(clobberStyle));\n }\n };\n const ancestors$1 = ancestors(container, '*');\n const siblings$1 = bind$3(ancestors$1, gatherSiblings);\n const bgColor = matchColor(editorBody);\n each$1(siblings$1, clobber(siblingStyles));\n each$1(ancestors$1, clobber(ancestorPosition + ancestorStyles + bgColor));\n const containerStyles = isAndroid === true ? '' : ancestorPosition;\n clobber(containerStyles + ancestorStyles + bgColor)(container);\n };\n const restoreStyles = dom => {\n const clobberedEls = all('[' + attr + ']');\n each$1(clobberedEls, element => {\n const restore = get$3(element, attr);\n if (restore && restore !== 'no-styles') {\n setAll(element, dom.parseStyle(restore));\n } else {\n remove(element, 'style');\n }\n remove(element, attr);\n });\n };\n\n const DOM = global$2.DOM;\n const getScrollPos = () => getBounds(window);\n const setScrollPos = pos => window.scrollTo(pos.x, pos.y);\n const viewportUpdate = get().fold(() => ({\n bind: noop,\n unbind: noop\n }), visualViewport => {\n const editorContainer = value();\n const resizeBinder = unbindable();\n const scrollBinder = unbindable();\n const refreshScroll = () => {\n document.body.scrollTop = 0;\n document.documentElement.scrollTop = 0;\n };\n const refreshVisualViewport = () => {\n window.requestAnimationFrame(() => {\n editorContainer.on(container => setAll(container, {\n top: visualViewport.offsetTop + 'px',\n left: visualViewport.offsetLeft + 'px',\n height: visualViewport.height + 'px',\n width: visualViewport.width + 'px'\n }));\n });\n };\n const update = first(() => {\n refreshScroll();\n refreshVisualViewport();\n }, 50);\n const bind$1 = element => {\n editorContainer.set(element);\n update.throttle();\n resizeBinder.set(bind('resize', update.throttle));\n scrollBinder.set(bind('scroll', update.throttle));\n };\n const unbind = () => {\n editorContainer.on(() => {\n resizeBinder.clear();\n scrollBinder.clear();\n });\n editorContainer.clear();\n };\n return {\n bind: bind$1,\n unbind\n };\n });\n const toggleFullscreen = (editor, fullscreenState) => {\n const body = document.body;\n const documentElement = document.documentElement;\n const editorContainer = editor.getContainer();\n const editorContainerS = SugarElement.fromDom(editorContainer);\n const sinkContainerS = nextSibling(editorContainerS).filter(elm => isHTMLElement(elm) && has(elm, 'tox-silver-sink'));\n const fullscreenRoot = getFullscreenRoot(editor);\n const fullscreenInfo = fullscreenState.get();\n const editorBody = SugarElement.fromDom(editor.getBody());\n const isTouch = global$1.deviceType.isTouch();\n const editorContainerStyle = editorContainer.style;\n const iframe = editor.iframeElement;\n const iframeStyle = iframe === null || iframe === void 0 ? void 0 : iframe.style;\n const handleClasses = handler => {\n handler(body, 'tox-fullscreen');\n handler(documentElement, 'tox-fullscreen');\n handler(editorContainer, 'tox-fullscreen');\n getShadowRoot(editorContainerS).map(root => getShadowHost(root).dom).each(host => {\n handler(host, 'tox-fullscreen');\n handler(host, 'tox-shadowhost');\n });\n };\n const cleanup = () => {\n if (isTouch) {\n restoreStyles(editor.dom);\n }\n handleClasses(DOM.removeClass);\n viewportUpdate.unbind();\n Optional.from(fullscreenState.get()).each(info => info.fullscreenChangeHandler.unbind());\n };\n if (!fullscreenInfo) {\n const fullscreenChangeHandler = bind$1(owner(fullscreenRoot), getFullscreenchangeEventName(), _evt => {\n if (getFullscreenNative(editor)) {\n if (!isFullscreenElement(fullscreenRoot) && fullscreenState.get() !== null) {\n toggleFullscreen(editor, fullscreenState);\n }\n }\n });\n const newFullScreenInfo = {\n scrollPos: getScrollPos(),\n containerWidth: editorContainerStyle.width,\n containerHeight: editorContainerStyle.height,\n containerTop: editorContainerStyle.top,\n containerLeft: editorContainerStyle.left,\n iframeWidth: iframeStyle.width,\n iframeHeight: iframeStyle.height,\n fullscreenChangeHandler,\n sinkCssPosition: sinkContainerS.map(elm => get$2(elm, 'position'))\n };\n if (isTouch) {\n clobberStyles(editor.dom, editorContainerS, editorBody);\n }\n iframeStyle.width = iframeStyle.height = '100%';\n editorContainerStyle.width = editorContainerStyle.height = '';\n handleClasses(DOM.addClass);\n sinkContainerS.each(elm => {\n set(elm, 'position', 'fixed');\n });\n viewportUpdate.bind(editorContainerS);\n editor.on('remove', cleanup);\n fullscreenState.set(newFullScreenInfo);\n if (getFullscreenNative(editor)) {\n requestFullscreen(fullscreenRoot);\n }\n fireFullscreenStateChanged(editor, true);\n } else {\n fullscreenInfo.fullscreenChangeHandler.unbind();\n if (getFullscreenNative(editor) && isFullscreenElement(fullscreenRoot)) {\n exitFullscreen(owner(fullscreenRoot));\n }\n iframeStyle.width = fullscreenInfo.iframeWidth;\n iframeStyle.height = fullscreenInfo.iframeHeight;\n editorContainerStyle.width = fullscreenInfo.containerWidth;\n editorContainerStyle.height = fullscreenInfo.containerHeight;\n editorContainerStyle.top = fullscreenInfo.containerTop;\n editorContainerStyle.left = fullscreenInfo.containerLeft;\n lift2(sinkContainerS, fullscreenInfo.sinkCssPosition, (elm, val) => {\n set(elm, 'position', val);\n });\n cleanup();\n setScrollPos(fullscreenInfo.scrollPos);\n fullscreenState.set(null);\n fireFullscreenStateChanged(editor, false);\n editor.off('remove', cleanup);\n }\n };\n\n const register$1 = (editor, fullscreenState) => {\n editor.addCommand('mceFullScreen', () => {\n toggleFullscreen(editor, fullscreenState);\n });\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n const setup = (editor, fullscreenState) => {\n editor.on('init', () => {\n editor.on('keydown', e => {\n if (e.keyCode === global.TAB && !(e.metaKey || e.ctrlKey) && fullscreenState.get()) {\n e.preventDefault();\n }\n });\n });\n };\n\n const makeSetupHandler = (editor, fullscreenState) => api => {\n api.setActive(fullscreenState.get() !== null);\n const editorEventCallback = e => api.setActive(e.state);\n editor.on('FullscreenStateChanged', editorEventCallback);\n return () => editor.off('FullscreenStateChanged', editorEventCallback);\n };\n const register = (editor, fullscreenState) => {\n const onAction = () => editor.execCommand('mceFullScreen');\n editor.ui.registry.addToggleMenuItem('fullscreen', {\n text: 'Fullscreen',\n icon: 'fullscreen',\n shortcut: 'Meta+Shift+F',\n onAction,\n onSetup: makeSetupHandler(editor, fullscreenState),\n context: 'any'\n });\n editor.ui.registry.addToggleButton('fullscreen', {\n tooltip: 'Fullscreen',\n icon: 'fullscreen',\n onAction,\n onSetup: makeSetupHandler(editor, fullscreenState),\n shortcut: 'Meta+Shift+F',\n context: 'any'\n });\n };\n\n var Plugin = () => {\n global$3.add('fullscreen', editor => {\n const fullscreenState = Cell(null);\n if (editor.inline) {\n return get$5(fullscreenState);\n }\n register$2(editor);\n register$1(editor, fullscreenState);\n register(editor, fullscreenState);\n setup(editor, fullscreenState);\n editor.addShortcut('Meta+Shift+F', '', 'mceFullScreen');\n return get$5(fullscreenState);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"fullscreen\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/fullscreen')\n// ES2015:\n// import 'tinymce/plugins/fullscreen'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.0 (TBD)\n */\n\n(function () {\n 'use strict';\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType = type => value => typeOf(value) === type;\n const isString = isType('string');\n const isObject = isType('object');\n const isArray = isType('array');\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativePush = Array.prototype.push;\n const each$1 = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n const keys = Object.keys;\n const hasOwnProperty = Object.hasOwnProperty;\n const each = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const get$1 = (obj, key) => {\n return has(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n const has = (obj, key) => hasOwnProperty.call(obj, key);\n\n const option = name => editor => editor.options.get(name);\n const register$2 = editor => {\n const registerOption = editor.options.register;\n registerOption('audio_template_callback', { processor: 'function' });\n registerOption('video_template_callback', { processor: 'function' });\n registerOption('iframe_template_callback', { processor: 'function' });\n registerOption('media_live_embeds', {\n processor: 'boolean',\n default: true\n });\n registerOption('media_filter_html', {\n processor: 'boolean',\n default: true\n });\n registerOption('media_url_resolver', { processor: 'function' });\n registerOption('media_alt_source', {\n processor: 'boolean',\n default: true\n });\n registerOption('media_poster', {\n processor: 'boolean',\n default: true\n });\n registerOption('media_dimensions', {\n processor: 'boolean',\n default: true\n });\n };\n const getAudioTemplateCallback = option('audio_template_callback');\n const getVideoTemplateCallback = option('video_template_callback');\n const getIframeTemplateCallback = option('iframe_template_callback');\n const hasLiveEmbeds = option('media_live_embeds');\n const shouldFilterHtml = option('media_filter_html');\n const getUrlResolver = option('media_url_resolver');\n const hasAltSource = option('media_alt_source');\n const hasPoster = option('media_poster');\n const hasDimensions = option('media_dimensions');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.html.DomParser');\n\n const DOM$1 = global$4.DOM;\n const trimPx = value => value.replace(/px$/, '');\n const getEphoxEmbedData = node => {\n const style = node.attr('style');\n const styles = style ? DOM$1.parseStyle(style) : {};\n return {\n type: 'ephox-embed-iri',\n source: node.attr('data-ephox-embed-iri'),\n altsource: '',\n poster: '',\n width: get$1(styles, 'max-width').map(trimPx).getOr(''),\n height: get$1(styles, 'max-height').map(trimPx).getOr('')\n };\n };\n const htmlToData = (html, schema) => {\n let data = {};\n const parser = global$3({\n validate: false,\n forced_root_block: false\n }, schema);\n const rootNode = parser.parse(html);\n for (let node = rootNode; node; node = node.walk()) {\n if (node.type === 1) {\n const name = node.name;\n if (node.attr('data-ephox-embed-iri')) {\n data = getEphoxEmbedData(node);\n break;\n } else {\n if (!data.source && name === 'param') {\n data.source = node.attr('movie');\n }\n if (name === 'iframe' || name === 'object' || name === 'embed' || name === 'video' || name === 'audio') {\n if (!data.type) {\n data.type = name;\n }\n data = global$5.extend(node.attributes.map, data);\n }\n if (name === 'source') {\n if (!data.source) {\n data.source = node.attr('src');\n } else if (!data.altsource) {\n data.altsource = node.attr('src');\n }\n }\n if (name === 'img' && !data.poster) {\n data.poster = node.attr('src');\n }\n }\n }\n }\n data.source = data.source || data.src || '';\n data.altsource = data.altsource || '';\n data.poster = data.poster || '';\n return data;\n };\n\n const guess = url => {\n var _a;\n const mimes = {\n mp3: 'audio/mpeg',\n m4a: 'audio/x-m4a',\n wav: 'audio/wav',\n mp4: 'video/mp4',\n webm: 'video/webm',\n ogg: 'video/ogg',\n swf: 'application/x-shockwave-flash'\n };\n const fileEnd = (_a = url.toLowerCase().split('.').pop()) !== null && _a !== void 0 ? _a : '';\n return get$1(mimes, fileEnd).getOr('');\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.html.Node');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.html.Serializer');\n\n const Parser = (schema, settings = {}) => global$3({\n forced_root_block: false,\n validate: false,\n allow_conditional_comments: true,\n ...settings\n }, schema);\n\n const DOM = global$4.DOM;\n const addPx = value => /^[0-9.]+$/.test(value) ? value + 'px' : value;\n const updateEphoxEmbed = (data, node) => {\n const style = node.attr('style');\n const styleMap = style ? DOM.parseStyle(style) : {};\n if (isNonNullable(data.width)) {\n styleMap['max-width'] = addPx(data.width);\n }\n if (isNonNullable(data.height)) {\n styleMap['max-height'] = addPx(data.height);\n }\n node.attr('style', DOM.serializeStyle(styleMap));\n };\n const sources = [\n 'source',\n 'altsource'\n ];\n const updateHtml = (html, data, updateAll, schema) => {\n let numSources = 0;\n let sourceCount = 0;\n const parser = Parser(schema);\n parser.addNodeFilter('source', nodes => numSources = nodes.length);\n const rootNode = parser.parse(html);\n for (let node = rootNode; node; node = node.walk()) {\n if (node.type === 1) {\n const name = node.name;\n if (node.attr('data-ephox-embed-iri')) {\n updateEphoxEmbed(data, node);\n break;\n } else {\n switch (name) {\n case 'video':\n case 'object':\n case 'embed':\n case 'img':\n case 'iframe':\n if (data.height !== undefined && data.width !== undefined) {\n node.attr('width', data.width);\n node.attr('height', data.height);\n }\n break;\n }\n if (updateAll) {\n switch (name) {\n case 'video':\n node.attr('poster', data.poster);\n node.attr('src', null);\n for (let index = numSources; index < 2; index++) {\n if (data[sources[index]]) {\n const source = new global$2('source', 1);\n source.attr('src', data[sources[index]]);\n source.attr('type', data[sources[index] + 'mime'] || null);\n node.append(source);\n }\n }\n break;\n case 'iframe':\n node.attr('src', data.source);\n break;\n case 'object':\n const hasImage = node.getAll('img').length > 0;\n if (data.poster && !hasImage) {\n node.attr('src', data.poster);\n const img = new global$2('img', 1);\n img.attr('src', data.poster);\n img.attr('width', data.width);\n img.attr('height', data.height);\n node.append(img);\n }\n break;\n case 'source':\n if (sourceCount < 2) {\n node.attr('src', data[sources[sourceCount]]);\n node.attr('type', data[sources[sourceCount] + 'mime'] || null);\n if (!data[sources[sourceCount]]) {\n node.remove();\n continue;\n }\n }\n sourceCount++;\n break;\n case 'img':\n if (!data.poster) {\n node.remove();\n }\n break;\n }\n }\n }\n }\n }\n return global$1({}, schema).serialize(rootNode);\n };\n\n const urlPatterns = [\n {\n regex: /youtu\\.be\\/([\\w\\-_\\?&=.]+)/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: 'www.youtube.com/embed/$1',\n allowFullscreen: true\n },\n {\n regex: /youtube\\.com(.+)v=([^&]+)(&([a-z0-9&=\\-_]+))?/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: 'www.youtube.com/embed/$2?$4',\n allowFullscreen: true\n },\n {\n regex: /youtube.com\\/embed\\/([a-z0-9\\?&=\\-_]+)/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: 'www.youtube.com/embed/$1',\n allowFullscreen: true\n },\n {\n regex: /vimeo\\.com\\/([0-9]+)\\?h=(\\w+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: 'player.vimeo.com/video/$1?h=$2&title=0&byline=0&portrait=0&color=8dc7dc',\n allowFullscreen: true\n },\n {\n regex: /vimeo\\.com\\/(.*)\\/([0-9]+)\\?h=(\\w+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: 'player.vimeo.com/video/$2?h=$3&title=0&byline=0',\n allowFullscreen: true\n },\n {\n regex: /vimeo\\.com\\/([0-9]+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: 'player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc',\n allowFullscreen: true\n },\n {\n regex: /vimeo\\.com\\/(.*)\\/([0-9]+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: 'player.vimeo.com/video/$2?title=0&byline=0',\n allowFullscreen: true\n },\n {\n regex: /maps\\.google\\.([a-z]{2,3})\\/maps\\/(.+)msid=(.+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: 'maps.google.com/maps/ms?msid=$2&output=embed\"',\n allowFullscreen: false\n },\n {\n regex: /dailymotion\\.com\\/video\\/([^_]+)/,\n type: 'iframe',\n w: 480,\n h: 270,\n url: 'www.dailymotion.com/embed/video/$1',\n allowFullscreen: true\n },\n {\n regex: /dai\\.ly\\/([^_]+)/,\n type: 'iframe',\n w: 480,\n h: 270,\n url: 'www.dailymotion.com/embed/video/$1',\n allowFullscreen: true\n }\n ];\n const getProtocol = url => {\n const protocolMatches = url.match(/^(https?:\\/\\/|www\\.)(.+)$/i);\n if (protocolMatches && protocolMatches.length > 1) {\n return protocolMatches[1] === 'www.' ? 'https://' : protocolMatches[1];\n } else {\n return 'https://';\n }\n };\n const getUrl = (pattern, url) => {\n const protocol = getProtocol(url);\n const match = pattern.regex.exec(url);\n let newUrl = protocol + pattern.url;\n if (isNonNullable(match)) {\n for (let i = 0; i < match.length; i++) {\n newUrl = newUrl.replace('$' + i, () => match[i] ? match[i] : '');\n }\n }\n return newUrl.replace(/\\?$/, '');\n };\n const matchPattern = url => {\n const patterns = urlPatterns.filter(pattern => pattern.regex.test(url));\n if (patterns.length > 0) {\n return global$5.extend({}, patterns[0], { url: getUrl(patterns[0], url) });\n } else {\n return null;\n }\n };\n\n const getIframeHtml = (data, iframeTemplateCallback) => {\n if (iframeTemplateCallback) {\n return iframeTemplateCallback(data);\n } else {\n const allowFullscreen = data.allowfullscreen ? ' allowFullscreen=\"1\"' : '';\n return '';\n }\n };\n const getFlashHtml = data => {\n let html = '';\n if (data.poster) {\n html += '';\n }\n html += '';\n return html;\n };\n const getAudioHtml = (data, audioTemplateCallback) => {\n if (audioTemplateCallback) {\n return audioTemplateCallback(data);\n } else {\n return '';\n }\n };\n const getVideoHtml = (data, videoTemplateCallback) => {\n if (videoTemplateCallback) {\n return videoTemplateCallback(data);\n } else {\n return '';\n }\n };\n const dataToHtml = (editor, dataIn) => {\n var _a;\n const data = global$5.extend({}, dataIn);\n if (!data.source) {\n global$5.extend(data, htmlToData((_a = data.embed) !== null && _a !== void 0 ? _a : '', editor.schema));\n if (!data.source) {\n return '';\n }\n }\n if (!data.altsource) {\n data.altsource = '';\n }\n if (!data.poster) {\n data.poster = '';\n }\n data.source = editor.convertURL(data.source, 'source');\n data.altsource = editor.convertURL(data.altsource, 'source');\n data.sourcemime = guess(data.source);\n data.altsourcemime = guess(data.altsource);\n data.poster = editor.convertURL(data.poster, 'poster');\n const pattern = matchPattern(data.source);\n if (pattern) {\n data.source = pattern.url;\n data.type = pattern.type;\n data.allowfullscreen = pattern.allowFullscreen;\n data.width = data.width || String(pattern.w);\n data.height = data.height || String(pattern.h);\n }\n if (data.embed) {\n return updateHtml(data.embed, data, true, editor.schema);\n } else {\n const audioTemplateCallback = getAudioTemplateCallback(editor);\n const videoTemplateCallback = getVideoTemplateCallback(editor);\n const iframeTemplateCallback = getIframeTemplateCallback(editor);\n data.width = data.width || '300';\n data.height = data.height || '150';\n global$5.each(data, (value, key) => {\n data[key] = editor.dom.encode('' + value);\n });\n if (data.type === 'iframe') {\n return getIframeHtml(data, iframeTemplateCallback);\n } else if (data.sourcemime === 'application/x-shockwave-flash') {\n return getFlashHtml(data);\n } else if (data.sourcemime.indexOf('audio') !== -1) {\n return getAudioHtml(data, audioTemplateCallback);\n } else {\n return getVideoHtml(data, videoTemplateCallback);\n }\n }\n };\n\n const isMediaElement = element => element.hasAttribute('data-mce-object') || element.hasAttribute('data-ephox-embed-iri');\n const setup$2 = editor => {\n editor.on('mousedown', e => {\n const previewObj = editor.dom.getParent(e.target, '.mce-preview-object');\n if (previewObj && editor.dom.getAttrib(previewObj, 'data-mce-selected') === '2') {\n e.stopImmediatePropagation();\n }\n });\n editor.on('click keyup touchend', () => {\n const selectedNode = editor.selection.getNode();\n if (selectedNode && editor.dom.hasClass(selectedNode, 'mce-preview-object')) {\n if (editor.dom.getAttrib(selectedNode, 'data-mce-selected')) {\n selectedNode.setAttribute('data-mce-selected', '2');\n }\n }\n });\n editor.on('ObjectResized', e => {\n const target = e.target;\n if (target.getAttribute('data-mce-object')) {\n let html = target.getAttribute('data-mce-html');\n if (html) {\n html = unescape(html);\n target.setAttribute('data-mce-html', escape(updateHtml(html, {\n width: String(e.width),\n height: String(e.height)\n }, false, editor.schema)));\n }\n }\n });\n };\n\n const cache = {};\n const embedPromise = (data, dataToHtml, handler) => {\n return new Promise((res, rej) => {\n const wrappedResolve = response => {\n if (response.html) {\n cache[data.source] = response;\n }\n return res({\n url: data.source,\n html: response.html ? response.html : dataToHtml(data)\n });\n };\n if (cache[data.source]) {\n wrappedResolve(cache[data.source]);\n } else {\n handler({ url: data.source }).then(wrappedResolve).catch(rej);\n }\n });\n };\n const defaultPromise = (data, dataToHtml) => Promise.resolve({\n html: dataToHtml(data),\n url: data.source\n });\n const loadedData = editor => data => dataToHtml(editor, data);\n const getEmbedHtml = (editor, data) => {\n const embedHandler = getUrlResolver(editor);\n return embedHandler ? embedPromise(data, loadedData(editor), embedHandler) : defaultPromise(data, loadedData(editor));\n };\n const isCached = url => has(cache, url);\n\n const extractMeta = (sourceInput, data) => get$1(data, sourceInput).bind(mainData => get$1(mainData, 'meta'));\n const getValue = (data, metaData, sourceInput) => prop => {\n const getFromData = () => get$1(data, prop);\n const getFromMetaData = () => get$1(metaData, prop);\n const getNonEmptyValue = c => get$1(c, 'value').bind(v => v.length > 0 ? Optional.some(v) : Optional.none());\n const getFromValueFirst = () => getFromData().bind(child => isObject(child) ? getNonEmptyValue(child).orThunk(getFromMetaData) : getFromMetaData().orThunk(() => Optional.from(child)));\n const getFromMetaFirst = () => getFromMetaData().orThunk(() => getFromData().bind(child => isObject(child) ? getNonEmptyValue(child) : Optional.from(child)));\n return { [prop]: (prop === sourceInput ? getFromValueFirst() : getFromMetaFirst()).getOr('') };\n };\n const getDimensions = (data, metaData) => {\n const dimensions = {};\n get$1(data, 'dimensions').each(dims => {\n each$1([\n 'width',\n 'height'\n ], prop => {\n get$1(metaData, prop).orThunk(() => get$1(dims, prop)).each(value => dimensions[prop] = value);\n });\n });\n return dimensions;\n };\n const unwrap = (data, sourceInput) => {\n const metaData = sourceInput && sourceInput !== 'dimensions' ? extractMeta(sourceInput, data).getOr({}) : {};\n const get = getValue(data, metaData, sourceInput);\n return {\n ...get('source'),\n ...get('altsource'),\n ...get('poster'),\n ...get('embed'),\n ...getDimensions(data, metaData)\n };\n };\n const wrap = data => {\n const wrapped = {\n ...data,\n source: { value: get$1(data, 'source').getOr('') },\n altsource: { value: get$1(data, 'altsource').getOr('') },\n poster: { value: get$1(data, 'poster').getOr('') }\n };\n each$1([\n 'width',\n 'height'\n ], prop => {\n get$1(data, prop).each(value => {\n const dimensions = wrapped.dimensions || {};\n dimensions[prop] = value;\n wrapped.dimensions = dimensions;\n });\n });\n return wrapped;\n };\n const handleError = editor => error => {\n const errorMessage = error && error.msg ? 'Media embed handler error: ' + error.msg : 'Media embed handler threw unknown error.';\n editor.notificationManager.open({\n type: 'error',\n text: errorMessage\n });\n };\n const getEditorData = editor => {\n const element = editor.selection.getNode();\n const snippet = isMediaElement(element) ? editor.serializer.serialize(element, { selection: true }) : '';\n const data = htmlToData(snippet, editor.schema);\n const getDimensionsOfElement = () => {\n if (isEmbedIframe(data.source, data.type)) {\n const rect = editor.dom.getRect(element);\n return {\n width: rect.w.toString().replace(/px$/, ''),\n height: rect.h.toString().replace(/px$/, '')\n };\n } else {\n return {};\n }\n };\n const dimensions = getDimensionsOfElement();\n return {\n embed: snippet,\n ...data,\n ...dimensions\n };\n };\n const addEmbedHtml = (api, editor) => response => {\n if (isString(response.url) && response.url.trim().length > 0) {\n const html = response.html;\n const snippetData = htmlToData(html, editor.schema);\n const nuData = {\n ...snippetData,\n source: response.url,\n embed: html\n };\n api.setData(wrap(nuData));\n }\n };\n const selectPlaceholder = (editor, beforeObjects) => {\n const afterObjects = editor.dom.select('*[data-mce-object]');\n for (let i = 0; i < beforeObjects.length; i++) {\n for (let y = afterObjects.length - 1; y >= 0; y--) {\n if (beforeObjects[i] === afterObjects[y]) {\n afterObjects.splice(y, 1);\n }\n }\n }\n editor.selection.select(afterObjects[0]);\n };\n const handleInsert = (editor, html) => {\n const beforeObjects = editor.dom.select('*[data-mce-object]');\n editor.insertContent(html);\n selectPlaceholder(editor, beforeObjects);\n editor.nodeChanged();\n };\n const isEmbedIframe = (url, mediaDataType) => isNonNullable(mediaDataType) && mediaDataType === 'ephox-embed-iri' && isNonNullable(matchPattern(url));\n const shouldInsertAsNewIframe = (prevData, newData) => {\n const hasDimensionsChanged = (prevData, newData) => prevData.width !== newData.width || prevData.height !== newData.height;\n return hasDimensionsChanged(prevData, newData) && isEmbedIframe(newData.source, prevData.type);\n };\n const submitForm = (prevData, newData, editor) => {\n var _a;\n newData.embed = shouldInsertAsNewIframe(prevData, newData) && hasDimensions(editor) ? dataToHtml(editor, {\n ...newData,\n embed: ''\n }) : updateHtml((_a = newData.embed) !== null && _a !== void 0 ? _a : '', newData, false, editor.schema);\n if (newData.embed && (prevData.source === newData.source || isCached(newData.source))) {\n handleInsert(editor, newData.embed);\n } else {\n getEmbedHtml(editor, newData).then(response => {\n handleInsert(editor, response.html);\n }).catch(handleError(editor));\n }\n };\n const showDialog = editor => {\n const editorData = getEditorData(editor);\n const currentData = Cell(editorData);\n const initialData = wrap(editorData);\n const handleSource = (prevData, api) => {\n const serviceData = unwrap(api.getData(), 'source');\n if (prevData.source !== serviceData.source) {\n addEmbedHtml(win, editor)({\n url: serviceData.source,\n html: ''\n });\n getEmbedHtml(editor, serviceData).then(addEmbedHtml(win, editor)).catch(handleError(editor));\n }\n };\n const handleEmbed = api => {\n var _a;\n const data = unwrap(api.getData());\n const dataFromEmbed = htmlToData((_a = data.embed) !== null && _a !== void 0 ? _a : '', editor.schema);\n api.setData(wrap(dataFromEmbed));\n };\n const handleUpdate = (api, sourceInput, prevData) => {\n const dialogData = unwrap(api.getData(), sourceInput);\n const data = shouldInsertAsNewIframe(prevData, dialogData) && hasDimensions(editor) ? {\n ...dialogData,\n embed: ''\n } : dialogData;\n const embed = dataToHtml(editor, data);\n api.setData(wrap({\n ...data,\n embed\n }));\n };\n const mediaInput = [{\n name: 'source',\n type: 'urlinput',\n filetype: 'media',\n label: 'Source',\n picker_text: 'Browse files'\n }];\n const sizeInput = !hasDimensions(editor) ? [] : [{\n type: 'sizeinput',\n name: 'dimensions',\n label: 'Constrain proportions',\n constrain: true\n }];\n const generalTab = {\n title: 'General',\n name: 'general',\n items: flatten([\n mediaInput,\n sizeInput\n ])\n };\n const embedTextarea = {\n type: 'textarea',\n name: 'embed',\n label: 'Paste your embed code below:'\n };\n const embedTab = {\n title: 'Embed',\n items: [embedTextarea]\n };\n const advancedFormItems = [];\n if (hasAltSource(editor)) {\n advancedFormItems.push({\n name: 'altsource',\n type: 'urlinput',\n filetype: 'media',\n label: 'Alternative source URL'\n });\n }\n if (hasPoster(editor)) {\n advancedFormItems.push({\n name: 'poster',\n type: 'urlinput',\n filetype: 'image',\n label: 'Media poster (Image URL)'\n });\n }\n const advancedTab = {\n title: 'Advanced',\n name: 'advanced',\n items: advancedFormItems\n };\n const tabs = [\n generalTab,\n embedTab\n ];\n if (advancedFormItems.length > 0) {\n tabs.push(advancedTab);\n }\n const body = {\n type: 'tabpanel',\n tabs\n };\n const win = editor.windowManager.open({\n title: 'Insert/Edit Media',\n size: 'normal',\n body,\n buttons: [\n {\n type: 'cancel',\n name: 'cancel',\n text: 'Cancel'\n },\n {\n type: 'submit',\n name: 'save',\n text: 'Save',\n primary: true\n }\n ],\n onSubmit: api => {\n const serviceData = unwrap(api.getData());\n submitForm(currentData.get(), serviceData, editor);\n api.close();\n },\n onChange: (api, detail) => {\n switch (detail.name) {\n case 'source':\n handleSource(currentData.get(), api);\n break;\n case 'embed':\n handleEmbed(api);\n break;\n case 'dimensions':\n case 'altsource':\n case 'poster':\n handleUpdate(api, detail.name, currentData.get());\n break;\n }\n currentData.set(unwrap(api.getData()));\n },\n initialData\n });\n };\n\n const get = editor => {\n const showDialog$1 = () => {\n showDialog(editor);\n };\n return { showDialog: showDialog$1 };\n };\n\n const register$1 = editor => {\n const showDialog$1 = () => {\n showDialog(editor);\n };\n editor.addCommand('mceMedia', showDialog$1);\n };\n\n const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n const startsWith = (str, prefix) => {\n return checkRange(str, prefix, 0);\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.Env');\n\n const isLiveEmbedNode = node => {\n const name = node.name;\n return name === 'iframe' || name === 'video' || name === 'audio';\n };\n const getDimension = (node, styles, dimension, defaultValue = null) => {\n const value = node.attr(dimension);\n if (isNonNullable(value)) {\n return value;\n } else if (!has(styles, dimension)) {\n return defaultValue;\n } else {\n return null;\n }\n };\n const setDimensions = (node, previewNode, styles) => {\n const useDefaults = previewNode.name === 'img' || node.name === 'video';\n const defaultWidth = useDefaults ? '300' : null;\n const fallbackHeight = node.name === 'audio' ? '30' : '150';\n const defaultHeight = useDefaults ? fallbackHeight : null;\n previewNode.attr({\n width: getDimension(node, styles, 'width', defaultWidth),\n height: getDimension(node, styles, 'height', defaultHeight)\n });\n };\n const appendNodeContent = (editor, nodeName, previewNode, html) => {\n const newNode = Parser(editor.schema).parse(html, { context: nodeName });\n while (newNode.firstChild) {\n previewNode.append(newNode.firstChild);\n }\n };\n const createPlaceholderNode = (editor, node) => {\n const name = node.name;\n const placeHolder = new global$2('img', 1);\n retainAttributesAndInnerHtml(editor, node, placeHolder);\n setDimensions(node, placeHolder, {});\n placeHolder.attr({\n 'style': node.attr('style'),\n 'src': global.transparentSrc,\n 'data-mce-object': name,\n 'class': 'mce-object mce-object-' + name\n });\n return placeHolder;\n };\n const createPreviewNode = (editor, node) => {\n var _a;\n const name = node.name;\n const previewWrapper = new global$2('span', 1);\n previewWrapper.attr({\n 'contentEditable': 'false',\n 'style': node.attr('style'),\n 'data-mce-object': name,\n 'class': 'mce-preview-object mce-object-' + name\n });\n retainAttributesAndInnerHtml(editor, node, previewWrapper);\n const styles = editor.dom.parseStyle((_a = node.attr('style')) !== null && _a !== void 0 ? _a : '');\n const previewNode = new global$2(name, 1);\n setDimensions(node, previewNode, styles);\n previewNode.attr({\n src: node.attr('src'),\n style: node.attr('style'),\n class: node.attr('class')\n });\n if (name === 'iframe') {\n previewNode.attr({\n allowfullscreen: node.attr('allowfullscreen'),\n frameborder: '0',\n sandbox: node.attr('sandbox'),\n referrerpolicy: node.attr('referrerpolicy')\n });\n } else {\n const attrs = [\n 'controls',\n 'crossorigin',\n 'currentTime',\n 'loop',\n 'muted',\n 'poster',\n 'preload'\n ];\n each$1(attrs, attrName => {\n previewNode.attr(attrName, node.attr(attrName));\n });\n const sanitizedHtml = previewWrapper.attr('data-mce-html');\n if (isNonNullable(sanitizedHtml)) {\n appendNodeContent(editor, name, previewNode, unescape(sanitizedHtml));\n }\n }\n const shimNode = new global$2('span', 1);\n shimNode.attr('class', 'mce-shim');\n previewWrapper.append(previewNode);\n previewWrapper.append(shimNode);\n return previewWrapper;\n };\n const retainAttributesAndInnerHtml = (editor, sourceNode, targetNode) => {\n var _a;\n const attribs = (_a = sourceNode.attributes) !== null && _a !== void 0 ? _a : [];\n let ai = attribs.length;\n while (ai--) {\n const attrName = attribs[ai].name;\n let attrValue = attribs[ai].value;\n if (attrName !== 'width' && attrName !== 'height' && attrName !== 'style' && !startsWith(attrName, 'data-mce-')) {\n if (attrName === 'data' || attrName === 'src') {\n attrValue = editor.convertURL(attrValue, attrName);\n }\n targetNode.attr('data-mce-p-' + attrName, attrValue);\n }\n }\n const serializer = global$1({ inner: true }, editor.schema);\n const tempNode = new global$2('div', 1);\n each$1(sourceNode.children(), child => tempNode.append(child));\n const innerHtml = serializer.serialize(tempNode);\n if (innerHtml) {\n targetNode.attr('data-mce-html', escape(innerHtml));\n targetNode.empty();\n }\n };\n const isPageEmbedWrapper = node => {\n const nodeClass = node.attr('class');\n return isString(nodeClass) && /\\btiny-pageembed\\b/.test(nodeClass);\n };\n const isWithinEmbedWrapper = node => {\n let tempNode = node;\n while (tempNode = tempNode.parent) {\n if (tempNode.attr('data-ephox-embed-iri') || isPageEmbedWrapper(tempNode)) {\n return true;\n }\n }\n return false;\n };\n const placeHolderConverter = editor => nodes => {\n let i = nodes.length;\n let node;\n while (i--) {\n node = nodes[i];\n if (!node.parent) {\n continue;\n }\n if (node.parent.attr('data-mce-object')) {\n continue;\n }\n if (isLiveEmbedNode(node) && hasLiveEmbeds(editor)) {\n if (!isWithinEmbedWrapper(node)) {\n node.replace(createPreviewNode(editor, node));\n }\n } else {\n if (!isWithinEmbedWrapper(node)) {\n node.replace(createPlaceholderNode(editor, node));\n }\n }\n }\n };\n\n const parseAndSanitize = (editor, context, html) => {\n const getEditorOption = editor.options.get;\n const sanitize = getEditorOption('xss_sanitization');\n const validate = shouldFilterHtml(editor);\n return Parser(editor.schema, {\n sanitize,\n validate\n }).parse(html, { context });\n };\n\n const setup$1 = editor => {\n editor.on('PreInit', () => {\n const {schema, serializer, parser} = editor;\n const boolAttrs = schema.getBoolAttrs();\n each$1('webkitallowfullscreen mozallowfullscreen'.split(' '), name => {\n boolAttrs[name] = {};\n });\n each({ embed: ['wmode'] }, (attrs, name) => {\n const rule = schema.getElementRule(name);\n if (rule) {\n each$1(attrs, attr => {\n rule.attributes[attr] = {};\n rule.attributesOrder.push(attr);\n });\n }\n });\n parser.addNodeFilter('iframe,video,audio,object,embed', placeHolderConverter(editor));\n serializer.addAttributeFilter('data-mce-object', (nodes, name) => {\n var _a;\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n if (!node.parent) {\n continue;\n }\n const realElmName = node.attr(name);\n const realElm = new global$2(realElmName, 1);\n if (realElmName !== 'audio') {\n const className = node.attr('class');\n if (className && className.indexOf('mce-preview-object') !== -1 && node.firstChild) {\n realElm.attr({\n width: node.firstChild.attr('width'),\n height: node.firstChild.attr('height')\n });\n } else {\n realElm.attr({\n width: node.attr('width'),\n height: node.attr('height')\n });\n }\n }\n realElm.attr({ style: node.attr('style') });\n const attribs = (_a = node.attributes) !== null && _a !== void 0 ? _a : [];\n let ai = attribs.length;\n while (ai--) {\n const attrName = attribs[ai].name;\n if (attrName.indexOf('data-mce-p-') === 0) {\n realElm.attr(attrName.substr(11), attribs[ai].value);\n }\n }\n const innerHtml = node.attr('data-mce-html');\n if (innerHtml) {\n const fragment = parseAndSanitize(editor, realElmName, unescape(innerHtml));\n each$1(fragment.children(), child => realElm.append(child));\n }\n node.replace(realElm);\n }\n });\n });\n editor.on('SetContent', () => {\n const dom = editor.dom;\n each$1(dom.select('span.mce-preview-object'), elm => {\n if (dom.select('span.mce-shim', elm).length === 0) {\n dom.add(elm, 'span', { class: 'mce-shim' });\n }\n });\n });\n };\n\n const setup = editor => {\n editor.on('ResolveName', e => {\n let name;\n if (e.target.nodeType === 1 && (name = e.target.getAttribute('data-mce-object'))) {\n e.name = name;\n }\n });\n };\n\n const onSetupEditable = editor => api => {\n const nodeChanged = () => {\n api.setEnabled(editor.selection.isEditable());\n };\n editor.on('NodeChange', nodeChanged);\n nodeChanged();\n return () => {\n editor.off('NodeChange', nodeChanged);\n };\n };\n const register = editor => {\n const onAction = () => editor.execCommand('mceMedia');\n editor.ui.registry.addToggleButton('media', {\n tooltip: 'Insert/edit media',\n icon: 'embed',\n onAction,\n onSetup: buttonApi => {\n const selection = editor.selection;\n buttonApi.setActive(isMediaElement(selection.getNode()));\n const unbindSelectorChanged = selection.selectorChangedWithUnbind('img[data-mce-object],span[data-mce-object],div[data-ephox-embed-iri]', buttonApi.setActive).unbind;\n const unbindEditable = onSetupEditable(editor)(buttonApi);\n return () => {\n unbindSelectorChanged();\n unbindEditable();\n };\n }\n });\n editor.ui.registry.addMenuItem('media', {\n icon: 'embed',\n text: 'Media...',\n onAction,\n onSetup: onSetupEditable(editor)\n });\n };\n\n var Plugin = () => {\n global$6.add('media', editor => {\n register$2(editor);\n register$1(editor);\n register(editor);\n setup(editor);\n setup$1(editor);\n setup$2(editor);\n return get(editor);\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"media\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/media')\n// ES2015:\n// import 'tinymce/plugins/media'\nrequire('./plugin.js');","/**\n * TinyMCE version 7.7.0 (TBD)\n */\n\n(function () {\n 'use strict';\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global = tinymce.util.Tools.resolve('tinymce.Env');\n\n const fireResizeEditor = editor => editor.dispatch('ResizeEditor');\n\n const option = name => editor => editor.options.get(name);\n const register$1 = editor => {\n const registerOption = editor.options.register;\n registerOption('autoresize_overflow_padding', {\n processor: 'number',\n default: 1\n });\n registerOption('autoresize_bottom_margin', {\n processor: 'number',\n default: 50\n });\n };\n const getMinHeight = option('min_height');\n const getMaxHeight = option('max_height');\n const getAutoResizeOverflowPadding = option('autoresize_overflow_padding');\n const getAutoResizeBottomMargin = option('autoresize_bottom_margin');\n\n const isFullscreen = editor => editor.plugins.fullscreen && editor.plugins.fullscreen.isFullscreen();\n const toggleScrolling = (editor, state) => {\n const body = editor.getBody();\n if (body) {\n body.style.overflowY = state ? '' : 'hidden';\n if (!state) {\n body.scrollTop = 0;\n }\n }\n };\n const parseCssValueToInt = (dom, elm, name, computed) => {\n var _a;\n const value = parseInt((_a = dom.getStyle(elm, name, computed)) !== null && _a !== void 0 ? _a : '', 10);\n return isNaN(value) ? 0 : value;\n };\n const shouldScrollIntoView = trigger => {\n if ((trigger === null || trigger === void 0 ? void 0 : trigger.type.toLowerCase()) === 'setcontent') {\n const setContentEvent = trigger;\n return setContentEvent.selection === true || setContentEvent.paste === true;\n } else {\n return false;\n }\n };\n const resize = (editor, oldSize, trigger, getExtraMarginBottom) => {\n var _a;\n const dom = editor.dom;\n const doc = editor.getDoc();\n if (!doc) {\n return;\n }\n if (isFullscreen(editor)) {\n toggleScrolling(editor, true);\n return;\n }\n const docEle = doc.documentElement;\n const resizeBottomMargin = getExtraMarginBottom ? getExtraMarginBottom() : getAutoResizeOverflowPadding(editor);\n const minHeight = (_a = getMinHeight(editor)) !== null && _a !== void 0 ? _a : editor.getElement().offsetHeight;\n let resizeHeight = minHeight;\n const marginTop = parseCssValueToInt(dom, docEle, 'margin-top', true);\n const marginBottom = parseCssValueToInt(dom, docEle, 'margin-bottom', true);\n let contentHeight = docEle.offsetHeight + marginTop + marginBottom + resizeBottomMargin;\n if (contentHeight < 0) {\n contentHeight = 0;\n }\n const containerHeight = editor.getContainer().offsetHeight;\n const contentAreaHeight = editor.getContentAreaContainer().offsetHeight;\n const chromeHeight = containerHeight - contentAreaHeight;\n if (contentHeight + chromeHeight > minHeight) {\n resizeHeight = contentHeight + chromeHeight;\n }\n const maxHeight = getMaxHeight(editor);\n if (maxHeight && resizeHeight > maxHeight) {\n resizeHeight = maxHeight;\n toggleScrolling(editor, true);\n } else {\n toggleScrolling(editor, false);\n }\n const old = oldSize.get();\n if (old.set) {\n editor.dom.setStyles(editor.getDoc().documentElement, { 'min-height': 0 });\n editor.dom.setStyles(editor.getBody(), { 'min-height': 'inherit' });\n }\n if (resizeHeight !== old.totalHeight && (contentHeight - resizeBottomMargin !== old.contentHeight || !old.set)) {\n const deltaSize = resizeHeight - old.totalHeight;\n dom.setStyle(editor.getContainer(), 'height', resizeHeight + 'px');\n oldSize.set({\n totalHeight: resizeHeight,\n contentHeight,\n set: true\n });\n fireResizeEditor(editor);\n if (global.browser.isSafari() && (global.os.isMacOS() || global.os.isiOS())) {\n const win = editor.getWin();\n win.scrollTo(win.pageXOffset, win.pageYOffset);\n }\n if (editor.hasFocus() && shouldScrollIntoView(trigger)) {\n editor.selection.scrollIntoView();\n }\n if ((global.browser.isSafari() || global.browser.isChromium()) && deltaSize < 0) {\n resize(editor, oldSize, trigger, getExtraMarginBottom);\n }\n }\n };\n const setup = (editor, oldSize) => {\n const getExtraMarginBottom = () => getAutoResizeBottomMargin(editor);\n editor.on('init', e => {\n const overflowPadding = getAutoResizeOverflowPadding(editor);\n const dom = editor.dom;\n dom.setStyles(editor.getDoc().documentElement, { height: 'auto' });\n if (global.browser.isEdge() || global.browser.isIE()) {\n dom.setStyles(editor.getBody(), {\n 'paddingLeft': overflowPadding,\n 'paddingRight': overflowPadding,\n 'min-height': 0\n });\n } else {\n dom.setStyles(editor.getBody(), {\n paddingLeft: overflowPadding,\n paddingRight: overflowPadding\n });\n }\n resize(editor, oldSize, e, getExtraMarginBottom);\n });\n editor.on('NodeChange SetContent keyup FullscreenStateChanged ResizeContent', e => {\n resize(editor, oldSize, e, getExtraMarginBottom);\n });\n };\n\n const register = (editor, oldSize) => {\n editor.addCommand('mceAutoResize', () => {\n resize(editor, oldSize);\n });\n };\n\n var Plugin = () => {\n global$1.add('autoresize', editor => {\n register$1(editor);\n if (!editor.options.isSet('resize')) {\n editor.options.set('resize', false);\n }\n if (!editor.inline) {\n const oldSize = Cell({\n totalHeight: 0,\n contentHeight: 0,\n set: false\n });\n register(editor, oldSize);\n setup(editor, oldSize);\n }\n });\n };\n\n Plugin();\n\n})();\n","// Exports the \"autoresize\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/autoresize')\n// ES2015:\n// import 'tinymce/plugins/autoresize'\nrequire('./plugin.js');","import tinymce from 'tinymce';\n\nimport 'tinymce/icons/default';\n\nimport 'tinymce/themes/silver';\nimport 'tinymce/models/dom';\n\nimport 'tinymce/skins/ui/oxide/skin.css';\n\nimport 'tinymce/plugins/advlist';\nimport 'tinymce/plugins/autolink';\nimport 'tinymce/plugins/lists';\nimport 'tinymce/plugins/link';\nimport 'tinymce/plugins/charmap';\nimport 'tinymce/plugins/preview';\nimport 'tinymce/plugins/anchor';\nimport 'tinymce/plugins/searchreplace';\nimport 'tinymce/plugins/visualblocks';\nimport 'tinymce/plugins/code';\nimport 'tinymce/plugins/fullscreen';\nimport 'tinymce/plugins/media';\nimport 'tinymce/plugins/autoresize';\n\nimport contentUiSkinCss from 'tinymce/skins/ui/oxide/content.css?inline';\nimport contentCss from 'tinymce/skins/content/default/content.css?inline';\n\nimport { tinyMceHTMLCleaner } from \"@/entrypoints/tiny-mce-html-cleaner\";\nimport resized from \"@/javascript/components/events/resized\";\n\nconst getConfig = (options = {}) => {\n const tinymceOptions = JSON.parse(options.tinymceOptions || '{}')\n\n const customContentCss = document.querySelector('meta[name=\"tinymce_custom_css\"]').content\n const config = {\n license_key: 'gpl',\n menubar: false,\n plugins: \"advlist autolink lists link charmap preview anchor searchreplace code media autoresize\",\n paste_block_drop: false,\n max_height: 600,\n min_height: 50,\n toolbar: \"undo redo | blocks | bold italic | bullist numlist outdent indent | link\",\n toolbar_mode: \"sliding\",\n content_css: false,\n skin: false,\n content_style: contentUiSkinCss.toString() + '\\n' + contentCss.toString(),\n readonly: tinymceOptions.disabled || false,\n target: options.target,\n content_css: customContentCss\n }\n\n return config\n}\n\n/* Initialize TinyMCE */\nexport function render (content) {\n const tinymceElements = [...content.querySelectorAll('[data-tinymce]')]\n const promises = tinymceElements\n .filter((elem) => !elem.tinyMceInitated )\n .map((elem) => {\n elem.tinyMceInitated = true\n elem.tinyMceHTMLCleaner = new tinyMceHTMLCleaner()\n try {\n tinymce.remove(`#${elem.id}`)\n } catch (error) {}\n const config = getConfig({target: elem, tinymceOptions: elem.dataset.tinymceOptions})\n config.paste_preprocess = (editor, args) => {\n args.content = elem.tinyMceHTMLCleaner.clean(args.content)\n return args.content\n }\n tinymce.init(config)\n .then((elems) => elems)\n .then((editors) => {\n editors.forEach((editor) => {\n editor.getWin().addEventListener('resize', () => {\n resized(editor.iframeElement)\n })\n })\n })\n })\n\n return Promise.all(\n promises\n )\n}\n"],"names":["typeOf$1","x","t","isEquatableType","sort$1","xs","compareFn","clone","contramap","eqa","f","eq$2","y","tripleEq","eqString","eqArray","len","i","eqSortedArray","eqRecord","kx","ky","q","eqAny","tx","ty","getPrototypeOf$2","hasProto","v","constructor","predicate","_a","typeOf","proto","isType$1","type","value","isSimpleType","eq$1","a","is$4","isObject","isString","isPlainObject","isArray$1","isNull","isBoolean","isUndefined","isNullable","isNonNullable","isFunction","isNumber","isArrayOf","pred","noop","compose","fa","fb","args","compose1","fbc","fab","constant","identity","tripleEquals","b","curry","fn","initialArgs","restArgs","all","not","die","msg","apply$1","call","never","always","Optional","tag","onNone","onSome","mapper","binder","replacement","thunk","message","worker","nativeSlice","nativeIndexOf","nativePush","rawIndexOf","ts","indexOf$1","r","contains$2","exists","map$3","each$e","eachr","partition$2","pass","fail","filter$5","foldr","acc","foldl","findUntil$1","until","find$2","findIndex$2","flatten","bind$3","forall","reverse","difference","a1","a2","mapToObject","sort","comparator","copy","get$b","head","last$2","from","findMap","arr","unique$1","isDuplicated","keys","hasOwnProperty$1","each$d","obj","props","k","map$2","tupleMap","tuple","objAcc","internalFilter","onTrue","onFalse","bifilter","filter$4","mapToArray","name","values","get$a","key","has$2","hasNonNullableKey","equal$1","eq","stringArray","isArrayLike","o","isArray","toArray$1","array","l","each$c","cb","s","n","map$1","callback","out","item","index","filter$3","indexOf","reduce","collection","iteratee","accumulator","thisArg","findIndex$1","last$1","cached","called","DeviceType","os","browser","userAgent","mediaMatch","isiPad","isiPhone","isMobile","isTouch","isTablet","isPhone","iOSwebview","isDesktop","firstMatch","regexes","find$1","agent","group","nu$3","detect$4","versionRegexes","cleanedAgent","unknown$2","major","minor","Version","detectBrowser$1","browsers","userAgentData","uaBrand","lcBrand","info","detect$3","candidates","candidate","detectBrowser","version","detectOs","oses","removeFromStart","str","numChars","checkRange","substr","start","removeLeading","prefix","startsWith","contains$1","end","idx","endsWith","suffix","blank","trim$4","lTrim","rTrim","isNotEmpty","isEmpty$3","repeat","count","toInt","radix","num","normalVersionRegex","checkContains","target","uastring","PlatformInfo","edge","chromium","ie","opera","firefox","safari","unknown$1","nu$2","current","isBrowser","Browser","windows","ios","android","linux","macos","solaris","freebsd","chromeos","unknown","nu$1","isOS","OperatingSystem","PlatformDetection","userAgentDataOpt","deviceType","query","platform$4","detect$1","platform$3","browser$3","os$1","windowsPhone","Env","whiteSpaceRegExp$1","trim$3","is$3","makeMap$4","items","delim","map","resolvedItems","hasOwnProperty","extend$3","exts","ext","walk$4","Tools","path","d","url","cacheSuffix","is$2","lhs","rhs","left","equals","lift2","cat","push","oa","ob","lift3","oc","someIf","Global","parts","scope","resolve$2","p","unsafe","getOrDie","actual","getPrototypeOf$1","sandHTMLElement","isPrototypeOf","COMMENT","DOCUMENT","DOCUMENT_FRAGMENT","ELEMENT","TEXT","element","type$1","isType","isComment$1","isHTMLElement$1","isElement$7","isText$c","isDocument$2","isDocumentFragment$1","isTag","e","rawSet","dom","set$4","setAll$1","attrs","get$9","getOpt","has$1","remove$9","hasNone","clone$4","attr","read$4","add$4","id","nu","remove$8","supports","get$8","add$3","clazz","remove$7","toggle$2","add$2","cleanClass","remove$6","toggle$1","result","has","fromHtml$1","html","div","fromDom$2","fromTag","node","fromText","text","SugarElement","docElm","toArray","recurse","cur","is$1","selector","elem","bypassSelector","base","one","e1","e2","contains","d1","d2","owner$1","documentOrOwner","dos","documentElement","defaultView","parent","parentElement","parents$1","isRoot","stop","ret","rawParent","siblings","filterSelf","elements","children$1","prevSibling","nextSibling","prevSiblings","nextSiblings","child$1","cs","firstChild","lastChild","childNodesCount","getHead","doc","isShadowRoot","getRootNode","getStyleContainer","getContentContainer","getShadowRoot","getShadowHost","getOriginalEventTarget","event","el","isOpenShadowHost","composedPath","inBody","ClosestOrAncestor","is","ancestor","ancestor$4","closest$4","test","sibling$1","child","descendant$2","descend","res","ancestor$3","descendant$1","closest$3","closest$2","isEditable$2","assumeEditable","editable","getRaw$1","set$3","isSupported","internalSet","property","internalRemove","set$2","setAll","css","get$7","getUnsafeProperty","getRaw","raw","getAllRaw","ruleName","remove$5","reflow","before$3","marker","after$4","append$1","prepend","wrap$2","wrapper","after$3","append","empty","rogue","remove$4","unwrap","children","fromHtml","fromDom$1","nodes","get$6","set$1","content","docDom","fragment","contentElements","getOuter","container","mkEvent","prevent","kill","fromRawEvent","rawEvent","handle$1","filter","handler","useCapture","wrapped","unbind","bind$2","top","SugarPosition","boxPosition","box","firstDefinedOrZero","absolute","body","win","scrollTop","scrollLeft","clientTop","clientLeft","viewport","get$5","_DOC","to","intoView","alignToTop","get$4","_win","bounds","width","height","getBounds","scroll","visualViewport","descendants$1","descendants","ancestor$2","sibling","descendant","DomTreeWalker","startNode","rootNode","shallow","startName","siblingName","zeroWidth","nbsp","isZwsp$2","char","removeZwsp","whiteSpaceRegExp","isWhitespaceText","isZwsp$1","c","isCollapsibleWhitespace$1","isNewLineChar","isNewline","normalize$4","tabSpaces","isStartOfContent","isEndOfContent","tabSpace","normalizedText","isNodeType","isRestrictedNode","isElement$6","isHTMLElement","isSVGElement","matchNodeName","lowerCasedName","matchNodeNames","names","lowerCasedNames","nodeName","matchStyleValues","computed","hasAttribute","attrName","isBogus$1","isBogusAll","isTable$2","hasContentEditableState","isTextareaOrInput","isText$b","isCData","isPi","isComment","isDocument$1","isDocumentFragment","isBr$6","isImg","isContentEditableTrue$3","isContentEditableFalse$b","isEditingHost","isTableCell$3","isTableCellOrCaption","isMedia$2","isListItem$2","isDetails","isSummary$1","defaultOptionValues","hasWhitespacePreserveParent","schema","rootElement","whitespaceElements","isNamedAnchor","isNonEmptyElement$1","isBookmark","hasNonEditableParent","isWhitespace$1","isText$a","options","isContentNode","isEmptyNode","targetNode","opts","brCount","walker","bogusValue","isEmpty$2","elm","isContent$1","Cell","initial","singleton","doRevoke","subject","revoke","repeatable","delay","intervalId","functionToRepeat","value$2","nodeNameToNamespaceType","lowerCaseName","isNonHtmlElementRootName","isNonHtmlElementRoot","toScopeType","namespaceElements","createNamespaceTracker","currentScope","scopeNode","transparentBlockAttr","elementNames","makeSelectorFromSchemaMap","escapedName","ns","updateTransparent","blocksSelector","transparent","updateBlockStateOnChildren","transparentSelector","trimEdge","leftSide","childPropertyName","split$2","parentElm","splitElm","range","parentNode","beforeFragment","afterFragment","splitInvalidChildren","transparentBlocks","blocksElements","isBlock","transparentBlock","parentBlock","invalidChildren","stateScope","unwrapInvalidChildren","isTransparentBlock","block","isTransparentInline","updateChildren","updateElement","isTransparentElement","updateCaret","root","caretParent","parents","hasBlockAttr","isTransparentElementName","isTransparentAstBlock","browser$2","firstElement","getTableCaptionDeltaY","caption","bodyTop","captionTop","captionHeight","hasChild","getPos","rootElm","pos","offsetParent","castOffsetParent","StyleSheetLoader","documentOrShadowRoot","settings","idCount","loadedStates","edos","_setReferrerPolicy","referrerPolicy","_setContentCssCors","contentCssCors","addStyle","removeStyle","styleContainer","getOrCreateState","load","success","failure","link","urlWithSuffix","state","resolve","callbacks","status","passed","failed","linkElem","loadRawCss","styleElem","loadAll","urls","results","unload","instance","referenceElement","rootDom","sl","isSpan","isInlineContent","surroundedByInlineContent","prev","next","prevIsInline","nextIsInline","isBookmarkNode$2","isKeepTextNode","isKeepElement","isDocument","trimNode","currentChildren","makeMap$3","attrsCharsRegExp","textCharsRegExp","rawCharsRegExp","entityRegExp","asciiMap","baseEntities","reverseEntities","nativeDecode","buildEntitiesLookup","lookup","itemList","chr","entity","namedEntities","encodeRaw","encodeAllRaw","encodeNumeric","encodeNamed","entities","resolveEntities","Entities","entitiesMap","encodeNamedAndNumeric","encodeCustomNamed","nameMap","numeric","split$1","patternToRegExp","isRegExp$1","deepCloneElementRule","helper","parseCustomElementsRules","customElementRegExp","rule","matches","cloneName","getGlobalAttributeSet","getElementSetsAsStrings","blockContent","phrasingContent","flowContent","getElementSets","toArr","cachedSets","getElementsPreset","makeSchema","globalAttributes","addElement","attributes","add","childNames","ni","allAttributes","addAttrs","schemaItem","prefixToOperation","parseValidChild","validChildRegExp","parseValidChildrenRules","childRuleRegExp","operation","validChildren","validChild","parseValidElementsAttrDataIntoElement","attrData","targetElement","attrRuleRegExp","hasPatternsRegExp","attributesOrder","attrType","attrPrefix","attrPattern","cloneAttributesInto","parseValidElementsRules","globalElement","validElements","elementRuleRegExp","elementName","outputName","attrsPrefix","mapCache","makeMap$2","each$b","extend$2","explode$2","createMap","defaultValue","extendWith","getTextRootBlockElements","compileElementMap","mode","styles","Schema","patternElements","customElementsMap","specialElements","createLookupTable","option","newValue","schemaType","schemaItems","validStyles","invalidStyles","validClasses","whitespaceElementsMap","selfClosingElementsMap","voidElementsMap","boolAttrMap","nonEmptyOrMoveCaretBeforeOnEnter","nonEmptyElementsMap","moveCaretBeforeOnEnterElementsMap","headings","textBlockElementsMap","blockElementsMap","textInlineElementsMap","transparentElementsMap","wrapBlockElementsMap","addValidElements","aliasName","patternElement","setValidElements","addCustomElement","spec","_b","inline","customRule","processAttrName","globalAttrs","preset","customElementChildren","processNodeName","processPreset","elmName","addCustomElementsFromString","customElements","addCustomElements","addValidChildren","getElementRule","setup","_val","getValidStyles","getInvalidStyles","getValidClasses","getBoolAttrs","getBlockElements","getTextBlockElements","getTextInlineElements","getVoidElements","getSelfClosingElements","getNonEmptyElements","getMoveCaretBeforeOnEnterElements","getWhitespaceElements","getTransparentElements","getWrapBlockElements","getSpecialElements","isValidChild","isValid","attrPatterns","isInline","isWrapper","getCustomElements","hexColour","normalizeHex","hex","toHex","component","fromRgba","rgbaColour","rgbRegex","rgbaRegex","red","green","blue","alpha","fromStringValues","g","getColorFormat","colorString","fromString","rgbaString","rgbMatch","rgbaMatch","toString","rgba","rgbaToHexString","color","h","Styles","urlOrStrRegExp","styleRegExp","trimRightRegExp","encodingLookup","invisibleChar","encodingItems","self","isEncoded","urlConverter","urlConverterScope","compress","noJoin","right","bottom","canCompress","compress2","encode","decode","keepSlashes","decodeSingleHexSequence","escSeq","decodeHexSequences","processUrl","match","url2","url3","str2","scriptUrl","serializeStyles","elemName","validStyleList","styleList","styleMap","deprecated","isNativeEvent","hasIsDefaultPrevented","needsNormalizing","clone$3","originalEvent","data","keyArg","normalize$3","fallbackTarget","eventExpandoPrefix","mouseEventRe","addEvent","capture","removeEvent","isMouseEvent","fix","eventDoc","mouseEvent","bindOnReady","eventUtils","isDocReady","readyHandler","EventUtils","callbackList","defaultNativeHandler","evt","namesList","nativeHandler","fakeName","eventMap","ci","newCallbackList","each$a","grep","internalStyleName","numericalCssMap","legacySetAttribute","camelCaseToHyphens","findNodeIndex","normalized","lastNodeType","tempNode","nodeType","updateInternalStyleAttr","rawValue","convertStyleToString","cssValue","cssName","applyStyle$1","$elm","normalizedName","setupAttrHooks","getContext","keepValues","keepUrlHook","sugarElm","internalName","attrHooks","DOMUtils","addedStyles","files","counter","stdMode","boxModel","styleSheetLoader","boundEvents","events","get","_get","getAttrib","defaultVal","hook","getAttribs","setAttrib","run","val","originalValue","deep","getRoot","getViewPort","argWin","vp","getPos$1","setStyle","setStyles","stylesArg","getStyle","getSize","w","getRect","size","elms","getParents","collect","resolvedRoot","selectorVal","getParent","_findSib","func","getNext","getPrev","isParentNode","select","context","setAttribs","setHTML","create","newElm","createHTML","outHtml","createFragment","frag","remove","keepChildren","$node","removeAllAttribs","parseStyle","cssText","serializeStyle","styleElm","loadCSS","toggleClass","cls","classes","addClass","removeClass","hasClass","show","hide","isHidden","uniqueId","getOuterHTML","setOuterHTML","insertAfter","reference","referenceNode","replace","oldElm","replacee","rename","attrNode","findCommonAncestor","ps","pe","isEmpty","createRng","split","replacementElm","bind","rv","boundTarget","boundName","boundFunc","dispatch","fire","getContentEditable","contentEditable","_","DOM$b","QUEUED","LOADING","LOADED","FAILED","ScriptLoader","reject","cleanup","done","error","queue","scripts","execCallbacks","processResults","failures","reason","processQueue","nextQueuedItem","uniqueScripts","firstIndex","isRaw","isTokenised","currentCode","getLanguageData","I18n","newCode","code","langData","lcNames","translation","lcName","getLangData","textStr","removeContext","substitued","$1","$2","dir","AddOnManager","_listeners","runListeners","matchedListeners","listener","isLoaded","isAdded","loadLanguagePack","languages","language","wrappedLanguages","requireLangPack","waitFor","addOn","createUrl","baseUrl","dep","addOnUrl","urlString","first$1","rate","timer","last","cancel","ancestor$1","annotation","dataAnnotation","dataAnnotationId","dataAnnotationActive","dataAnnotationClasses","dataAnnotationAttributes","isRoot$1","identify","editor","annotationName","rng","an","newStart","uid","findMarkers","isAnnotation","isBogusElement","findAll","markers","directory","m","nodesAlready","setup$y","registry","changeCallbacks","initData","withCallbacks","updateCallbacks","callbackMap","outputData","fireCallbacks","fireNoAnnotation","toggleActiveAttr","onNodeChange","annotations","setup$x","dataAnnotation$1","identifyParserNode","removeDirectAnnotation","customAttrNames","customClasses","classList","newClassList","create$b","clamp$2","min","max","random","unique","generate$1","time","random$1","remove$3","clone$2","original","isDeep","shallow$1","deep$1","shallowAs","mutate","TextWalker","isBoundary","walk","direction","TextSeeker","isBlockBoundary","offset","process","newOffset","api$1","getOption","get$3","set","tableCells","tableSections","textBlocks","listItems$1","lists","wsElements","lazyLookup","isTable$1","isBr$5","isTextBlock$2","isList","isListItem$1","isTableSection","isTableCell$2","isWsPreserveElement","getLastChildren$1","rawNode","removeTrailingBr","allBrs","brs","createPaddingBr","br","fillWithPaddingBr","trimBlockTrailingBr","lastChildPrevSibling","ZWSP$1","isZwsp","trim$2","insert$5","isElement$5","isText$9","isCaretContainerBlock$1","isCaretContainerInline","isCaretContainer$2","hasContent","insertInline$1","before","textNode","endsWithCaretContainer$1","startsWithCaretContainer$1","isBeforeInline","isAfterInline","insertBlock","blockName","blockNode","trimBogusBr","lastBr","showCaretContainerBlock","caretContainer","isRangeInCaretContainerBlock","round$2","clone$1","rect","collapse","toStart","isEqual","rect1","rect2","isValidOverflow","overflowY","isAbove$1","halfHeight","isBelow$1","containsXY","clientX","clientY","boundingClientRectFromRects","rects","prevRect","distanceToRectEdgeFromXY","cx","cy","overlapY","r1","r2","getSelectedNode","startContainer","startOffset","getNode$1","childNodes","safeOffset","getNodeUnsafe","extendingChars","isExtendingChar","ch","or","and","isContentEditableTrue$2","isContentEditableFalse$a","isBr$4","isText$8","isInvalidTextElement","isAtomicInline","isTable","isCaretContainer$1","isCaretCandidate$3","isNonUiContentEditableFalse","isUnselectable","isInEditable","isAtomicContentEditableFalse","isAtomic$1","isEditableCaretCandidate$1","isElement$4","isCaretCandidate$2","isBlock$2","isFloated","isValidElementCaretCandidate","isNotPre","isText$7","isBr$3","nodeIndex$1","resolveIndex$1","createRange$1","isWhiteSpace$1","isRange","isHiddenWhiteSpaceRange","getBrClientRect","brNode","nbsp$1","clientRect","getBoundingClientRectWebKitText","sc","ec","so","eo","newRng","getBoundingClientRect$1","isZeroRect","clientRects","collapseAndInflateWidth","newClientRect","getCaretPositionClientRects","caretPosition","addUniqueAndValidRect","addCharacterOffset","beforeNode","CaretPosition","isAtStart","isAtEnd","toRange","getClientRects","isVisible","getNode","pos1","pos2","trimEmptyTextNode$1","insertNode","insertFragment","rangeInsertNode","isText$6","isBogus","nodeIndex","normalizedParent","getChildNodes","normalizedTextOffset","equal","normalizedNodeIndex","numTextFragments","createPathItem","parentsUntil$1","create$a","outputOffset","resolvePathItem","findTextPosition","targetOffset","dataLen","resolve$1","paths","nodeOffset","isContentEditableFalse$9","getNormalizedTextOffset$1","trim","trimmedOffset","getPoint","point","after","getLocation","selection","forward","fakeCaret","findIndex","moveEndPoint$1","normalizeTableCellSelection","findSibling","findAdjacentContentEditableFalseElm","getOffsetBookmark","getCaretBookmark","getRangeBookmark","createBookmarkSpan","filled","getPersistentBookmark","collapsed","rng2","endBookmarkNode","startBookmarkNode","getBookmark$3","getUndoBookmark","value$1","applyHelper","constHelper","outputHelper","output","_onError","onValue","Result","onError","_onValue","optional","err","Adt","cases","constructors","adt","acase","keys$1","argLength","foldArgs","branches","branchKeys","reqKey","label","partition$1","errors","isInlinePattern","pattern","isBlockPattern","hasBlockTrigger","trigger","normalizePattern","formatOrCmd","onFormat","onCommand","formats","format","cmd","command","commandValue","getBlockPatterns","patterns","getInlinePatterns","createPatternSet","dynamicPatternsLookup","filterByTrigger","fromRawPatterns","fromRawPatternsLookup","lookupFn","ctx","rawPatterns","firePreProcess","firePostProcess","fireRemove","fireDetach","fireSwitchMode","fireObjectResizeStart","origin","fireObjectResized","firePreInit","firePostRender","fireInit","firePlaceholderToggle","fireError","errorType","fireFormatApply","vars","fireFormatRemove","fireBeforeSetContent","fireSetContent","fireBeforeGetContent","fireGetContent","fireAutocompleterStart","fireAutocompleterUpdate","fireAutocompleterUpdateActiveRange","fireAutocompleterEnd","firePastePreProcess","internal","firePastePostProcess","firePastePlainTextToggle","fireEditableRootStateChange","fireDisabledStateChange","deviceDetection$1","DOM$a","getHash","isRegExp","stringOrObjectProcessor","bodyOptionProcessor","valid","bodyObj","register$7","registerOption","isInline$1","isDisabled$1","_ctx","getIframeAttrs","getDocType","getDocumentBaseUrl","getBodyId","getBodyClass","getContentSecurityPolicy","shouldPutBrInPre$1","getForcedRootBlock","getForcedRootBlockAttrs","getNewlineBehavior","getBrNewLineSelector","getNoNewLineSelector","shouldKeepStyles","shouldEndContainerOnEmptyBlock","isAutomaticUploadsEnabled","shouldReuseFileName","shouldReplaceBlobUris","getIconPackName","getIconsUrl","getImageUploadUrl","getImageUploadBasePath","getImagesUploadCredentials","getImagesUploadHandler","shouldUseContentCssCors","getReferrerPolicy","getLanguageCode","getLanguageUrl","shouldIndentUseMargin","getIndentation","getContentCss","getContentStyle","getFontCss","getDirectionality","getInlineBoundarySelector","getObjectResizing","getResizeImgProportional","getPlaceholder","getEventRoot","getServiceMessage","getTheme","getThemeUrl","getModel","getModelUrl","isInlineBoundariesEnabled","getFormats","getPreviewStyles","canFormatEmptyLines","getFormatNoneditableSelector","getCustomUiSelector","hasHiddenInput","shouldPatchSubmit","shouldAddFormSubmitTrigger","shouldAddUnloadTrigger","getCustomUndoRedoLevels","shouldDisableNodeChange","isReadOnly$1","hasEditableRoot$1","hasContentCssCors","getPlugins","getExternalPlugins$1","shouldBlockUnsupportedDrop","isVisualAidsEnabled","getVisualAidsTableClass","getVisualAidsAnchorClass","getIframeAriaText","getSetupCallback","getInitInstanceCallback","getUrlConverterCallback","getAutoFocus","shouldBrowserSpellcheck","getProtect","shouldPasteBlockDrop","shouldPasteDataImages","getPastePreProcess","getPastePostProcess","getNewDocumentContent","getPasteWebkitStyles","shouldPasteRemoveWebKitStyles","shouldPasteMergeFormats","isSmartPasteEnabled","isPasteAsTextEnabled","getPasteTabSpaces","shouldAllowHtmlDataUrls","getTextPatterns","getTextPatternsLookup","getNonEditableClass","getEditableClass","getNonEditableRegExps","shouldPreserveCData","shouldHighlightOnFocus","shouldSanitizeXss","shouldUseDocumentWrite","hasTextPatternsLookup","getFontStyleValues","getFontSizeClasses","isEncodingXml","getAllowedImageFileTypes","hasTableTabNavigation","getDetailsInitialState","getDetailsSerializedState","shouldSandboxIframes","getSandboxIframesExclusions","shouldConvertUnsafeEmbeds","getLicenseKey","getApiKey","isElement$3","isText$5","removeNode$1","trimCount","trimmedText","deleteZwspChars","removeUnchanged","remove$2","removeTextAndReposition","removeElementAndReposition","newPosition","removeTextCaretContainer","removeElementCaretContainer","removeAndReposition","caretContainerNode","isContentEditableFalse$8","isMedia$1","isTableCell$1","inlineFakeCaretSelector","getAbsoluteClientRect","scrollX","scrollY","rootRect","margin","trimInlineCaretContainers","fakeCaretTargetNodes","FakeCaret","hasFocus","lastVisualCaret","cursorInterval","caretBlock","caret","startBlink","isInlineFakeCaretTarget","caretState","isFakeCaretTableBrowser","isFakeCaretTarget","isContentEditableTrue$1","isContentEditableFalse$7","isMedia","isBlockLike","isCaretContainer","isCaretContainerBlock","isElement$2","isText$4","isCaretCandidate$1","isForwards","isBackwards","skipCaretContainers","findNode","predicateFn","isCefOrCaretContainer","getEditingHost","isCETrue","getParentBlock$3","isInSameBlock","caretPosition1","caretPosition2","getChildNodeAtRelativeOffset","relativeOffset","beforeAfter","isNodesInSameBlock","node1","node2","lean","before$2","after$2","normalizeRange","leanLeft","leanRight","location","getRelativeCefElm","getNormalizedRangeEndPoint","normalizedRange","getElementFromPosition","getElementFromPrevPosition","getVisualCaretPosition","walkFn","isMoveInsideSameBlock","inSameBlock","isContentEditableFalse$6","isText$3","isElement$1","isBr$2","isCaretCandidate","isAtomic","isEditableCaretCandidate","getParents$3","nodeAtIndex","getCaretCandidatePosition","moveForwardFromBr","nextNode","findCaretPosition$1","startPos","innerNode","rootContentEditableFalseElm","CaretWalker","walkToPositionIn","position","fromPosition","afterElement","isBeforeOrStart","isAfterOrEnd","isBeforeAfterSameElement","isAtBr","shouldSkipPosition","navigate","navigateIgnore","ignoreFilter","positionIn","nextPosition","prevPosition","firstPositionIn","lastPositionIn","CARET_ID","isCaretNode","getParentCaretContainer","currentNode","isStringPathBookmark","bookmark","isRangeBookmark","isIdBookmark","isIndexBookmark","isPathBookmark","isForwardBookmark","addBogus","resolveCaretPositionBookmark","endPos","insertZwsp","isEmpty$1","tryFindRangePosition","padEmptyCaretContainer","setEndPoint","isValidTextNode","restoreEndPoint","markerParent","keep","otherMarker","resolvePaths","resolveId","spos","epos","resolveIndex","getBookmark$2","moveToBookmark","isBookmarkNode$1","isNbsp","expected","isWhiteSpace","isContent","getRanges$1","ranges","getSelectedNodes","hasMultipleRanges","getCellsFromRanges","getCellsFromElement","getCellsFromElementOrRanges","selectedCells","getCellsFromEditor","getClosestTable","cell","getStartNode","getEndNode","getFirstChildren","getLastChildren","hasAllContentsSelected","endNode","moveEndPoint","hasAnyRanges","sel","runOnRanges","executor","fakeSelectionNodes","fakeNodeRng","preserve","fillBookmark","isNode","isElementNode$1","isElementDirectlySelected","selectedAttr","preserveSelection","action","shouldMoveStart","selectedNodeBeforeAction","isSelectedBeforeNodeNoneditable","moveStartToNearestText","selectedNode","isWhiteSpaceNode$1","getNonWhiteSpaceSibling","inc","nextName","isTextBlock$1","ed","allowSpaces","isEmptyTextNode$1","isWrapNoneditableTarget","baseDataSelector","formatNoneditableSelector","isWrappableNoneditable","replaceVars","isEq$5","str1","normalizeStyleValue","strValue","style","getTextDecoration","decoration","getParents$2","isFormatPredicate","formatName","isVariableFormatName","isVariableValue","field","fieldValues","areSimilarFormats","otherFormatName","validKeys","filterObj","validKey","fmt1","filteredFmt1","fmt2","filteredFmt2","isBlockFormat","isWrappingBlockFormat","isNonWrappingBlockFormat","isSelectorFormat","isInlineFormat","isMixedFormat","shouldExpandToSelector","getEmptyCaretContainers","isCaretContainerEmpty","isEmptyCaretFormatElement","isBookmarkNode","getParents$1","isWhiteSpaceNode","isTextBlock","isBogusBr","findParentContentEditable","walkText","findSpace","findContent","findWordEndPoint","includeTrailingSpaces","lastTextNode","closestRoot","textSeeker","textOffset","findSelectorEndPoint","formatList","curFormat","findBlockEndPoint","scopeRoot","isAtBlockBoundary$1","findParentContainer","expandToBlock","isSelfOrParentBookmark","expandRng","expandOptions","includeTrailingSpace","editableHost","endContainer","endOffset","walk$3","exclude","firstNode","lastNode","collectSiblings","findEndPoint","walkBoundary","startPoint","endPoint","validBlocks","isZeroWidth","wrapName","applyWordGrab","applyAnnotation","masterUId","decorate","directAnnotation","otherData","attributeNames","makeAnnotation","eDoc","master","annotate","newWrappers","finishWrapper","getOrOpenWrapper","processElements","elems","processElement","processNodes","annotateWithBookmark","initialRng","hasFakeSelection","masterUid","selectionRng","Annotator","changes","removeAnnotations","BookmarkManager","isXYWithinRange","getDocument","focus$1","preventScroll","hasFocus$1","active$1","search","SimRange","soffset","finish","foffset","adt$3","cata","onBefore","onOn","onAfter","getStart$2","situ","before$1","on","after$1","Situ","adt$2","exactFromRange","simRange","getStart$1","startSitu","_finishSitu","_soffset","_finish","_foffset","domRange","relative","exact","getWin","SimSelection","clamp$1","normalizeRng","isOrContains","isRngInRoot","shouldStore","nativeRangeToSelectionRange","readRange","getBookmark$1","validate","bookmarkToNativeRng","store","newBookmark","getRng","restore","FocusManager","className","wrappedSetTimeout","wrappedSetInterval","Delay","isManualNodeChange","registerPageMouseUp","throttledStore","mouseUpPage","registerMouseUp","_e","registerEditorEvents","register$6","documentFocusInHandler","DOM$9","isEditorUIElement","isEditorContentAreaElement","isUIElement","customSelector","getActiveElement","registerEvents$1","editorManager","toggleContentAreaOnFocus","contentArea","focusedEditor","activeEditor","unregisterDocumentEvents","setup$w","getContentEditableHost","hasContentEditableFalseParent$1","getCollapsedNode","getFocusInElement","normalizeSelection","caretPos","focusBody","hasElementFocus","hasIframeFocus","hasInlineFocus","rawBody","hasUiFocus","hasEditorOrUiFocus","focusEditor","restoreBookmark","bookmarkRng","contentEditableHost","activateEditor","focus","skipFocus","VK","elementSelectionAttr","controlElmSelector","abs","round$1","resizeHandles","isTouchEvent","ControlSelection","editableDoc","rootDocument","selectedElm","selectedElmGhost","resizeHelper","selectedHandle","resizeBackdrop","startX","startY","startW","startH","ratio","resizeStarted","startScrollWidth","startScrollHeight","isImage","isEventOnImageOutsideRange","touch","contextMenuSelectImage","getResizeTargets","isResizable","createGhostElement","rowSelect","tableElm","tr","cells","setSizeProp","targets","setGhostElmSize","ghostElm","resizeGhostElement","deltaX","deltaY","proportional","resizeHelperX","resizeHelperY","endGhostResize","wasResizeStarted","showResizeRect","targetElm","unbindResizeHandleEvents","selectedElmX","selectedElmY","targetWidth","targetHeight","hideResizeRect","handle","startDrag","handleElm","throttledShowResizeRect","removeSelected","isChildOrEqual","updateResizeRect","controlElm","selectedValue","img","disableGeckoResize","startElm","setStart","setFinish","relativeToNative","finishSitu","exactToNative","adt$1","fromRange","getRanges","doDiagnose","rev","diagnose","caretPositionFromPoint","caretRangeFromPoint","availableSearch","fromPoint$1","beforeSpecial","name$1","preprocessRelative","preprocessExact","preprocess","fromElements","toNative","getDomRange","filtered","getAtPoint","fromPoint","isEq$4","rng1","findParent","hasParent$1","hasParentWithName","isCeFalseCaretContainer","hasBrBeforeAfter","isPrevNode","hasContentEditableFalseParent","findTextNodeRelative","isAfterNode","lastInlineElement","parentBlockContainer","normalizeEndPoint","directionLeft","normalize$2","normRng","splitText","newContainer","RangeUtils","rangeLike","newRange","normalizedRng","api","getOffset","aggregate","properties","cumulativeInclusions","get$2","walkUp","navigation","rest","pathTo","Navigation","find","frames","loc","excludeFromDescend","fireScrollIntoViewEvent","fireAfterScrollIntoViewEvent","markerInfo","cleanupFun","createMarker$1","span","elementMarker","withMarker","preserveWith","_s","applyWithMarker","withScrollEvents","withElement","startElement","endElement","scrollToMarker","viewHeight","intoWindowIfNeeded","viewportBottom","markerTop","markerBottom","largerThanViewport","intoWindow","intoFrame","frameViewHeight","op","viewportBounds","rangeIntoWindow","elementIntoWindow","rangeIntoFrame","elementIntoFrame","scrollElementIntoView","scrollRangeIntoView","isEditableRange","getEndpointElement","real","getStart","getEnd","skipEmptyTextNodes","forwards","orig","getSelectedBlocks","endElm","selectedBlocks","processRanges","typeLookup","walk$2","isEmptyTextNode","isNonEmptyElement","AstNode","selfAttrs","cloneAttrs","selfAttr","refNode","whitespace","unescapedTextParents","containsZwsp","getTemporaryNodeSelector","tempAttrs","getTemporaryNodes","createZwspCommentWalker","createUnescapedZwspTextWalker","hasZwspComment","hasUnescapedZwspText","hasTemporaryNode","trimTemporaryNodes","emptyAllNodeValuesInWalker","curr","emptyZwspComments","emptyUnescapedZwspTexts","trim$1","conditionalTrims","trimmed","cloned","condition","cleanupBogusElements","bogusElements","cleanupInputNames","inputs","input","trimEmptyContents","emptyRegExp","getPlainTextContent","offscreenDiv","getContentFromBody","getContentInternal","makeMap$1","Writer","indent","indentBefore","indentAfter","htmlOutput","HtmlSerializer","writer","handlers","sortedAttrs","elementRule","attrValue","nonInheritableStyles","conditionalNonInheritableStyles","shorthandStyleProps","getStyles$1","getStyleProps","isNonInheritableStyle","isConditionalNonInheritableStyle","hasNonInheritableStyles","hasConditionalNonInheritableStyles","getLonghandStyleProps","prop","hasStyleConflict","nodeStyleProps","parentNodeStyleProps","valueMismatch","nodeValue","parentValue","nodeStyleProp","propExists","longhandProps","isChar","delta","isBeforeSpace","isAfterSpace","isEmptyText","matchesElementPosition","isImageBlock","isCefNode","isBeforeImageBlock","isAfterImageBlock","isBeforeMedia","isAfterMedia","isBeforeTable","isAfterTable","isBeforeContentEditableFalse","isAfterContentEditableFalse","dropLast","parentsUntil","parentsAndSelf","navigateIgnoreEmptyTextNodes","isBlock$1","getClosestBlock$1","isAtBeforeAfterBlockBoundary","newPos","fromBlock","isAtBlockBoundary","isAtStartOfBlock","isAtEndOfBlock","isBeforeBlock","isAfterBlock","isBr$1","findBr","parentBlocks","isBeforeBr$1","isAfterBr","findPreviousBr","findNextBr","isInMiddleOfText","getClosestBlock","hasSpaceBefore","hasSpaceAfter","isPreValue","isInPre","isAtBeginningOfBody","isAtEndOfBody","isAtLineBoundary","isCefBlock","isSiblingCefBlock","isBeforeCefBlock","nextPos","isNextCefBlock","isAfterCefBlock","prevPos","isPrevCefBlock","needsToHaveNbsp","needsToBeNbspLeft","needsToBeNbspRight","needsToBeNbsp","isNbspAt","isWhiteSpaceAt","hasNbsp","normalizeNbspMiddle","chars","normalizeNbspAtStart","makeNbsp","firstPos","normalizeNbspInMiddleOfTextNode","newText","normalizeNbspAtEnd","lastPos","normalizeNbsps$1","normalizeNbspsInEditor","normalize$1","normalizeWhitespaceAfter","whitespaceCount","normalizeWhitespaceBefore","mergeTextNodes","prevNode","normalizeWhitespace","mergeToPrev","whitespaceOffset","newNode","removeNode","needsReposition","reposition","beforeOrStartOf","afterOrEndOf","getPreviousSiblingCaretPosition","getNextSiblingCaretPosition","findCaretPositionBackwardsFromElm","findCaretPositionForwardsFromElm","findCaretPositionBackwards","findCaretPositionForward","findCaretPosition","findCaretPosOutsideElmAfterDelete","setSelection$1","eqRawNode","paddEmptyBlock","preserveEmptyCaret","deleteNormalized","afterDeletePosOpt","prevTextOpt","nextTextOpt","isInlineElement","deleteElement$2","moveCaret","afterDeletePos","normalizedAfterDeletePos","paddPos","strongRtl","hasStrongRtl","isInlineTarget","isRtl","findInlineParents","findRootInline","hasSameParentBlock","block1","block2","isAtZwsp","normalizePosition","normalizeForwards","normalizeBackwards","execCommandIgnoreInputEvents","inputBlocker","execEditorDeleteCommand","execNativeDeleteCommand","execNativeForwardDeleteCommand","isBeforeRoot","isTextBlockOrListItem","getParentBlock$2","paddEmptyBody","moveSelection","willDeleteLastPositionInElement","fromPos","normalizedFirstPos","normalizedLastPos","normalizedFromPos","freefallRtl","deleteRangeContents","lastBlock","additionalCleanupNodes","isRootFromElement","getTableCells","table","getTable$1","selectionInTableWithNestedTable","details","startTable","endTable","isStartTableParentOfEndTable","isEndTableParentOfStartTable","adjustQuirksInDetails","getTableDetailsFromRange","isStartInTable","isEndInTable","isSameTable","tableCellRng","tableSelection","deleteAction","getClosestCell$1","isExpandedCellRng","cellRng","getTableFromCellRng","startParentTable","endParentTable","isSingleCellTable","rows","getCellRng","startCell","endCell","getCellRangeFromStartTable","getCellRangeFromEndTable","getTableSelectionFromCellRng","getTableSelections","selectionDetails","sameTableSelection","startTableSelection","endTableSelection","getCellIndex","getSelectedCells","startIndex","endIndex","isSingleCellTableContentSelected","optCellRng","unselectCells","otherContentRng","handleSingleTable","handleMultiTable","startTableSelectedCells","endTableSelectedCells","getActionFromRange","cleanCells","getOutsideBlock","handleEmptyBlock","startInTable","emptyBlock","deleteContentInsideCell","isFirstCellInSelection","insideTableRng","deleteCellContents","collapseAndRestoreCellSelection","emptySingleTableCells","outsideDetails","editorRng","cellsToClean","outsideBlock","endPointCell","emptyMultiTableCells","startTableCells","endTableCells","betweenRng","startTableCellsToClean","endTableCellsToClean","deleteTableElement","deleteCellRange","deleteCaptionRange","emptyElement","deleteTableRange","getParentCaption","deleteRange$3","getParentCell","deleteBetweenCells","fromCell","toCell","isDeleteOfLastCharPos","fromCaption","first","emptyCaretCaption","validateCaretCaption","toCaption","deleteCaretInsideCaption","deleteCaretCells","deleteCaretCaption","isNearTable","isBeforeOrAfterTable","deleteCaret$3","backspaceDelete$b","getContentEditableRoot$1","internalAttributesPrefixes","each$9","ElementUtils","internalAttributes","compare","attribs","isAttributeInternal","compareObjects","obj1","obj2","attributeName","isHeading","isSummary","traverse","matchNode$1","nodeFilters","attributeFilters","nl","ai","al","findMatchingNodes","childNode","runFilters","matchRecord","filteringAttributes","filter$2","paddEmptyNode","astNode","isPaddedWithNbsp","hasOnlyChild","isPadded","nonEmptyElements","isLineBreakNode","findClosestEditingHost","editableNode","removeOrUnwrapInvalidNode","originalNodeParent","cleanInvalidNodes","onCreate","textBlockElements","nonSplittableElements","fixed","isSplittableElement","newParent","isInvalid","hasClosest","parentName","createRange","normalizeBlockSelectionRange","newEndPos","normalize","hasOnlyOneChild$1","isPaddingNode","isPaddedEmptyBlock","isEmptyFragmentElement","isListFragment","cleanupDomFragment","domFragment","toDomFragment","serializer","listItems","isPadding","isListItemPadded","isEmptyOrPadded","trimListItems","getParentLi","isParentBlockLi","getSplit","beforeRng","afterRng","findFirstIn","newCaretPos","findLastOf","insertMiddle","li","insertBefore$2","insertAfter$2","insertAtCaret$1","liTarget","liElms","BEGINNING","END","isAt","caretWalker","newPosNode","mergeableWrappedElements","shouldPasteContentOnly","isPastingSingleElement","isWrappedElement","isContentEditable","isPastingInTheSameBlockTag","isPastingInContentEditable","isTableCell","isTableCellContentSelected","isEditableEmptyBlock","validInsertion","trimBrsFromTableCell","reduceInlineTextElements","merge","textInlineElements","elementUtils","fragmentSelector","fragments","hasOneChild","isOverridden","oldStyles","newStyles","overriddenByAllChildren","identicalToParent","conflictWithInsertedParent","markFragmentElements","unmarkFragmentElements","isPartOfFragment","canHaveChildren","moveSelectionToMarker","_c","nextRng","parentEditableElm","findNextCaretRng","isCell","deleteSelectedContent","findMarkerNode","markerNode","notHeadingsInSummary","insertHtmlAtCaret","parser","bookmarkHtml","caretElement","parserArgs","editingHost","toExtract","isTreeNode","setEditorHtml","noSelection","setContentString","padd","forcedRootBlockName","trimmedHtml","setContentTree","setContentInternal","ensureIsRoot","transform","transformed","closest$1","isEq$3","matchesUnInheritedFormatSelector","matchParents","similar","matchedNode","matchNode","matchName","matchItems","itemName","matchAttributes","expectedValue","isEmptyValue","match$2","matchAll","matchedFormatNames","checkedMap","closest","rawElm","canApply","matchAllOnNode","formatNames","matchSimilar","ZWSP","importNode","ownerDocument","findFirstTextNode","createCaretContainer","fill","trimZwspFromCaretContainer","removeCaretContainerNode","removeCaretContainer","insertCaretContainerNode","formatNode","appendNode","insertFormatNodesIntoCaretContainer","formatNodes","innerMostFormatNode","cleanFormatNode","formatter","validFormats","matchedFormats","fmtName","clonedFormatNode","normalizeNbsps","normalizeNbspsBetween","applyCaretFormat","wordcharRegex","removeCaretFormat","hasContentAfter","expandedRng","parentsAfter","newCaretContainer","cleanedFormatNode","caretTextNode","disableCaretContainer","keyCode","endsWithNbsp","setup$v","createCaretFormat","innerMost","replaceWithCaretFormat","createCaretFormatAtStart$1","isFormatElement","inlineElements","postProcessHooks","isPre","addPostProcessHook","postProcess$1","hasPreSibling","blocks","pre","joinPre","pre1","pre2","sPre2","preBlocks","listItemStyles","hasListStyles","fmt","findExpandedListItemFormat","getExpandedListItemFormat","isRngStartAtStartOfElement","isRngEndAtEndOfElement","isEditableListItem","getFullySelectedBlocks","middle","getFullySelectedListItems","getPartiallySelectedListItems","each$8","isElementNode","findElementSibling","mergeSiblingsNodes","isPrevEditable","isNextEditable","tmpSibling","mergeSiblings","clearChildStyles","_value","processChildElements","unwrapEmptySpan","hasStyle","applyStyle","removeResult","MCE_ATTR_RE","each$7","isEq$2","isTableCellOrRow","isChildOfInlineParent","getContainer","lastIdx","normalizeTableSelection","wrap$1","wrapWithSiblings","isColorFormatAndAnchor","rootBlockElm","forcedRootBlock","processFormatAttrOrStyle","removeEmptyStyleAttributeIfNeeded","removeStyles","compareNode","stylesModified","styleName","styleValue","normalizedStyleValue","removeListStyleFormats","liFmt","removeNodeFormatInternal","preserveAttributes","attrsToPreserve","currentValue","valueOut","findFormatRoot","formatRoot","removeNodeFormatFromClone","newName","wrapAndSplit","lastClone","firstClone","formatRootParent","removeFormatInternal","splitToFormatRoot","isRemoveBookmarkNode","removeFormatOnNode","removeNodeFormat","currentNodeMatches","removeRngStyle","removeFormat$1","each$6","mergeTextDecorationsAndColor","processTextDecorationsAndColor","parentTextDecoration","mergeBackgroundColorAndFontSize","hasFontSize","mergeSubSup","inverseTagDescendants","mergeWithChildren","mergeWithParents","each$5","canFormatBR","validBRParentElements","hasCaretNodeSibling","applyStyles","styleVal","applyFormatAction","isCollapsed","setElementFormat","applyNodeStyle","found","createWrapElement","wrapElm","applyRngStyle","nodeSpecific","isMatchingWrappingBlock","canRenameBlock","isEditableDescendant","isValidBlockFormatForNode","canWrapNode","isWrappableNoneditableElm","isValidWrapNode","isCaret","isCorrectFormatForNode","currentWrapElm","lastContentEditable","contentEditableValue","getChildCount","mergeStyles","childCount","fake","applyFormat$1","hasVars","setup$u","registeredFormatListeners","updateAndFireChangeCallbacks","nodeOrRange","fallbackElement","matchingNode","matchingFormat","registeredCallbacks","runIfChanged","isSet","addListeners","formatChangeItems","getCurrent","toAppendTo","removeListeners","formatChangedInternal","toggle","explode$1","create$8","filters","newCallbacks","removeAttrs","addFontToSpansFilter","domParser","fontSizes","face","addStrikeFilter","convertToSTag","addFilters","register$5","blobUriToBlob","extractBase64Data","decodeData","parseDataUri","uri","base64Encoded","decodedData","extractedData","buildBlob","dataUriToBlob","uriToBlob","blobToDataUri","blob","reader","count$1","uniqueId$1","processDataUri","dataUri","base64Only","generateBlobInfo","base64","createBlobInfo$1","blobCache","blobInfo","dataUriToBlobInfo","imageToBlobInfo","imageSrc","invalidDataUri","hostCaptureRegex","extractHost","ms","sandboxIframe","iframeNode","exclusions","host","isMimeType","mime","getEmbedType","createSafeEmbed","src","sandboxIframes","sandboxIframesExclusions","embed","isBogusImage","isInternalImageSource","registerBase64ImageFilter","processImage","inputSrc","register$4","appendRel","rel","addNoOpener","newRel","classValue","validClassesMap","entries","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","create$7","apply","construct","fun","thisValue","Func","arrayForEach","unapply","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","hasAllowedEncodings","hasValidEncoding","encoding","keepElement","mkSanitizeNamespaceElement","namespaceType","getSanitizer","_mimeType","makeMap","extend$1","transferChildren","nativeParent","nsSanitizer","isSpecial","nativeChild","walkTree","preprocessors","postprocessors","traverseOrder","postprocess","whitespaceCleaner","blockElements","textRootBlockElements","allWhiteSpaceRegExp","startWhiteSpaceRegExp","endWhiteSpaceRegExp","hasWhitespaceParent","isTextRootBlockEmpty","isAtEdgeOfBlock","neighbour","isNodeEmpty","getRootBlockName","DomParser","nodeFilterRegistry","attributeFilterRegistry","defaultedSettings","sanitizer","parseAndSanitizeWithContext","rootName","isSpecialRoot","makeWrap","addNodeFilter","getNodeFilters","removeNodeFilter","addAttributeFilter","getAttributeFilters","removeAttributeFilter","findInvalidChildren","isWrappableNode","addRootBlocks","rootBlockName","rootBlockNode","rootBlock","exports","whitespacePre","whitespacePost","invalidFinder","matchFinder","topLevelChildren","otherChildren","serializeContent","withSerializedContent","fireEvent","parserSettings","serializedContent","eventArgs","makeParserSettings","preProcessGetContent","postProcessGetContent","preProcessSetContent","processedEventArgs","postProcessSetContent","tableModel","tableRow","cellPosition","getSpan","td","fillout","rowspan","colspan","y2","x2","cellExists","skipCellsX","getWidth","row","findElementPos","extractRows","sx","sy","ex","ey","newRows","slice","subTable","createDomTable","tableElement","tableBody","modelRowsToDomRows","fromDom","toDom","subsection","findParentListContainer","getFullySelectedListWrappers","_li","listCont","listElm","listStyles","_style","wrap","innerElm","directListWrappers","commonAnchorContainer","getWrapElements","wrapElements","listWrappers","allWrappers","emptyFragment","getFragmentFromRange","getParentTable","getTableFragment","selectedTableCells","firstCell","lastCell","fullTableModel","sectionedTableModel","getSelectionFragment","read$3","isCollapsibleWhitespace","getInnerText","bin","getContextNodeName","parentBlockOpt","getTextContent","contextNodeName","rangeContentClone","nonRenderedText","parentBlockText","textIndex","hasProceedingSpace","hasTrailingSpace","getSerializedContent","tmpElm","extractSelectedContent","setupArgs$3","getSelectedContentInternal","defaultedArgs","updatedArgs","KEEP","INSERT","DELETE","diff","vDown","vUp","snake","diag","buildScript","start1","end1","start2","end2","script","getMiddleSnake","j","i2","buildSnake","sum","getOuterHtml","insertAt","removeAt","applyDiff","read$2","trimZwsp","write","currentFragments","lazyTempDocument","hasIframes","createFragmentedLevel","createCompleteLevel","createFromEditor","applyToEditor","level","getLevelContent","getCleanLevelContent","hasEqualContent","level1","level2","hasEqualCleanedContent","isEq$1","isUnlocked","locks","setTyping","undoManager","typing","endTyping","endTypingLevelIgnoreLocks","beforeChange$1","beforeBookmark","addUndoLevel$1","currentLevel","newLevel","lastLevel","bm","customUndoRedoLevels","clear$1","extra$1","callback1","callback2","redo$1","undo$1","reset$1","hasUndo$1","hasRedo$1","transact$1","ignore$1","addVisualInternal","matchedElm","makePlainAdaptor","makeRtcAdaptor","rtcEditor","defaultVars","init","autocompleter","_undoManager","_locks","_index","_node","_similar","_rfl","_details","_format","makeNoopAdaptor","nul","isRtc","getRtcSetup","rtcPlugin","setup$t","editorCast","getRtcInstanceWithFallback","getRtcInstanceWithError","rtcInstance","beforeChange","addUndoLevel","undo","redo","clear","reset","hasUndo","hasRedo","transact","ignore","extra","matchFormat","matchAllFormats","matchNodeFormat","canApplyFormat","closestFormat","applyFormat","removeFormat","toggleFormat","formatChanged","getContent$2","setContent$2","insertContent$1","getSelectedContent","addVisual$1","bindEvents","getContent$1","removeEmpty","walkPastBookmark","merge$1","outer","inner","outerElm","oldLength","normalizeTextIfRequired","mergeAndNormalizeText","outerNode","rngSetContent","prevText","nextText","setupArgs$2","cleanContent","contextBlock","contextArgs","setContent$1","cleanedContent","deleteFromCallbackMap","SelectorChanged","selectorChangedData","currentSelectors","findMatchingNode","matchedSelectors","isAttachedToDom","isValidRange","EditorSelection","selectedRange","explicitRange","selectorChangedWithUnbind","setCursorLocation","setRng","getContent","setContent","getRng$1","getEnd$1","getBookmark","bookmarkManager","select$1","getSel","isEditable","fakeSelectedElements","tryCompareBoundaryPoints","how","sourceRange","destinationRange","setNode","getSelectedBlocks$1","isForward","anchorNode","focusNode","anchorRange","focusRange","scrollContainer","controlSelection","htmlParser","prevName","lastParent","register$3","trimTrailingBr","isBr","brNode1","brNode2","preProcess$1","oldDoc","clonedNode","impl","shouldFireEvent","process$1","addTempAttr","postProcess","getHtmlFromNode","parseHtml","serializeNode","toHtml","DomSerializerImpl","serialize","DomSerializer","domSerializer","defaultFormat$1","setupArgs$1","defaultFormat","setupArgs","removedOptions","deprecatedOptions","removedPlugins","deprecatedPlugins","getMatchingOptions","searchingFor","settingNames","setting","getRemovedOptions","getDeprecatedOptions","getMatchingPlugins","plugins","pluginNames","plugin","getRemovedPlugins","getDeprecatedPlugins","entry","logRemovedWarnings","rawOptions","normalizedOptions","hasRemovedPlugins","hasRemovedOptions","isLegacyMobileTheme","listJoiner","themesMessage","pluginsMessage","optionsMessage","getPluginDescription","logDeprecatedWarnings","hasDeprecatedPlugins","hasDeprecatedOptions","logWarnings","DOM$8","restoreOriginalStyles","safeDestroy","clearDomReferences","restoreForm","form","remove$1","_selectionOverrides","editorUpload","destroy","automatic","IconManager","iconPack","ModelManager","getProp","propName","getComputedSizeProp","getClientWidth","getClientHeight","getMarginTop","getMarginLeft","getBoundingClientRect","isInsideElementContentArea","bodyElm","clientWidth","clientHeight","transpose","isXYInContentArea","transposedPoint","fromDomSafe","isEditorAttachedToDom","rawContainer","NotificationManagerImpl","unimplemented","NotificationManager","notifications","getImplementation","theme","getTopNotification","notification","addNotification","closeNotification","otherNotification","open","close","getNotifications","serviceMessage","isF12","notificationApi","PluginManager","ThemeManager","WindowManagerImpl","WindowManager","dialogs","funcBind","fireOpenEvent","dialog","fireCloseEvent","addDialog","closeDialog","otherDialog","getTopDialog","storeSelectionAndOpenDialog","openDialog","params","openUrl","alert","windowManagerImpl","confirm","displayNotification","displayError","uploadError","logError","createLoadError","pluginLoadError","iconsLoadError","languageLoadError","themeLoadError","modelLoadError","pluginInitError","initError","console","removeFakeSelection","setEditorCommandState","setCommonEditorCommands","restoreFakeSelection","disableEditor","enableEditor","isDisabled","internalContentEditableAttr","switchOffContentEditableTrue","switchOnContentEditableTrue","toggleDisabled","registerDisabledContentFilters","registerFilters","isClickEvent","allowedEvents","isAllowedEventInDisabledMode","getAnchorHrefOpt","processDisabledEvents","href","targetEl","registerDisabledModeEventHandlers","registerEventsAndFilters$1","isContentCssSkinName","toContentSkinResourceName","isBundledCssSkinName","getContentCssUrls","transformToUrls","getFontCssUrls","cssLinks","skinUrl","contentCssFile","appendContentCssFromSettings","getAllImages","ImageScanner","uploadStatus","cachedPromises","images","promises","imageInfo","newPromise","UploadStatus","blobUriStatuses","createStatus","resultUri","hasBlobUri","blobUri","seed","rnd","uuid","BlobCache","cache","mimeToExt","filename","toBlobInfo","findFirst","cachedBlobInfo","Uploader","pendingPromises","pathJoin","path1","path2","defaultHandler","progress","xhr","json","formData","uploadHandler","noUpload","handlerSuccess","handlerFailure","resolvePending","uploadBlobInfo","openNotification","percent","isDefaultHandler","pendingUploadBlobInfo","uploadBlobs","blobInfos","createUploader","ImageUploader","uploader","showNotification","isEmptyForPadding","addPaddingToEmpty","EditorUpload","imageScanner","urlFilters","aliveGuard","cacheInvalidator","replaceString","replaceImageUrl","targetUrl","replacementUrl","replacementString","replaceUrlInUndoStack","replaceImageUriInView","image","uploadImages","scanForImages","imageInfos","imagesToRemove","shouldDispatchChange","filteredResult","uploadInfo","removed","sugarElement","parentOpt","uploadImagesAuto","isValidDataUriImage","imgElm","addFilter","resultItem","replaceBlobUris","get$1","strike","_fmt","_itemName","genericBase","cellBase","cellFormats","FormatRegistry","register","unregister","each$3","isPreviewItem","parsedSelectorToHtml","ancestry","createElement","sItem","getRequiredParent","elmRule","parentsRequired","wrapInHtml","ancestors","parentCandidate","ancestorName","parentRequired","siblingElm","parentSiblings","parseSelectorItem","$0","$3","$4","parseSelector","getCssText","previewCss","previewStyles","removeVars","getComputedStyle","preview","previewFrag","previewElm","rawParentFontSize","parentFontSize","setup$s","Formatter","formatChangeState","shouldIgnoreCommand","registerEvents","isFirstTypedCharacter","addNonTypingUndoLevel","isMeta","modKey","isInsertReplacementText","isInsertTextDataNull","isInsertFromPasteOrDrop","addKeyboardShortcuts","UndoManager","nonTypingKeycodes","placeholderAttr","isKeyboardEvent","isDeleteEvent","isNonTypingKeyboardEvent","isTypingKeyboardEvent","isVisuallyEmpty","setup$r","placeholder","updatePlaceholder","showPlaceholder","blockPosition","blockBoundary","getBlockPosition","containerElm","isNotAncestorial","isDifferentBlocks","getClosestHost","hasSameHost","isEditable$1","hasValidBlocks","isValidBlock","skipLastBr","lastPositionInBlock","readFromRange","fromBlockPos","toBlockPos","blockPos","read$1","getChildrenUntilBlockBoundary","extractChildren","removeEmptyRoot","isEmptyBefore","nestedBlockMerge","toBlock","insertionPoint","sidelongBlockMerge","newFromBlockDescendants","findInsertionPoint","parentsAndSelf$1","getInsertionPoint","trimBr","mergeBlockInto","mergeBlocks","backspaceDelete$a","deleteRangeMergeBlocks","isRawNodeInTable","isSelectionInTable","isEverythingSelected","noPrevious","noNext","emptyEditor","deleteRange$2","backspaceDelete$9","_forward","showCaret","scrollIntoView","getNodeRange","selectNode","renderCaretAtRange","caretPositionNode","caretPositionBeforeNode","ceRoot","renderRangeCaret","isBeforeBoundary","isAfterBoundary","trimEmptyTextNode","deleteContentAndShowCaret","peekCaretPosition","caretRange","deleteRange","deleteBoundaryText","getNextPosFn","isBeforeFn","nextCaretPosition","normalizedNextCaretPosition","backspaceDelete$8","getEdgeCefPosition","atStart","isCefAtEdgeSelected","isCompoundElement","DeleteAction","isAtContentEditableBlockCaret","caretLocation","isDeleteFromCefDifferentBlocks","deleteEmptyBlockOrMoveToCef","toCefElm","blockElm","findCefPosition","getContentEditableBlockAction","skipMoveToActionFromInlineCefToContent","getContentEditableAction","read","deleteElement$1","moveToElement","moveToPosition","getAncestorCe","backspaceDeleteCaret","deleteOffscreenSelection","backspaceDeleteRange","paddEmptyElement","backspaceDelete$7","isTextEndpoint","endpoint","isElementEndpoint","createMarker","getEndpoint","resolveBookmark","backspaceDelete$6","startBlock","endBlock","deleteCaret$2","backspaceDelete$5","isText$2","startsWithCaretContainer","endsWithCaretContainer","createZwsp","insertBefore$1","insertAfter$1","insertInline","insertInlineBefore","insertInlineAfter","insertInlinePos","isPosCaretContainer","caretNode","renderCaret","evaluateUntil","fns","Location","rescope$1","nPos","isNotInsideFormatCaretContainer","findInsideRootInline","start$1","isValidLocation","getElement","readLocation","getName","outside","inside","isEq","location1","location2","betweenInlines","fromInline","toInline","skipNoMovement","fromLocation","toLocation","findLocationTraverse","findLocationSimple","findLocation$1","hasSelectionModifyApi","moveRel","moveByWord","BreakType","flip","positions","walk$1","getBreakType","currentPos","getPositionsUntil","breakType","getAdjacentLinePositions","getPositionsUntilBreak","findClosestHorizontalPositionFromPoint","lastRect","newRect","lastDist","findClosestHorizontalPosition","targetRect","getPositionsUntilPreviousLine","getPositionsUntilNextLine","getPositionsAbove","getPositionsBelow","isAtFirstLine","isAtLastLine","getFirstLinePositions","getLastLinePositions","getClosestPositionAbove","getClosestPositionBelow","isContentEditableFalse$5","distanceToRectLeft$1","distanceToRectRight$1","isNodeClientRect","findClosestClientRect","oldClientRect","oldDistance","newDistance","getNodeClientRects","toArrayWithNode","VDirection","findUntil","walkUntil","isAboveFn","isBeflowFn","line","targetClientRect","aboveLineNumber","lineNumber","isLineNumber","upUntil","downUntil","getLastClientRect","positionsUntil","isBelowFn","isAboveLine","isLine","moveToRange","renderRangeCaretOpt","moveHorizontally","isBefore","isAfter","isElement","rangeIsInContainerBlock","moveVertically","caretClientRect","linePositions","nextLinePositions","nextLineRect","dist1","dist2","caretPositions","closestNextLineRect","getLineEndPoint","lineInfo","moveToLineEndPoint$3","isElementPosition","setCaretPosition","setSelected","renderCaretLocation","getPositionFromRange","findLocation","isInlineTarget$1","toggleInlines","inlineBoundaries","selectedInlines","targetInlines","safeRemoveCaretContainer","caretValue","renderInsideInlineCaret","inlines","_inline","move$3","moveWord","_caret","setupSelectedState","moveNextWord","movePrevWord","moveToLineEndPoint$2","linePoint","outsideLoc","rangeFromPositions","hasOnlyTwoOrLessPositionsLeft","setCaretLocation","deleteFromTo","rescope","backspaceDeleteCollapsed","toPosition","backspaceDelete$4","hasMultipleChildren","getParentsUntil","hasOnlyOneChild","getParentInlinesUntilMultichildInline","getParentInlines","getFormatNodes","parentInlines","isFormatElement$1","getFormatNodesAtStart","deleteLastPosition","deleteCaret$1","isBrInEmptyElement","isEmptyCaret","createCaretFormatAtStart","updateCaretFormat","updateFormats","missingFormats","rangeStartsAtTextContainer","rangeStartsAtStartOfTextContainer","rangeStartParentIsFormatElement","startParent","rangeStartAndEndHaveSameParent","endParent","rangeEndsAtEndOfEndContainer","rangeEndsAtEndOfStartContainer","rangeEndsAfterEndOfStartContainer","rangeEndsAtOrAfterEndOfStartContainer","requiresDeleteRangeOverride","deleteRange$1","backspaceDelete$3","hasAncestorInlineCaret","hasAncestorInlineCaretAtStart","requiresRefreshCaretOverride","refreshCaret","deleteElement","deleteCaret","isNearMedia","backspaceDelete$2","parseIndentValue","getIndentStyleName","useMargin","indentStyleName","indentElement","unit","parsedValue","validateBlocks","intentValue","canOutdent","getBlocksToIndent","isListComponent","parentIsListComponent","indentation","indentUnit","indentValue","outdent","backspaceDelete$1","findAction","deleteCommand","forwardDeleteCommand","setup$q","SIGNIFICANT_MOVE","LONGPRESS_DELAY","getTouch","isFarEnough","distX","distY","setup$p","startData","longpressFired","debounceLongpress","isBlockElement","isValidTarget","hasBlockParent","shouldRemoveTextNode","createRootBlock","rootNodeName","insertEmptyLine","setup$o","checkClassName","replaceMatchWithSpan","prevChar","findStartTagIndex","convertRegExpsToNonEditable","nonEditableRegExps","isValidContent","re","setup$n","contentEditableAttrName","editClass","nonEditClass","hasEditClass","hasNonEditClass","findBlockCaretContainer","showBlockCaretContainer","blockCaretContainer","handleBlockContainer","setup$m","isContentEditableFalse$4","moveToCeFalseHorizontally","moveToCeFalseVertically","createTextBlock","textBlock","exitPreBlock","getVisualCaretPosition$1","newBlock","getHorizontalRange","getVerticalRange","down","flipDirection","moveH$2","moveV$4","moveToLineEndPoint$1","selectToEndPoint","curRng","isTarget","getClosestTargetBlock","isAtFirstOrLastLine","moveCaretToNewEmptyLine","moveV$3","moveUp","summary","moveDown","move$2","moveV$2","baseKeyPattern","defaultPatterns","defaultDelayedPatterns","matchesEvent","match$1","matchDelayed","execute","executeWithDelayedAction","moveH$1","moveV$1","moveToLineEndPoint","CellLocation","firstLayer","filterFirstLayer","lookup$1","tags","isRootOrUpperTable","isEligible","newIndex","detect","isTextNodeWithCursorPosition","isContentEditableFalse$3","elementsWithCursorPosition","isCursorPosition","deflate","getCorners","getYAxisValue","tds","findClosestCorner","corners","newCorner","oldCorner","oldDist","newDist","getClosestCell","isTargetCorner","corner","getBottomValue","getTopValue","isAbove","isBelow","getClosestCellAbove","getClosestCellBelow","findClosestPositionInAboveCell","findClosestPositionInBelowCell","hasNextBreak","breakPos","startsWithWrapBreak","startsWithBrBreak","isAtTableCellLine","isAtFirstTableCellLine","isAtLastTableCellLine","isCaretAtStartOrEndOfTable","navigateHorizontally","_td","getClosestAbovePosition","getClosestBelowPosition","getTable","previous","renderBlock","insertFn","navigateVertically","move$1","mover","moveH","moveV","getCellFirstCursorPosition","tabGo","_current","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","require$$0","noarg","constant$1","range$2","chunk$1","partition$3","find$5","pure$2","get$i","find$4","get$h","sequence","mapFrom","addToEnd","ensureTrailing","toFloat","fromHtml$2","path$1","getOrDie$1","name$3","all$3","owner$4","child$2","isInShadowRoot","getBody","set$9","get$g","set$8","setOptions","get$f","isValidValue$1","Dimension","api$2","get$e","getOuter$2","setMax$1","inclusions","absMax","r$1","absolute$3","viewport$1","set$7","get$d","getOuter$1","setMax","find$3","nu$d","unknown$3","nu$c","nu$b","fromRawEvent$1","capture$1","append$2","prepend$1","appendAt","get$c","bounds$1","getBounds$3","pointed","box$1","xy","absolute$2","constrain","constraint","constrainByMany","constraints","singleton$1","destroyable","unbindable","value$4","global$a","value$3","error$1","field$2","required$2","mergeWithThunk","baseThunk","mergeWith","mergeValues$1","mergeErrors$1","nu$a","unsupportedFields","unsupported","valueThunk","getDelegate","getSetKeys","objOfOnly","fieldNames","setOf$1","validateKeys","validatedKeys","vk","_desc","getP","isPostMessageable","postMessageable","choose$2","arrOfVal","setOf","extraction","asRawOrDie$1","thunkOf","required$1","requiredNumber","forbid","_v","requiredObjOf","objSchema","requiredArrayOfObj","objFields","option$3","optionNumber","optionStringEnum","optionArrayOf","optionObjOf","optionObjOfOnly","defaultedPostMsg","defaultedObjOf","exclude$1","wrapAll$1","keyvalues","kv","wrapAll","consolidate","objs","isSource","simulatedEvent","defaultEventHandler","nu$9","all$2","any","fuse$1","can","abort","touchstart","touchmove","touchend","touchcancel","mousedown","mousemove","mouseout","mouseup","mouseover","focusin","focusout","keydown","keyup","change","click","transitioncancel","transitionend","transitionstart","selectstart","prefixName","alloy","focus$4","postBlur","postPaste","receive","execute$5","focusItem","tap","longpress","sandboxClose","typeaheadCancel","systemInit","documentTouchmove","documentTouchend","windowScroll","windowResize","attachedToDom","detachedFromDom","dismissRequested","repositionRequested","focusShifted","slotVisibility","externalElementScroll","changeTab","dismissTab","highlight$1","dehighlight$1","emit","dispatchWith","emitWith","emitExecute","retargetAndDispatchWith","dispatchEvent","derive$2","configs","preventDefault","run$1","runActionExtra","runOnName","runOnSourceName","redirectToUid","redirectee","redirectToPart","detail","partName","runWithTarget","ev","cutter","stopper","runOnSource","runOnAttached","runOnDetached","runOnInit","runOnExecute$1","markAsBehaviourApi","apiName","apiFunction","openBracketIndex","parameters","cleanParameters","markAsExtraApi","extraName","markAsSketchApi","nu$8","defnA","mod","executeEvent","bConfig","bState","loadEvent","_simulatedEvent","apis","configSchema","schemaSchema","doCreate","createModes$1","modes","wrapApi","bName","revokeBehaviour","getConfig","wrappedApis","apiF","me","extraF","prepared","behaviourInfo","exhibitor","NoState","nu$7","derive$1","capabilities","simpleSchema","modeSchema","createModes","toggle$5","toggle$4","add$1","toggle$3","hasAll","getNative","NuPositionCss","toPx","toOptions","applyPositionCss","getOffsetParent","offsetParent$1","getOrigin","appear","contextualInfo","disappear","isPartiallyVisible","isTopCompletelyVisible","isBottomCompletelyVisible","forceTopPosition","winBox","leftX","forceBottomPosition","getDockedLeftPosition","tryDockingPosition","isVisibleForModes","getXYForRestoring","priorY","scrollEnv","getXYForSaving","getPrior","storePrior","decision","storePriorIfNone","revertToOriginal","offsetBox","scrollDelta","_left","_top","_right","_bottom","tryMorphToOriginal","tryDecisionToFixedMorph","tryMorphToFixed","tryMorphToOriginalOrUpdateFixed","tryMorph","calculateMorphToOriginal","forceDockWith","getDecision","morphToStatic","morphToCoord","isDocked","updateVisibility","morphToDocked","contextInfo","applyFixedMorph","morph","applyMorph","refreshInternal","resetInternal","staticOrAbsoluteMorph","refresh$4","reset$2","forceDockWithDecision","forceDockToTop","forceDockToBottom","DockingApis","ActiveDocking","dockInfo","dockState","set$6","EventConfiguration","eventConfig","makeEventLogger","initialTarget","startTime","_name","purpose","finishTime","noLogger","logger","getTrace","lines","ignoreEvent","monitorEvent","menuFields","itemFields","itemSchema$3","_initSize","itemMarkers","tieredMenuMarkers","markers$1","onPresenceHandler","fieldName","onHandler","onKeyboardHandler","onStrictHandler","onStrictKeyboardHandler","output$1","initSize","DockingSchema","DockingState","docked","visible","initialBounds","readState","Docking","isRecursive","originator","events$h","DefaultEvents","cycleBy","generate$6","prefix$1","idAttr$1","idAttr","writeOnly","generate$5","make$8","NoContextApi","getComp","getMessage","warn","premadeTag","premade$1","comp","isPremade","getPremade","makeApi","generateFrom$1","validated","optBlobThunk","getBehaviours$3","bData","getData$2","byInnerKey","indexKey","chain","combine$2","baseMod","behaviours","modsByBehaviour","behaviour","byAspect","modification","combineObjects","combinedClasses","combinedAttributes","combinedStyles","sortKeys","keyName","order","sorted","aKey","bKey","aIndex","bIndex","uncurried","curried","curryArgs","descHandler","extraArgs","getCurried","behaviourTuple","nameToHandlers","groupByEvents","behaviourEvents","combine$1","eventOrder","byEventName","combineGroups","assemble","rawHandler","missingOrderError","tuples","fuse","sortedTuples","assembled","baseBehaviour","schema$z","toInfo","toDefinition","toModification","toEvents","set$5","determineObsoleted","oldObsoleted","newObs","oldTag","ensureInDom","obsoleted","obs","patchChildrenWith","builtChildren","patchSpecChild","build","childComp","patchSpecChildren","specs","patchDomChildren","optObsoleted","diffKeyValueSet","newObj","oldObj","newKeys","oldKeys","toRemove","toSet","reconcileToDom","definition","existingAttributes","attrsToSet","attrsToRemove","updateAttrs","existingStyles","stylesToSet","stylesToRemove","updateStyles","existingClasses","classesToRemove","classesToAdd","updateClasses","updateHtml","updateValue","valueElement","introduceToDom","attemptPatch","hasMixedChildren","renderToDom","canBePatched","getBehaviours$2","generateFrom","generate$4","getDomDefinition","bList","infoModification","baseModification","getEvents","baseEvents","build$2","getMe","systemApi","bBlob","modDefinition","subcomponents","connect","newApi","disconnect","syncComponents","subs","hasConfigured","getApis","behaviourName","buildSubcomponents","components","build$1","buildOrPatch","buildFromSpec","userSpec","specEvents","completeSpec","text$2","external$1","extSpec","uids","isSketchSpec$1","userSpecWithUid","premade","attribute","queryElem","manager","ariaId","isAriaPartOf","owner","isPartOf$1","nu$6","placement","boundsRestriction","labelPrefix","alwaysFit","adt$a","cata$2","southeast","southwest","northeast","northwest","south","north","east","west","cataVertical","cataHorizontal","southeast$3","southwest$3","northeast$3","northwest$3","south$3","north$3","east$3","west$3","getRestriction","restriction","restrictions","adjustBounds","bubbleOffset","applyRestriction","isVerticalAxis","adjustedLeft","adjustedTop","adjustedRight","adjustedBottom","labelPrefix$2","eastX$1","middleX$1","westX$1","northY$2","southY$2","centreY$1","eastEdgeX$1","westEdgeX$1","southeast$2","bubbles","southwest$2","northeast$2","northwest$2","north$2","south$2","east$2","west$2","all$1","allRtl$1","aboveOrBelow","aboveOrBelowRtl","belowOrAbove","belowOrAboveRtl","chooseChannels","channels","ActiveReceiving","receiveConfig","channelMap","receivingData","targetChannels","channelInfo","channelSchema","ReceivingSchema","Receiving","ActivePosition","posConfig","focus$3","blur$1","preserve$1","refocus","focused","oldFocus","newFocus","adt$9","positionWithDirection","posName","decisionRect","decisionX","decisionY","decisionWidth","decisionHeight","decisionRight","decisionBottom","none","toBox","optBounds","translate$2","removeScroll","outerScroll","cata$1","onRelative","onFixed","relative$1","fixed$1","anchorBox","placementAttribute","setPlacement$1","getPlacement","adt$8","determinePosition","boundsX","boundsY","boundsRight","boundsBottom","xInBounds","yInBounds","originInBounds","rightInBounds","bottomInBounds","sizeInBounds","visibleW","visibleH","calcReposition","restrictedX","restrictedY","restrictedWidth","restrictedHeight","calcMaxSizes","upAvailable","downAvailable","maxHeight","westAvailable","eastAvailable","attempt","adjustedBounds","newX","newY","fits","fittedBox","isPartlyVisible","maxWidth","attempts","elementBox","panelWidth","panelHeight","attemptBestFit","layout","attemptLayout","newReposition","newVisibleW","newVisibleH","newIsVisible","bestNext","timerAttr","isTransitioning$1","transition","shouldApplyTransitionCss","lastPlacement","placer","hasChanges","intermediate","getTransitionDuration","times","parse","duration","dur","setupTransitionListeners","transitionEnd","transitionCancel","isSourceTransition","pseudoElement","transitionDone","transitionStart","startTransitioning","timerId","applyTransitionCss","shouldTransition","intermediatePosition","intermediateCssOptions","elementSize","setClasses","classInfo","setHeight","maxHeightFunction","setWidth","maxWidthFunction","position$2","positionCss","setPlacement","setMaxHeight","anchored","available","expandable$1","defaultOr","dephault","simple","layouts","go","allAlignments","nu$5","xOffset","yOffset","insetModifier","insetXOffset","insetYOffset","getClasses","make","xDelta","yDelta","alignmentsOn","alignmentsOff","nu$4","onDirection","isLtr","getDirection","AttributeValue","Attribute","isBottomToTopDir","schema$y","defaultLtr","defaultRtl","defaultBottomLtr","defaultBottomRtl","dirElement","isBottomToTop","customLtr","ls","customRtl","ltr","rtl","placement$4","anchorInfo","hotspot","HotspotAnchor","placement$3","MakeshiftAnchor","adt$7","toFixed","toAbsolute","points","sumAsFixed","sumAsAbsolute","screen","absolute$1","hasSameOwner","frame","frameOwner","compOwner","getRootPoint","getBox","calcNewAnchor","optBox","rootPoint","topLeft","layoutsLtr","layoutsRtl","placement$2","nodeBox","NodeAnchor","adt$6","on$1","adt$5","range$1","toRect","getFirstRect$1","getBounds$2","adt$4","asLtrRange","makeRange","same","getNativeSelection","firstRng","doGetExact","getExact","getFirstRect","getBounds$1","descendOnce$1","descendOnce","isSimRange","getAnchorSelection","modStart","modFinish","placement$1","selectionBox","zeroWidth$1","rawRect","selectionRect","SelectionAnchor","labelPrefix$1","eastX","westX","northY$1","southY$1","southeast$1","southwest$1","northeast$1","northwest$1","allRtl","submenuInfo","SubmenuAnchor","AnchorSchema","TransitionSchema","PositionSchema","PlacementSchema","getFixedOrigin","getRelativeOrigin","place","anchoring","placee","lastPlace","position$1","posState","placementSpec","optWithinBounds","positionWithinBounds","placeeDetail","anchorage","placeeState","oldVisibility","newState","vis","PositionApis","pConfig","_pState","PositioningState","Positioning","isConnected","fireDetaching","fireAttaching","virtualAttach","virtualDetach","attach$1","detachChildren$1","replaceChildren","newSpecs","buildNewChildren","newChildren","deleted","virtualReplaceChildren","existingComps","deletedComp","attach","attachWith","insertion","doDetach","detach","parent$1","detachChildren","attachSystem","guiSystem","attachSystemWith","attachSystemAfter","inserter","detachSystem","rebuild","sandbox","sConfig","sState","_data","built","open$1","openWhileCloaked","transaction","cloak","decloak","close$1","isOpen$1","_sandbox","_sConfig","isPartOf","getState$2","cssKey","oldValue","_sState","sink","hasPosition","SandboxApis","ActiveSandbox","sandboxConfig","sandboxState","SandboxSchema","SandboxState","Sandboxing","dismissPopups","repositionPopups","mouseReleased","schema$x","receivingChannel$1","rawSpec","fe","schema$w","receivingChannel","onLoad$5","repConfig","repState","onUnload$2","RepresentApis","ActiveRepresenting","_se","memory$1","isNotSet","manual","dataByValue","dataByText","itemString","currentDataByValue","currentDataByText","newDataByValue","newDataByText","meta","RepresentState","setValue$2","getValue$2","onLoad$4","onUnload$1","DatasetStore","getValue$1","_repState","setValue$1","onLoad$3","ManualStore","getValue","onLoad$2","initVal","onUnload","MemoryStore","RepresentSchema","Representing","source","forbidden","augment","SketchBehaviours","_placeholder","isSubstituted","subPlaceholder","compSpec","placeholders","newSpec","scan","substitute","req","childSpecs","substituted","valuesThunk","substituteAll","oneReplace","replacements","used","substitutePlaces","ph","outcome","single$2","multiple","fFactory","fSchema","fName","fPname","typeSpec","fGroupSchema","fDefaults","fOverrides","requiredSpec","externalSpec","optionalSpec","groupSpec","asNamedPart","name$2","asCommon","convert","adtConstructor","partSchema","external","PartType","combine","partSpec","partValidated","internals","externals","_partSpec","_partValidated","units","u","generate$3","np","doGenerateOne","pname","generateOne$1","schemas","substitutes","components$1","getPart","partKey","getPartOrDie","getParts","partKeys","system","pk","getAllParts","pUid","_k","getAllPartNames","getPartsOrDie","defaultUids","baseUid","partTypes","partNames","pn","defaultUidsSchema","AlloyParts","partSchemas","partUidsSchemas","asRawOrDie","baseS","single$1","factory","specWithUid","supplyUid","composite$1","partUidsSchema","hasUid","isSketchSpec","singleSchema","compositeSchema","single","rawConfig","sketch","extraApis","composite","ComposeApis","composeConfig","_composeState","ComposeSchema","Composing","nativeDisabled","onLoad$1","disableConfig","disableState","disable","enable","hasNative","nativeIsDisabled","nativeDisable","nativeEnable","ariaIsDisabled","ariaDisable","ariaEnable","_disableState","disableClass","DisableApis","disabled","ActiveDisable","DisableSchema","Disabling","dehighlightAllExcept","hConfig","hState","skip","highlighted","skipComp","dehighlightAll","dehighlight","isHighlighted","highlight","highlightFirst","getFirst","firstComp","highlightLast","getLast","lastComp","highlightAt","getByIndex","highlightBy","getCandidates","queryTarget","getHighlighted","_hState","getDelta$2","selected","dest","getPrevious","HighlightApis","HighlightSchema","Highlighting","TAB","ENTER","ESCAPE","SPACE","LEFT","UP","RIGHT","DOWN","cyclePrev","tryPrev","cycleNext","tryNext","inSet","preds","isShift$1","isControl","isNotShift","transitions","reportFocusShifting","prevFocus","dom$2","focusee","highlights","FocusInsideModes","typical","infoSchema","stateInit","getKeydownRules","getKeyupRules","optFocusIn","processKey","getRules","keyingConfig","keyingState","rules","onFocusHandler","focusIn","tryGoInsideComponent","isEnterOrSpace","keyboardEvents","cyclicField","tabbingConfig","findInitial","tabstops","visibles","findCurrent","isTabstop","_tabbingState","goFromTabstop","stopIndex","cycle","tabstop","goBackwards","goForwards","goFromPseudoTabstop","exit","AcyclicType","CyclicType","doDefaultExecute","defaultExecute","stopEventForFirefox","_component","schema$v","execute$4","executeConfig","getKeydownRules$5","_executeState","spaceExec","enterExec","downExec","execKeys","getKeyupRules$5","ExecutionType","flatgrid$1","dimensions","numRows","numColumns","KeyingState","useH","use","west$1","moveLeft","moveRight","east$1","useV","north$1","south$1","isHidden$1","locate","locateVisible","withGrid","numCols","oldRow","oldColumn","address","cycleHorizontal$1","colsInRow","newColumn","cycleVertical$1","newRow","newCol","cycleRight$1","cycleLeft$1","cycleUp$1","cycleDown$1","schema$u","focusIn$4","gridConfig","_gridState","findCurrent$1","execute$3","doMove$2","gridState","identified","doEscape$1","moveLeft$3","moveRight$3","moveNorth$1","moveSouth$1","getKeydownRules$4","getKeyupRules$4","FlatgridType","getNewIndex","isDisabledButton","tryNewIndex","horizontalWithoutCycles","prevIndex","oldCandidate","onNewIndex","_oldCandidate","schema$t","flowConfig","execute$2","focusIn$3","_state","moveLeft$2","moveRight$2","doMove$1","flowState","doEscape","getKeydownRules$3","_flowState","westMovers","eastMovers","getKeyupRules$3","FlowType","matrix","rowIndex","columnIndex","cycleHorizontal","startCol","deltaCol","newColIndex","cycleVertical","colIndex","startRow","deltaRow","nextRowIndex","colsInNextRow","nextColIndex","moveHorizontal","moveVertical","cycleRight","cycleLeft","cycleUp","cycleDown","moveLeft$1","moveRight$1","moveUp$1","moveDown$1","schema$s","focusIn$2","matrixConfig","selectors","execute$1","toMatrix","doMove","ifCycle","ifMove","inRow","cellsInRow","allRows","moveNorth","moveSouth","getKeydownRules$2","getKeyupRules$2","MatrixType","schema$r","menuConfig","focusIn$1","fireShiftTab","menuState","fireTab","getKeydownRules$1","getKeyupRules$1","MenuType","schema$q","specialInfo","SpecialType","acyclic","cyclic","flow","flatgrid","execution","menu","special","KeyboardBranches","isFlatgridState","keyState","Keying","keyConfig","sendFocusIn","withoutReuse","withReuse","virtualReplace","replaceeIndex","childSpec","replaceConfig","replaceState","appendee","prependee","removee","_replaceConfig","replaceAt","replacer","ReplaceApis","replaceePred","Replacing","events$c","eventHandlers","focus$2","focusConfig","FocusApis","ActiveFocus","FocusSchema","Focusing","SetupBehaviourCellState","initialState","updateAriaState","toggleConfig","toggleState","ariaInfo","updateClass","off","isOn","onLoad","ToggleApis","ActiveToggle","updatePressed","updateExpanded","updateSelected","updateChecked","ToggleSchema","Toggling","pointerEvents","onClick","events$9","optAction","executeHandler","hoverEvent","focusEvent","toggledEvent","onHover","onFocus$1","onToggled","hover","toggled","getItemRole","toggling","getTogglingSpec","tConfig","isOption","builder$2","role","schema$p","builder$1","schema$o","owner$2","parts$h","builder","focusWidget","widget","onHorizontalArrow","_widget","schema$n","itemSchema$2","configureGrid","movementInfo","configureMatrix","configureMenu","parts$g","itemInfo","schema$m","deselectOtherRadioItems","checkedRadioItems","make$7","_spec","_externals","Menu","transpose$1","trace","byItem","byMenu","triggerItem","triggerMenu","generate$2","menus","expansions","menuPaths","_triggerItem","submenu","init$b","isClear","setMenuBuilt","menuName","setContents","sPrimary","sMenus","sExpansions","sPaths","getTriggeringItem","menuValue","getTriggerData","getItemByValue","getPreparedMenu","triggeringItemValue","triggeredItem","getTriggeringPath","itemValue","extraPath","lookupItem","revPath","menuIndex","expand","refresh","lookupMenu","extractPreparedMenu","menuValues","prep","LayeredState","onMenuItemHighlightedEvent","onMenuItemDehighlightedEvent","HighlightOnOpen","make$6","_rawUiSpec","submenuParentItems","buildMenus","primaryName","makeSketch","menuComp","itemComp","layeredState","componentMap","toDirectory","getItemValue","_container","_menuName","setActiveMenu","setActiveMenuAndItem","getMenus","mv","closeOthers","others","getSubmenuParents","parentItems","updateAriaExpansions","expanded","updateMenuPath","latestMenuName","menuPrep","activeMenu","ExpandHighlightDecision","buildIfRequired","expandRight","activeMenuPrep","collapseLeft","updateView","onRight","onLeft","onEscape","keyOnItem","tmenu","tmenuComp","se","getActiveItem","collapseMenuApi","currentItem","highlightPrimary","extractMenuFromContainer","allMenus","preparedMenus","triggeringPath","primaryMenu","_keyInfo","collapseItem$1","tieredData","singleData","collapseItem","tieredMenu","makeMenu","menuSandbox","menuSpec","lazySink","isFirstTierSubmenu","triggeringPaths","getSubmenuLayouts","submenuTriggers","st","submenuLayouts","factory$o","isPartOfRelated","thing","showAt","showWithinBounds","showMenuAt","showMenuWithinBounds","InlineView","global$9","global$8","global$7","global$6","ToolbarMode$1","ToolbarMode","ToolbarLocation$1","ToolbarLocation","option$2","wrapOptional","register$f","stringOrFalseProcessor","stringOrNumberProcessor","getHeightOption","getWidthOption","getMinWidthOption","getMinHeightOption","getMaxWidthOption","getMaxHeightOption","getUserStyleFormats","shouldMergeStyleFormats","shouldAutoHideStyleFormats","getContentLanguages","getRemovedMenuItems","getToolbarMode","getToolbarGroups","getToolbarLocation","fixedContainerSelector","fixedToolbarContainerTarget","isToolbarPersist","getStickyToolbarOffset","getMenubar","getToolbar","getFilePickerCallback","getFilePickerValidatorHandler","getFontSizeInputDefaultUnit","getFilePickerTypes","useTypeaheadUrls","getAnchorTop","getAnchorBottom","isDraggableModal$1","useStatusBar","useElementPath","useBranding","getResize","getPasteAsText","getSidebarShow","promotionEnabled","useHelpAccessibility","getDefaultFontStack","getSkin","isSkinDisabled","isMenubarEnabled","getSkinUrl","skin","getSkinUrlOption","getLineHeightFormats","isToolbarEnabled","toolbar","isToolbarString","isToolbarObjectArray","isMultipleToolbars","getMultipleToolbarsOption","toolbars","toolbarArray","isToolbarLocationBottom","fixedContainerTarget","useFixedContainer","getUiContainer","isDistractionFree","isStickyToolbar","isSplitUiMode","Options","nonScrollingOverflows","isScrollingOverflowValue","isScroller","isFullscreen","popupSinkElem","ancestorsScrollers","scrollers","detectWhenSplitUiMode","getBoundsFrom","scrollableBoxes","Button","lookupAttr","getModAttributes","roleAttrs","getAttrs","record","anyInSystem","ActiveTabstopping","tabConfig","TabstopSchema","Tabstopping","ExclusivityChannel","ShowTooltipEvent","HideTooltipEvent","ImmediateHideTooltipEvent","ImmediateShowTooltipEvent","hideAllExclusive","_tConfig","_tState","TooltippingApis","tState","tooltip","ActiveTooltipping","tooltipConfig","TooltippingSchema","TooltippingState","clearTimer","resetTimer","setToEnabled","Tooltipping","create$1","text$1","sanitizeHtmlString","global$5","rtlTransform","defaultIconName","defaultIcon","getIconName","rtlName","lookupIcon","iconProvider","getOr","fallbackIcon","needsRtlTransform","iconName","addFocusableBehaviour","renderIcon$3","rtlIconClasses","iconHtml","render$3","renderFirst","iconNames","notificationIconMap","Notification","notificationTextId","memBannerText","renderPercentBar","renderPercentText","memBannerProgress","banner","iconChoices","memButton","notificationIconSpec","notificationBodySpec","extras","uiMothership","notificationRegion","sharedBackstage","getBoundsContainer","clampComponentsToBounds","closeCallback","isEditorOrUIFocused","removeNotificationAndReposition","region","manageRegionVisibility","editorOrUiFocused","handleEmptyRegion","handleRegionWithChildren","editorOrUIFocused","shouldApplyDocking","notificationSpec","notificationWrapper","anchorOverrides","AutocompleterEditorEvents","redirectKeyToItem","getItem","ItemResponse","ItemResponse$1","navClass","selectableClass","colorClass","presetClasses","tickedClass","groupHeadingClass","iconClass","textClass","accessoryClass","caretClass","checkmarkClass","activeClass","containerClass","containerColumnClass","containerRowClass","containerAlignRightClass","containerAlignLeftClass","containerValignTopClass","containerValignMiddleClass","containerValignBottomClass","classForPreset","presets","forMenu","menuClasses","dom$1","hasIcons","columns","schema$l","focusBehaviours","factory$l","Input","refetchTriggerEvent","redirectMenuItemInteractionEvent","menuSearcherClass","findWithinSandbox","sandboxComp","inputElem","findWithinMenu","restoreState","inputComp","searcherState","saveState","fetchPattern","selectionStart","selectionEnd","setActiveDescendant","renderMenuSearcher","handleByBrowser","handleByHighlightedItem","eventData","customSearcherEventsName","searchResultsClass","augmentWithAria","chunk","rowDom","chunks","forSwatch","forToolbar","preprocessCollection","isSeparator","allSplits","currentSplit","insertItemsPlaceholder","initItems","onItem","rawItems","enrichedItems","_item","forCollection","_hasIcons","forCollectionWithSearchResults","ariaControlsSearchResults","forCollectionWithSearchField","searchField","forHorizontalCollection","menuHasIcons","handleError","createHorizontalPartialMenuWithAlloyItems","_columns","_menuLayout","structure","createPartialMenuWithAlloyItems","menuLayout","getNormalStructure","getSubmenuItems","onItemAction","optionalName","optionalRole","optionalShortcut","optionalSelect","borderless","defaultedMeta","defaultedOnAction","generatedName","namePrefix","generatedValue","valuePrefix","separatorMenuItemSchema","createSeparatorMenuItem","autocompleterItemSchema","createSeparatorItem","createAutocompleterItem","toolbarButtonSchema","createToolbarButton","toggleButtonSchema","createToggleButton","contextFormSchema","createContextForm","contextToolbarSchema","toolbarGroupBackToSpec","toolbarGroup","contextToolbarToSpec","contextToolbar","createContextToolbar","cardImageFields","cardImageSchema","cardTextFields","cardTextSchema","itemSchema$1","cardContainerSchema","commonMenuItemFields","cardMenuItemSchema","createCardMenuItem","choiceMenuItemSchema","createChoiceMenuItem","baseFields","insertTableFields","colorSwatchFields","fancyMenuItemSchema","createFancyMenuItem","menuItemSchema","createMenuItem","nestedMenuItemSchema","createNestedMenuItem","toggleMenuItemSchema","createToggleMenuItem","detectSize","selectorClass","columnLength","thisTop","cTop","namedEvents","SimpleBehaviours","escape","DisablingConfigs","runWithApi","onControlAttached","editorOffCell","onDestroy","onControlDetached","getApi","UiStateChannel","messageSetDisabled","messageSetEnabled","messageInit","modeContextMessages","broadcastEvents","uiRefs","messageType","outerContainer","motherships","setupEventsForUi","toggleOnReceive","contextType","shouldDisable","onMenuItemExecute","itemResponse","menuItemEventOrder","componentRenderPipeline","renderCommonItem","providersBackstage","buildData","convertText","updated","segment","renderIcon$2","renderText","renderHtml","renderStyledText","renderShortcut","renderCheckmark","renderSubmenuCaret","renderDownwardsCaret","renderContainer","directionClass","alignClass","renderImage","alt","renderColorStructure","providerBackstage","colorPickerCommand","removeColorCommand","iconSvg","common","baseDom","renderItemDomStructure","ariaLabel","domTitle","renderNormalItemStructure","renderIcons","iconSpec","renderIcon","renderEmptyIcon","leftIcon","checkmark","textRender","renderItemStructure","tooltipBehaviour","tooltipText","tooltipWorker","_tooltip","encodeText","replaceText","matchText","translated","encoded","escapedMatchRegex","renderAutocompleteItem","useText","onItemValueHandler","tooltipString","_api","render$2","renderCardMenuItem","renderChoiceItem","isSelected","optTooltipping","parts$f","shorthandRegex","longformRegex","isHexString","fromString$1","getLongForm","extractValues","longForm","splitForm","isRgbaComponent","fromHsv","hsv","hue","saturation","brightness","side","chroma","fromHex","fireSkinLoaded$1","fireSkinLoadError$1","fireResizeEditor","fireResizeContent","fireScrollContent","fireTextColorChange","fireAfterProgressState","fireResolveName","fireToggleToolbarDrawer","fireStylesTextUpdate","fireAlignTextUpdate","fireFontSizeTextUpdate","fireFontSizeInputTextUpdate","fireBlocksTextUpdate","fireFontFamilyTextUpdate","fireToggleSidebar","fireToggleView","fireContextToolbarClose","fireContextFormSlideBack","composeUnbinders","onSetupEditableToggle","onSetupEvent","onSetupFormatToggle","boundFormatChangeCallback","onSetupStateToggle","unbindEditableToogle","unbindFormatToggle","handleEvent","onActionToggleFormat$1","rawItem","onActionExecCommand","global$4","cacheStorage","ColorCache","storageId","storageString","localstorage","list","getCacheForId","currentData","legacyDefault","getCurrentColors","addColor","hsvColour","fromRgb","minRGB","maxRGB","hexToHsv","hsvToHex","anyToHex","canvas","canvasContext","foregroundId","backgroundId","fallbackCols","mapColors","colorMap","mapColorsRaw","colors","option$1","fallbackColor","register$e","colorProcessor","colorProcessorRaw","colorColsProcessor","calcCols","defaultCols","getColors$2","calculatedCols","getColorCols$1","hasCustomColors$1","getDefaultForegroundColor","getDefaultBackgroundColor","defaultBackgroundColor","isValidBackgroundColor","getClosestCssBackgroundColorValue","getCurrentColor","cssRgbValue","getAdditionalColors","hasCustom","applyColor","onChoice","colorPickerDialog","colorOpt","getColors$1","getFetch$1","setIconColor","splitButtonApi","newColor","setTooltip","buttonApi","optCurrentHex","getToolTipText","lastColor","tooltipPrefix","colorText","registerTextColorButton","_splitButtonApi","registerTextColorMenuItem","onSubmit","initialData","register$d","fallbackColorForeground","fallbackColorBackground","lastForeColor","lastBackColor","createPartialChoiceMenu","alloyItems","createChoiceItems","itemPresets","deriveMenuMovement","menuMarkers","deriveCollectionMovement","renderColorSwatchItem","backstage","getColorItems","widgetSpec","useCustomColors","cellOverEvent","cellExecuteEvent","makeAnnouncementText","col","makeCell","emitCellOver","makeCells","getCellLabel","selectCells","selectedRow","selectedColumn","makeComponents","cellRow","makeLabelText","fancyMenuItems","emptyLabelText","memLabel","renderFancyMenuItem","renderNestedItem","downwardsCaret","underlinePath","translatedTooltip","renderNormalItem","renderSeparatorItem","renderToggleMenuItem","autocomplete","separator$3","normal","nested","fancy","card","CouplingApis","coupleConfig","coupleState","CouplingSchema","CouplingState","coupled","lookupCoupled","coupledName","getOrCreate","getExisting","Coupling","baseFn","nCallback","isReady","cbs","LazyValue","errorReporter","make$5","aFutureB","futureB","Future","partType$1","getAnchor","fetch","mapFetch","fetcher","openF","highlightOnOpen","futureData","getLazySink","getSink","tdata","listRole","onOpenSync","_onOpenSync","_highlightOnOpen","togglePopup","matchWidth","useMinWidth","buttonWidth","sinkDetail","internalSink","lazySinkFn","doRepositionMenus","makeSandbox$1","ariaControls","onOpen","onClose","repositionMenus","sandboxFields","schema$k","parts$e","factory$k","switchToMenu","togglePopup$1","dropdownComp","triggerExecute","Dropdown","identifyMenuLayout","searchMode","handleRefetchTrigger","originalSandboxComp","dropdown","optSearcherState","newSandboxComp","handleRedirectToMenuItem","getActiveMenuItemFrom","activeItem","getSearchResults","activeMenuComp","updateAriaOnHighlight","resultsElem","controlledId","updateAriaOnDehighlight","focusSearchField","searcherComp","getSearchPattern","FocusMode","createMenuItemFromBridge","isHorizontalMenu","parseForHorizontalMenu","menuitem","createAutocompleteItems","highlightOn","createPartialMenu","itemHasIcon","createItem","createTieredDataFrom","partialMenu","createInlineMenuFrom","focusMode","rangeToSimRange","Autocompleter","autocompleterId","processingAction","activeState","activeRange","isMenuOpen","hideIfNecessary","editorBody","ariaOwnsAttr","getMenu","getCombinedItems","choices","itemMeta","autocompleterApi","display","ld","updateDisplay","combinedItems","cloneAutocompleterToEditorDoc","autocompleterUiApi","DelayedFunction","ref","monitor","longpress$1","handleTouchstart","handleTouchmove","handleTouchend","isSame","isDangerous","rawSettings","tapEvent","simpleEvents","tapStopped","pasteTimeout","onPaste","onKeydown","onFocusIn","focusoutTimeout","onFocusOut","derive","rawTarget","fromSource","fromExternal","doTriggerHandler","handlerInfo","doTriggerOnUntilStopped","triggerHandler","broadcast","listeners","_logger","triggerUntilStopped","triggerOnUntilStopped","eventHandler","broadcastHandler","EventRegistry","registerId","findHandler","handlersById","_eventName","isAboveRoot","Registry","readOrTag","failOnDuplicate","tagId","conflict","Container","domWithoutAttributes","takeover","domEvents","_alloyId","getByUid","getByDom","addToWorld","removeFromWorld","broadcast$1","broadcastOn","broadcastEvent","broadcastData","receivers","receiver","renderBar","schema$j","parts$d","excludeFactory","factory$i","descriptor","descriptorId","FormField","global$3","renderFormFieldWith","pLabel","pField","extraClasses","extraBehaviours","renderFormFieldSpecWith","renderFormField","renderFormFieldDomWith","renderFormFieldDom","renderLabel$3","formChangeEvent","formInputEvent","formCloseEvent","formCancelEvent","formActionEvent","formSubmitEvent","formBlockEvent","formUnblockEvent","formTabChangeEvent","formResizeEvent","renderCollection","getIcon","runOnItem","disabledClass","htmlLines","itemText","iconContent","mapItemName","tgt","collectionEvents","currentActive","iterCollectionItems","childElm","ariaElements","isAriaElement","markValid","invalidConfig","notifyInfo","markInvalid","invalidState","_invalidState","validatorInfo","InvalidateApis","ActiveInvalidate","InvalidateSchema","Invalidating","ActiveUnselecting","Unselecting","renderPanelButton","colorInputChangeEvent","colorSwatchChangeEvent","colorPickerCancelEvent","renderColorInput","colorInputBackstage","emitSwatchChange","colorBit","memColorButton","valueOpt","colorButton","_field","labelPart","edgePart","det","tlEdgePart","tedgePart","trEdgePart","redgePart","brEdgePart","bedgePart","blEdgePart","ledgePart","thumbPart","isShift","spectrumPart","setValueFrom","spectrum","SliderParts","sliderChangeEvent","isTouchEvent$2","getEventSource","touchEvent","minX","minY","min1X","min1Y","max1X","max1Y","xRange","yRange","halfX","halfY","step","useMultiplier","snap","snapStart","rounded","hasEdge","edgeName","hasLEdge","hasREdge","hasTEdge","hasBEdge","xyValue","fireSliderChange$3","setToTLEdgeXY","setToTEdge","setToTEdgeXY","setToTREdgeXY","setToREdge","setToREdgeXY","setToBREdgeXY","setToBEdge","setToBEdgeXY","setToBLEdgeXY","setToLEdge","setToLEdgeXY","reduceBy","increaseBy","capValue","snapValueOf","extraValue","remainder","adjustment","rawSteps","maxSteps","numSteps","findOffsetOf","findValueOf","hasMinEdge","hasMaxEdge","minBound","maxBound","screenRange","capMin","capMax","findOffsetOfValue$2","maxOffset","centerMinEdge","centerMaxEdge","getBoundsProperty","getMinXBounds","getMaxXBounds","getMinYBounds","getMaxYBounds","getXScreenRange","getYScreenRange","getCenterOffsetOf","componentMinEdge","componentMaxEdge","spectrumMinEdge","getXCenterOffSetOf","componentBounds","spectrumBounds","getYCenterOffSetOf","fireSliderChange$2","findValueOfOffset$1","setValueFrom$2","xValue","setToMin$2","setToMax$2","moveBy$2","handleMovement$2","getValueFromEvent$2","findOffsetOfValue$1","minEdge","maxEdge","findPositionOfValue$1","slider","setPositionFromValue$2","thumb","edges","thumbRadius","onLeft$2","onRight$2","onUp$2","onDown$2","edgeActions$2","HorizontalModel","fireSliderChange$1","findValueOfOffset","setValueFrom$1","yValue","setToMin$1","setToMax$1","moveBy$1","handleMovement$1","getValueFromEvent$1","findOffsetOfValue","findPositionOfValue","setPositionFromValue$1","onLeft$1","onRight$1","onUp$1","onDown$1","edgeActions$1","VerticalModel","fireSliderChange","sliderValue","moveBy","isVerticalMovement","handleMovement","setToMin","mX","mY","setToMax","getValueFromEvent","setPositionFromValue","xPos","yPos","thumbXRadius","thumbYRadius","onUp","onDown","edgeActions","TwoDModel","SliderSchema","Slider","getThumb","getSpectrum","getLeftEdge","getRightEdge","getTopEdge","getBottomEdge","modelDetail","changeValue","resetToMin","resetToMax","fireOnChoose","wasDown","onDragStart","onDragEnd","getInitial","fieldsUpdate","sliderUpdate","paletteUpdate","sliderFactory","translate","getClass","_thumb","schema$i","getPartName$1","sketch$1","fSpec","fieldParts","make$4","toResult","resPs","resPThunk","pName","Form","validInput","invalidInput","validatingInput","translatePrefix","uninitiatedTooltipApi","rgbFormFactory","onValidHexx","onInvalidHexx","tooltipGetConfig","makeIcon","setTooltipEnabled","tooltipApi","invalidation","renderTextField","description","helptext","errorId","memInvalidIcon","memStatus","comps","concats","copyRgbToHex","hexField","copyRgbToForm","rgb","memPreview","updatePreview","copyHexToRgb","setValueRgb","getValueRgb","onInvalidInput","onValidHex","onValidRgb","isHexInputEvent","onValidInput","formPartStrings","redStrings","greenStrings","blueStrings","hexStrings","paletteFactory","setColour","grdWhite","grdBlack","setPaletteHue","setPaletteThumb","_detail","getInitialValue","onChange","onInit","_slider","sliderBehaviours","_apis","makeFactory","rgbForm","sbPalette","hueSliderToDegrees","hueDegreesToSlider","memSlider","memPalette","memRgb","updatePalette","_hex","palette","updateFields","updateSlider","updatePaletteThumb","updateState","runUpdates","updates","onPaletteUpdate","oldHue","newHsv","newHex","onSliderUpdate","oldRgb","oldHsv","onFieldsUpdate","ComposingConfigs","mem","processors","memento","rawProcessors","other","withComp","optInitialValue","getter","setter","initialValue","domHtml","memory","english","translate$1","renderColorPicker","errId","colourPickerFactory","onInvalidHex","memPicker","picker","valOpt","global$2","isOldCustomEditor","renderCustomEditor","editorApi","memReplaced","focusBehaviour","onFocusFn","ta","ea","cvalue","global$1","browseFilesEvent","filterByExtension","allowedImageFileTypes","isFileInAllowedTypes","renderDropZone","actions","onDrop","transferEvent","onSelect","handleFiles","memInput","renderGrid","adaptable","newArgs","tempArgs","beforeObject","afterObject","craftWithClasses","craft","containerClasses","triggerTab","onFocus","targetComp","isPseudoStop","dialogChannel","titleChannel","bodyChannel","footerChannel","bodySendMessageChannel","dialogFocusShiftedChannel","isSafariOrFirefox","isChromium","isElementScrollAtBottom","scrollHeight","scrollToY","getScrollingElement","writeValue","iframeElement","fallbackFn","lastScrollTop","isScrollAtBottom","scrollAfterWrite","writeValueThrottler","interval","getDynamicSource","stream","cachedValue","_frameComponent","frameComponent","setSrcdocValue","throttler","renderIFrame","baseClass","opaqueClass","containerBorderedClass","sourcing","calculateImagePosition","imageWidth","imageHeight","zoom","zoomToFit","panel","panelW","panelH","renderImagePreview","cachedData","memImage","memContainer","translatedData","z","applyFramePositioning","cachedWidth","cachedHeight","imageComponent","fakeValidatedData","renderLabel$2","backstageShared","getCompByName","centerClass","endClass","labelComp","internalToolbarButtonExecute","onToolbarButtonExecute","itemApi","commonButtonDisplayEvent","toolbarButtonEventOrder","forceInitialSize","renderIcon$1","iconsProvider","renderIconFromPack$1","renderReplaceableIconFromPack","renderLabel$1","updateMenuText","updateMenuIcon","renderCommonDropdown","btnName","optMemDisplayText","optMemDisplayIcon","onLeftOrRightInMenu","ariaLabelAttribute","fixWidthBehaviourName","customEventsName","displayText","displayIcon","itemCompCausingCollapse","nowActiveMenuComp","isMenuItemReference","isSeparator$2","isExpandingMenuItem","separator$2","unwrapReferences","realItems","getFromExpandingItem","submenuItems","newMenus","newExpansions","generateValueIfRequired","itemWithValue","newData","getSearchModeForField","searchSettings","getSearchModeForResults","mainMenuSearchMode","mainMenu","submenuSearchMode","submenus","isSingleListItem","dataAttribute","fetchItems","hasNestedItems","findItemByValue","renderListBox","initialItem","sketchSpec","listBoxWrap","renderPanel","factory$h","initialValues","firstOption","HtmlSelect","renderSelectBox","translatedOptions","chevron","selectWrap","schema$h","getField","coupledPart","selfName","otherName","lock","parts$c","factory$g","FormCoupledInputs","formatSize","unitDec","maxDecimal","numText","parseSize","sizeText","convertUnit","inInch","supported","noSizeConversion","_input","ratioSizeConversion","scale","makeRatioConverter","currentFieldText","otherFieldText","cValue","oValue","cSize","oSize","renderSizeInput","converter","ratioEvent","toggleOnReceive$1","translatedLabel","pLock","formGroup","getFieldPart","isField1","getLabel","widthField","heightField","_lock","newSize","optCurrent","optOther","value1","value2","renderSlider","renderTable","renderTh","renderHeader","header","renderTd","renderTr","renderRows","baseInputBehaviours","validatingBehaviours","vl","inputMode","inputAttributes","pTextField","extraClasses2","renderInput","renderTextarea","getAnimationRoot","slideConfig","getDimensionProperty","getDimension","disableTransitions","setShrunk","setGrown","doImmediateShrink","slideState","_calculatedSize","doStartShrink","calculatedSize","doStartSmartShrink","doStartGrow","wasShrinking","beforeSize","fullSize","refresh$3","grow","shrink","immediateShrink","hasGrown","hasShrunk","isGrowing","_slideState","isShrinking","SlidingApis","ActiveSliding","SlidingSchema","SlidingState","Sliding","getMenuButtonApi","renderMenuButton","tabstopping","fetchContext","getFetch","getButton","getMenuItemAction","getMenuItemSetup","renderLabel","renderCustomStateIcon","leafLabelEventsId","renderLeafLabel","onLeafAction","treeId","selectedId","internalMenuButton","btn","button","isLeftArrowKey","isRightArrowKey","dirComp","dirLabelElement","extraAttributes","renderIconFromPack","directoryLabelEventsId","renderDirectoryLabel","noChildren","toggleExpandChildren","directoryEle","directoryComp","willExpand","parentDirElement","parentDirLabelElement","renderDirectoryChildren","expandedIds","renderDirectory","directoryEventsId","labelTabstopping","expandedIdsCell","computedChildrenComponents","childrenVisible","_cmp","childrenComp","treeEventsId","renderTree","onToggleExpand","defaultExpandedIds","selectedIdCell","ActiveStreaming","streamConfig","streamState","throttle","_config","StreamingState","streamInfo","sInfo","StreamingSchema","Streaming","setValueFromItem","itemData","setCursorAtEnd","setSelectionOn","setSelectionToEnd","attemptSelectOver","inputDisplay","itemExecute","make$3","navigateList","highlighter","focusBehaviours$1","getActiveMenu","typeaheadCustomEvents","previousValue","pv","sandboxIsOpen","typeaheadComp","_typeaheadComp","typeahead","schema$g","parts$b","_tmenu","selectOverTextInInput","_menu","Typeahead","resA","whenError","whenValue","errorThunk","timedOut","FutureResult","future","promise","renderCommonSpec","actionOpt","domFinal","renderIconButtonSpec","tooltipAttributes","calculateClassesFromButtonType","buttonType","renderButtonSpec","translatedText","optTooltip","renderButton$1","buttonSpec","isMenuFooterButtonSpec","isNormalFooterButtonSpec","isToggleButtonSpec","renderToggleButton","providers","optMemIcon","memIcon","newIcon","buttonTypeClasses","showIconAndText","translatedTextComponed","iconButtonSpec","renderFooterButton","menuButtonSpec","fixedSpec","renderDialogButton","separator$1","toMenuItem","staticMenuItem","toMenuItems","filterLinkTargets","filteredTargets","headerTargets","linkInfo","anchorTargets","anchorTargetTop","anchorTargetBottom","historyTargets","history","joinMenuLists","filterByQuery","term","lowerCaseTerm","getItems","fileType","urlBackstage","urlInputValue","renderUrlInput","updateHistory","urlEntry","typeaheadSpec","memUrlBox","_newValue","invalidComp","validation","trimmedValue","_entry","optUrlPicker","browseUrlEvent","memUrlPickerButton","controlHWrapper","openUrlPicker","componentData","urlData","chosenData","renderAlertBanner","renderCheckbox","toggleCheckboxHandler","memIcons","renderHtmlPanel","make$2","dialogData","makeIframe","iframeSpec","factories","noFormParts","interpretInForm","oldBackstage","newBackstage","interpretParts","interpretWithoutForm","westEdgeX","middleX","eastEdgeX","northY","southY","centreY","lookupPreserveLayout","lookupFlippedLayout","bubbleAlignments$2","getInlineDialogAnchor","contentAreaElement","lazyAnchorbar","lazyUseEditableAreaAnchor","editableAreaAnchor","standardAnchor","getInlineBottomDialogAnchor","lazyBottomAnchorBar","getBannerAnchor","getCursorAnchor","bodyElement","selectionTableCellRange","getNodeAnchor$1","getAnchors","isToolbarTop","useFixedToolbarContainer","colorPicker","hasCustomColors","getColors","getColorCols","ColorInputBackstage","isDraggableModal","DialogBackstage","HeaderBackstage","isNestedFormat","isFormatReference","defaultStyleFormats","isNestedFormats","mapFormats","userFormats","formatNameWithPrefix","registerCustomFormats","registerFormats","customFormats","getStyleFormats","registeredUserFormats","isSeparator$1","processBasic","isSelectedFor","getPreviewFor","register$b","enrichSupported","enrichMenu","newItems","doEnrich","enrichCustom","newItem","init$6","settingsFormats","eventsFormats","replaceSettings","enriched","modifications","fromSettings","fromEvents","TooltipsBackstage","numActiveTooltips","alreadyShowingTooltips","getComponents","isChildOfContentEditableTrue","getElementText","getOrGenerateId","isAnchor","isValidAnchor","isHeader","isValidHeader","getLevel","headerTarget","headerId","anchorTarget","anchorId","anchorText","getHeaderTargets","getAnchorTargets","getTargetElements","hasTitle","LinkTargets","STORAGE_KEY","HISTORY_LENGTH","isHttpUrl","isArrayOfUrl","isRecordOfUrlArray","getAllHistory","unparsedHistory","setAllHistory","getHistory","addToHistory","itemsWithoutUrl","isTruthy","getPicker","getPickerTypes","optFileTypes","_picker","types","getPickerSetting","filetype","pickerTypes","getUrlPicker","getTextSetting","getLinkInformation","getValidationHandler","UrlInputBackstage","init$5","lazySinks","contextMenuState","specContext","enabledInContext","urlinput","colorinput","dialogSettings","isContextMenuOpen","setContextMenuState","commonBackstage","popupBackstage","dialogBackstage","mothership","uiMotherships","channel","fireDismissPopups","onTouchstart","onTouchmove","onTouchend","onMousedown","onMouseup","onContentClick","onContentMouseup","onContentMousedown","loopEditor","onWindowScroll","onWindowResize","onElementScroll","onEditorResize","onEditorProgress","onDismissPopups","gui","parts$a","partType","schema$f","itemsPart","parts$9","factory$f","_external","setItems","getListContainer","itemComps","numListsRequired","numListsToAdd","itemsToAdd","itemsToRemove","builtLists","CustomList","schema$e","parts$8","factory$e","setGroups","groups","getGroupContainer","Toolbar","isDocked$1","getBehaviours$1","StaticHeader","toolbarHeightChange","visibility","editorStickyOnClass","editorStickyOffClass","scrollFromBehindHeader","containerHeader","scrollPos","markerElement","markerPos","markerHeight","editorHeaderPos","editorHeaderHeight","editorHeaderTop","editorHeaderBottom","editorHeaderDockedAtTop","editorHeaderDockedAtBottom","isDockedMode","updateIframeContentFlow","getOccupiedHeight","parentElem","padding","parentWidth","updateSinkVisibility","sinkElem","updateEditorClasses","editorContainer","restoreFocus","headerElem","focusedElem","activeElm","findFocusedElem","lazyHeader","getIframeBehaviours","getBehaviours","focusedElm","runOnSinkElement","onDockingSwitch","additionalBehaviours","headerHeight","boxHeight","topBound","constrainedBounds","constrainedBoundsY","boundsWithoutOffset","StickyHeader","groupToolbarButtonSchema","createGroupToolbarButton","baseMenuButtonFields","MenuButtonSchema","createMenuButton","splitButtonSchema","createSplitButton","SilverMenubar","setMenus","activeButton","hoveredButton","activeComp","hoveredComp","promotionMessage","promotionLink","renderPromotion","schema$d","getPartName","sSpec","make$1","getSlotNames","getSlot","onSlot","def","slot","onSlots","doShowing","doShow","doHide","isShowing","hideSlot","hideSlots","hideAllSlots","showSlot","SlotContainer","sidebarSchema","createSidebar","handleToggle","makePanels","panelConfigs","bridged","sidepanel","sidePanelSpec","makeSidebar","slotContainer","setSidebar","sidebar","showSidebar","configKey","updateSidebarRoleOnToggle","sidebarState","toggleSidebar","whichSidebar","fixSize","autoSize","renderSidebar","BlockingApis","getBusySpec","blockerBehaviours","blockSpec","blocker","blockingConfig","blockingState","BlockingSchema","BlockingState","blockWith","Blocking","getBusySpec$1","_root","_behaviours","focusBusyComponent","throbber","toggleEditorTabIndex","tabIndexAttr","dataTabIndexAttr","tabIndex","toggleThrobber","throbberFocus","busyComp","renderThrobber","isFocusEvent","isPasteBinTarget","lazyThrobber","throbberState","stealFocus","within","withinWidth","apportion","total","parray","toUnit","fitLast","overflow","overflower","fitAll","tryFit","divide","setGroups$1","storedGroups","bGroups","findFocusedComp","refresh$2","setOverflow","builtGroups","overflowGroup","focusedComp","availableWidth","overflows","schema$c","schema$b","parts$7","expandable","schema$a","parts$6","shouldSkipFocus","toggleWithoutFocusing","toolbarSandbox","bounder","makeSandbox","FloatingToolbarButton","schema$9","parts$5","factory$b","ToolbarGroup","buildGroups","refresh$1","memFloatingToolbarButton","overflowGroups","floatingToolbarButton","factory$a","SplitFloatingToolbar","schema$8","parts$4","isOpen","toggleToolbar","oveflowButton","overf","factory$9","toolbarToggleEvent","doSetGroups","_button","SplitSlidingToolbar","renderToolbarGroupCommon","renderToolbarGroup","getToolbarBehaviours","toolbarSpec","modeName","onAttached","renderMoreToolbarCommon","renderFloatingMoreToolbar","baseSpec","overflowXOffset","headerBounds","docBounds","renderSlidingMoreToolbar","renderToolbar","baseButtonFields","normalButtonFields","toggleButtonFields","schemaWithoutGroupButton","groupFields","viewButtonSchema","viewSchema","createView","renderButton","isToggleButton","setIcon","setActive","optTranslatedText","optTranslatedTextComponed","ariaLabelAttributes","optIconSpec","hasIconAndText","renderViewButton","renderButtonsGroup","renderViewHeader","hasGroups","endButtons","btnspec","renderViewPane","factory$8","_comp","View","makeViews","viewConfigs","internalViewConfig","makeSlotContainer","getCurrentName","hideContainer","showContainer","makeViewInstanceApi","runOnPaneWithInstanceApi","view","pane","runOnShow","runOnHide","ViewWrapper","showMainView","hideMainView","optCurrentSlotName","isTogglingCurrentView","editorCont","factory$6","toolbarDrawerOpenState","toggleStatusbar","statusBar","renderedGroups","mToolbar","renderedToolbars","menubar","partMenubar","toolbarFactory","partMultipleToolbar","_mToolbar","tc","partToolbar","renderer","partHeader","partPromotion","partSocket","partSidebar","partThrobber","partViewWrapper","renderEditorContainer","partEditorContainer","OuterContainer","defaultMenubar","defaultMenus","removedMenuItems","removedMenuItem","parseItemsString","identifyMenus","rawMenuData","userDefinedMenus","validMenus","isDefaultMenu","menuData","isNotSeparator","fireSkinLoaded","fireSkinLoadError","getSkinResourceIdentifier","loadStylesheet","stylesheetUrl","skinIdentifierToResourceKey","identifier","getResourceValue","resourceKey","determineCSSDecision","filenameBase","resourceValue","loadUiSkins","loader","loadShadowDomUiSkins","loadUiContentCSS","loadUrlSkin","loadSkin","makeTooltipText","labelWithPlaceholder","generateSelectItems","generateItem","response","invalid","si","validateItems","preItems","getStyleItems","createMenuItems","createSelectButton","getTooltip","textUpdateEventName","rawFormats","buildBasicStaticDataset","Delimiter","delimiter","buildBasicSettingsDataset","settingName","menuTitle$4","getTooltipPlaceholder$4","fallbackAlignment","alignMenuItems","getSpec$4","getMatchingValue","updateSelectMenuIcon","alignment","createAlignButton","createAlignMenu","findNearest","menuTitle$3","getTooltipPlaceholder$3","fallbackFormat","getSpec$3","updateSelectMenuText","createBlocksButton","createBlocksMenu","menuTitle$2","getTooltipPlaceholder$2","systemFont","systemStackFonts","splitFonts","matchesStack","stack","isSystemFontStack","userStack","getSpec$2","getFirstFont","getCurrentValue","matchOpt","createFontFamilyButton","createFontFamilyMenu","decimalDigits","exponentPart","dot","float","isUnit","accepted","check","unitRaw","normalise","Keys","createBespokeNumberInput","currentComp","getValueFromCurrentComp","alloyComp","customEvents","fromInput","focusBack","lenghtDelta","oldStart","oldEnd","decrease","increase","goToParent","focusInput","makeStepperButton","editorOffCellStepButton","altExecuting","memMinus","memPlus","buttonNode","wrapperComp","menuTitle$1","getTooltipPlaceholder$1","fallbackFontSize","legacyFontSizes","keywordFontSizes","precision","factor","toPt","toLegacy","getSpec$1","pt","legacy","createFontSizeButton","getConfigFromUnit","baseConfig","isValidValue","getNumberInputSpec","updateFunction","parsedText","defaultUnit","createFontSizeInputButton","createFontSizeMenu","menuTitle","getTooltipPlaceholder","getSpec","getFormatItems","flattenedItems","createStylesButton","createStylesMenu","schema$7","arrowPart","arrow","buttonPart","splitDropdown","parts$3","factory$5","openMenu","executeOnButton","buttonEvents","SplitDropdown","getButtonApi","getToggleApi","getTooltipAttributes","focusButtonEvent","renderCommonStructure","optIcon","optText","renderFloatingToolbarButton","identifyButtons","specialisation","renderCommonToolbarButton","renderToolbarButton","renderToolbarButtonWith","bonusEvents","renderToolbarToggleButton","renderToolbarToggleButtonWith","fetchChoices","renderSplitButton","buttonComp","defaultToolbar","renderFromBridge","bridgeBuilder","extractFrom","bespokeButtons","removeUnusedDefaults","filteredItemGroups","subItem","convertStringToolbar","strToolbar","groupsStrings","isToolbarGroupSettingArray","createToolbar","toolbarConfig","lookupButton","toolbarItem","allowToolbarGroups","prefixes","toolbarGroups","setToolbar","rawUiConfig","toolbarButtonsConfig","detection","isiOS12","setupEvents$1","contentWindow","initialDocEle","lastWindowDimensions","lastDocumentDimensions","resizeWindow","resizeDocument","docEle","elementLoad","attachUiMotherships","uiRoot","Iframe","mainUi","lastToolbarWidth","eTargetNode","socket","limit","unbinder","toolbarMode","refreshDrawer","parseToInt","numToPx","calcCappedSize","minSize","maxSize","minOverride","maxOverride","getHeight","baseHeight","minHeight","getHeightWithFallback","baseWidth","minWidth","getWidthWithFallback","maximumDistanceToEdge","InlineHeader","floatContainer","isSticky","editorMaxWidthOpt","headerBackstage","isPositionedAtTop","minimumToolbarWidth","isSplitToolbar","calcToolbarOffset","tbar","calcMode","toolbarHeight","targetBounds","docHeight","setupMode","verticalDir","updateChromeWidth","updateChromePosition","isOuterContainerWidthRestored","prevScroll","getOffsetParent$1","getLeft","getTop","topValue","widthProperties","toolbarWidth","baseProperties","repositionPopups$1","restoreOuterContainerWidth","stickyAction","currentScroll","optScroll","doUpdateMode","fc","currentMode","getTargetPosAndBounds","setupEvents","toolbarPersist","prevPosAndBounds","resizeContent","prevBounds","hasResized","lastScrollX","updateUi","newScrollX","_args","Inline","uiContainer","LazyUiReferences","dialogUi","popupUi","optDialogMothership","optPopupMothership","dm","pm","showContextToolbarEvent","hideContextToolbarEvent","contextFormInputSelector","contextbar","focusParent","forwardSlideEvent","backSlideEvent","changeSlideEvent","resizingClass","renderContextToolbar","currentWidth","newWidth","oldContents","getFormApi","focusfallbackElement","valueState","runOnExecute","formApi","renderContextButton","renderContextToggleButton","generateOne","generate","mementos","compInSystem","renderContextFormSizeInput","onEnter","focussableWrapper","focusableWrapper","focussableInput","controlLifecycleHandlers","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","scopes","ancestorElem","contextForms","rootElem","isOutsideRoot","categorise","forms","inNodeScope","inEditorScope","formNavigators","lookupTable","registerForm","contextForm","launch","registerToolbar","transitionClass","register$a","registryContextToolbars","lastTrigger","lastContextPosition","canLaunchToolbar","isSameLaunchElement","shouldContextToolbarHide","contextToolbarBounds","anchorBounds","hideOrRepositionIfNecessary","contextBarEle","wrapInPopDialog","getScopes","alloySpec","buildToolbar","buildContextToolbarGroups","allButtons","buildContextFormGroups","initGroups","anchorLayout","launchContext","launchContextToolbar","isDragging","register$9","registerController","getMenuItems","oldApi","unbindWatcher","lineHeightSpec","languageSpec","customCode","register$8","onSetupOutdentState","registerButtons$2","makeSetupHandler","pastePlainTextToggleHandler","onActionToggleFormat","registerFormatButtons","_idx","registerCommandButtons","registerCommandToggleButtons","registerButtons$1","registerMenuItems$2","onSetupUndoRedoState","registerMenuItems$1","registerButtons","onSetupVisualAidState","registerMenuItems","registerToolbarButton","patchPipeConfig","shouldNeverUseNative","getAvoidOverlapSelector","isContextMenuDisabled","getContextMenu","contextMenu","dx","dy","isTouchEvent$1","fromPageXY","fromClientXY","transposeContentAreaContainer","containerPos","getPointAnchor","getSelectionAnchor","getNodeAnchor","getAnchorSpec$1","anchorType","initAndShow$1","buildMenu","contextmenu","anchorSpec","bubbleSize","bubbleAlignments","isTouchWithinSelection","rngRect","setupiOSOverrides","originalSelection","selectionReset","unbindEventListeners","preventMousedown","clearSelectionReset","getAnchorSpec","highlightImmediately","initAndShow","isMacOS","isAndroid","shouldHighlightImmediately","openiOS","separator","makeContextItem","commonMenuItem","commonItem","addContextMenuGroup","groupItems","generateContextMenu","allItems","isNativeOverrideKeyEvent","isTriggeredByKeyboard","getSelectedElement","getAnchorType","hideContextMenu","showContextMenu","hideEvents","subtract","asFixed","coord","asAbsolute","asOffset","withinRange","coord1","coord2","getDeltas","toStyles","stylesOpt","absorb","partialCoord","originalCoord","absorbOne","stencil","optX","optY","parseAttrToInt","snapsInfo","getCoords","snapInfo","moveOrSnap","newCoord","findClosestSnap","findSnap","fixedCoord","spanned","stopDrag","findMatchingSnap","snaps","sensor","deltas","bestDeltas","currAvg","bestAvg","snapTo$1","DraggingApis","dragConfig","snapPin","initialAttribute","resetZIndex","zIndex","changeZIndex","zindex","instigate","anyComponent","discard","createComponent","blockerClass","blockerEvents","SnapSchema","schema$6","getCurrentCoord","clampCoords","coords","absoluteCoord","newCoords","offset$1","calcNewCoord","optSnaps","currentCoord","snapping","dragBy","calcStartData","dragState","dragMode","dragStartData","dlt","updateStartState","init$3","dragApi","MouseData","events$3","stop$1","delayDrop","schema$5","getDataFrom","touches","TouchData","events$2","blockerSingleton","stopBlocking","schema$4","events$1","schema$3","DraggingBranches","DragState","calculateDelta","dragEvent","nuData","setStartData","getStartData","Dragging","snapWidth","snapOffset","calcSnap","selectorOpt","selectorHandle","sensorLeft","sensorTop","sensorWidth","sensorHeight","getSnapsConfig","getSnapPoints","isSameCell","cellOpt","currentTd","createSelector","tlTds","brTds","finishCell","getTopLeftSnap","memTopLeft","getTopLeftSnaps","getBottomRightSnap","memBottomRight","getBottomRightSnaps","topLeftSnaps","bottomRightSnaps","bottomRight","showOrHideHandle","cellRect","viewportHeight","aboveViewport","belowViewport","snapTo","getSnapConfig","snapTopLeft","snapLastTopLeft","snapBottomRight","snapLastBottomRight","domToSugar","otherCells","Logo","describedBy","describedElement","describeElement","describeId","renderElementPath","renderElement","_btn","renderDivider","renderPathData","updatePath","newPath","ResizeTypes","getDimensions","resizeType","originalHeight","originalWidth","resize","dim","getResizeType","keyboardHandler","renderResizeHandler","resizeLabel","_target","renderWordCount","replaceCountText","currentVal","renderStatusbar","renderBranding","renderHelpAccessibility","shortcutText","renderRightContainer","getTextComponents","shouldRenderHelp","shouldRenderElementPath","shouldRenderRightContainer","getTextComponentClasses","flexStart","flexEnd","spaceAround","container3Columns","resizeHandler","getLazyMothership","setupForTheme","lazyUiRefs","lazyMothership","lazyDialogMothership","lazyPopupMothership","deviceClasses","isToolbarBottom","memAnchorBar","memBottomAnchorBar","lazyDialogSinkResult","lazyPopupSinkResult","lazyAnchorBar","lazyToolbar","backstages","makeHeaderPart","verticalDirAttributes","hasMultipleToolbar","hasToolbar","hasMenubar","shouldHavePromotion","makePromotion","hasAnyContents","getPartToolbar","menubarCollection","makeSidebarDefinition","renderDialogUi","isGridUiContainer","sinkSpec","reactiveWidthSpec","renderPopupUi","renderMainUi","sidebarContainer","statusbar","editorComponents","setEditorSize","parsedHeight","parsedWidth","setupShortcutsAndCommands","renderUIWithRefs","toolbarGroupButtonConfig","toolbarOpt","reuseDialogUiForPopuUi","renderUI","labelledBy","labelledElement","labelElement","labelId","schema$2","basic","parts$2","factory$4","dialogComp","showDialog","externalBlocker","hideDialog","blockerDom","getDialogBody","getDialogFooter","setBusy","setIdle","modalEventsId","titleElm","ModalDialog","dialogToggleMenuItemSchema","dialogToggleMenuItemDataProcessor","baseFooterButtonFields","dialogFooterButtonFields","normalFooterButtonFields","menuFooterButtonFields","toggleButtonSpecFields","dialogFooterButtonSchema","alertBannerFields","alertBannerSchema","createBarFields","itemsField","buttonFields","buttonSchema","formComponentFields","formComponentWithLabelFields","checkboxFields","checkboxSchema","checkboxDataProcessor","collectionFields","collectionSchema","collectionDataProcessor","colorInputFields","colorInputSchema","colorInputDataProcessor","colorPickerSchema","colorPickerDataProcessor","customEditorFields","customEditorFieldsOld","customEditorSchema","customEditorDataProcessor","dropZoneFields","dropZoneSchema","dropZoneDataProcessor","createGridFields","htmlPanelFields","htmlPanelSchema","iframeFields","iframeSchema","iframeDataProcessor","imagePreviewSchema","imagePreviewDataProcessor","inputFields","inputSchema","inputDataProcessor","createLabelFields","listBoxSingleItemFields","listBoxNestedItemFields","listBoxItemSchema","listBoxFields","listBoxSchema","listBoxDataProcessor","selectBoxFields","selectBoxSchema","selectBoxDataProcessor","sizeInputFields","sizeInputSchema","sizeInputDataProcessor","sliderFields","sliderSchema","sliderInputDataProcessor","tableFields","tableSchema","textAreaFields","textAreaSchema","textAreaDataProcessor","baseTreeItemFields","treeItemLeafSchema","treeItemDirectoryFields","treeItemDirectorySchema","treeItemSchema","treeFields","treeSchema","urlInputFields","urlInputSchema","urlInputDataProcessor","createItemsField","itemSchema","sErr","passValue","panelSchema","panelFields","tabFields","tabPanelFields","tabPanelSchema","dialogButtonFields","dialogButtonSchema","dialogSchema","createDialog","urlDialogButtonSchema","urlDialogSchema","createUrlDialog","getAllObjects","isNamedItem","dataProcessors","getDataProcessor","getNamedItems","createDataValidator","namedItems","internalDialog","dataValidator","DialogManager","ActiveReflecting","reflectingConfig","reflectingState","renderComponents","newComponents","rawData","ReflectingApis","reflectState","ReflectingSchema","ReflectingState","Reflecting","toValidValues","renderBodyPanel","memForm","formValue","factory$3","TabButton","schema$1","tabsPart","barDetail","dismissTab$1","tabbar","changeTab$1","parts$1","factory$2","tab","Tabbar","factory$1","Tabview","barPart","viewPart","tabValue","tabview","tabData","changeTabBy","section","byPred","tabKey","TabSection","measureHeights","allTabs","tabviewComp","_tab","getMaxHeight","heights","getMaxTabviewHeight","tablist","documentElement$1","isFixed","tabviewHeight","currentTabHeight","dialogTopMargin","dialogBottomMargin","chromeHeight","showTab","setTabviewHeight","updateTabviewHeight","dialogBody","maxTabHeight","getTabview","smartMode","oldHeight","newHeight","SendDataToSectionChannel","SendDataToViewChannel","renderTabPanel","storedValue","updateDataWithForm","validData","setDataOnForm","oldTab","tabMode","_viewItems","tsection","renderBody","dialogId","contentId","ariaAttrs","incoming","ariaAttributes","renderInlineBody","renderModalBody","bodySpec","renderIframeBody","hiddenHeader","pClose","pUntitled","pBodyMessage","pFooter","pFooterGroup","startButtons","renderDialog$1","dialogClass","blockerBackdropClass","scrollLockClass","renderClose","renderTitle","titleId","renderDragHandle","renderInlineHeader","renderModalHeader","pTitle","pHandle","getHeader","bs","getEventExtras","lazyDialog","blockEvent","fullscreenClass","largeDialogClass","mediumDialogClass","getDialogSizeClass","updateDialogSizeClass","dialogSizeClass","toggleFullscreen","currentSize","currentSizeClass","renderModalDialog","dialogEvents","mapMenuButtons","menuItemStates","mapItems","extractCellsToObject","innerAcc","initCommonEvents","fireApiEvent","_event","initUrlDialog","getInstanceApi","withSpec","currentDialog","initDialog","currentDialogInit","makeButton","footerButtons","buttonName","buttonGroups","makeGroup","renderFooter","initSpec","lookupByName","renderInlineFooter","renderModalFooter","access","validateData$1","dialogState","getDialogApi","doRedial","withRoot","instanceApi","valueComp","representedValues","menuItemCurrentState","prevData","mergedData","newInternalData","tabSection","dialogInit","storedMenuButtons","renderDialog","dialogSize","getCompByName$1","modalAccess","dialogSizeClasses","objOfCells","footer","getForm","outerForm","toggleFullscreen$1","renderInlineDialog","refreshDocking","dialogLabelId","dialogContentId","memHeader","memBody","storagedMenuButtons","optMemFooter","inlineClass","memFooter","global","getUrlDialogApi","SUPPORTED_MESSAGE_ACTIONS","isSupportedMessage","isCustomMessage","handleMessage","renderUrlDialog","iframeUri","iframeDomain","messageHandlerUnbinder","iframeEle","iframeWin","alertDialog","memFooterClose","titleSpec","closeSpec","footerCloseButton","confirmDialog","memFooterYes","footerNo","footerYesButton","validateData","isAlertOrConfirmDialog","inlineAdditionalBehaviours","isStickyToolbar$1","closeWindow","openInlineDialog","openBottomInlineDialog","openModalDialog","openModalUrlDialog","internalInitialData","config$1","windowParams","inlineDialog","inlineDialogComp","getInlineDialogBounds","optScrollingContext","registerOptions","popupSinkBounds","renderModeUI","renderResult","windowMgr","getNotificationManagerImpl","children$2","after$5","copy$2","cloneChildren","mutate$1","validSectionList","isValidSection","grid","column","detailnew","isNew","extended","isLocked","rowdetail","rowdetailnew","elementnew","rowcells","finishRow","finishCol","columnext","colgroup","body$1","getBody$1","ancestors$4","ancestors$3","bindFrom","getRaw$2","copy$1","sourceDom","targetDom","getAttrValue","hasColspan","cellOrCol","hasRowspan","getCssValue","cells$1","columns$1","columnGroups","columnGroup","rows$1","fromRowsOrColGroups","getParentSection","fromTable$1","fromPastedRows","detect$5","detect$2","toNumber","px","calcContentBoxSize","upper","lower","paddingUpper","paddingLower","borderUpper","borderLower","getCalculatedWidth","boxSizing","getHeight$1","getInnerWidth","getInner","getRuntime$1","addCells","gridRow","existingCells","newCells","setCells","addCell","mutateCell","mapCells","getCell","getCellElement","cellLength","extractGridDetails","cloneRow","cloneCell","LOCKED_COL_ATTR","getLockedColumnsFromTable","lockedColStr","lockedCols","getLockedColumnsFromGrid","locked","lockedArr","getAt","warehouse","findItem","filterItems","generateColumns","rowData","columnsGroup","lockedColumns","maxRows","maxColumns","rowCount","colgroupRows","currentRow","rowCell","occupiedColumnPosition","occupiedRowPosition","rowPosition","columnPosition","newpos","colgroups","Warehouse","isValidCell","cols","rowsArr","decide","getBlock","getFallback","deduce","aa","getRuntime","rowInfo","colInfo","rtlEdge","ltrEdge","getTop$1","findPositions","getInnerEdge","getOuterEdge","cellOption","lastLine","negate","optElements","rPercentageBasedSizeRegex","rPixelBasedSizeRegex","isCol$2","isRow$2","getPercentSize","outerGetter","innerGetter","relativeParent","setPixelWidth","setPercentageWidth","removeHeight","getHeightValue","normalizePixelSize","getTotalHeight","getRawWidth$1","getRawHeight$1","getPercentageWidth","getPixelWidth$1","getGenericWidth","setGenericWidth","getPixelTableWidth","getPixelTableHeight","getPercentTableWidth","isPercentSizing$1","isPixelSizing$1","isNoneSizing$1","percentageBasedSizeRegex","isCol$1","getRawW","getRawH","justCols","isValidColumn","supportsColWidths","backups","getWidthFrom","columnCells","colFilter","getDeduced","deduced","getRawWidths","getPercentageWidths","tableSize","cellWidth","getPixelWidths","getHeightFrom","rowCells","getPixelHeights","getRawHeights","widthLookup","noneSize","zero","percentageSize","getFloatWidth","_delta","pixelSize","chooseSize","TableSize","statsStruct","minRow","minCol","maxRow","maxCol","allCells","findSelectedStats","house","totalColumns","endRow","endCol","seenSelected","fillInGaps","stats","totalRows","replica","widthDelta","emptyRows","getTableWidthDelta","colWidths","allColsWidth","extract$1","selectedSelector","replicaHouse","replicaStats","unselectedCells","descendantRtl","transferableAttributes","createCell","createCol","createColgroup","createRow$1","replace$1","pasteReplace","cloneFormats","oldCell","newCell","firstText","formatSelector","clonedFormat","cloneAppropriateAttributes","validAttributes","cellOperations","formatsToClone","cloneCss","paste$1","defaultWidth","getPixelForcedWidth","determineDefaultTableStyles","defaultStyles","isTableResponsiveForced","shouldStyleWithCss","isTablePixelsForced","determineDefaultTableAttributes","defaultAttributes","getTableCloneElements","hasTableObjectResizing","objectResizing","getTableHeaderType","getTableColumnResizingBehaviour","isPreserveTableColumnResizing","isResizeTableColumnResizing","getTableSizingMode","isTablePercentagesForced","hasTableResizeBars","shouldMergeContentOnPaste","getTableDefaultAttributes","getTableDefaultStyles","tableUseColumnGroup","getUiMode","getIsRoot","removeDataStyle","removeStyleAttribute","getSelectionStart","getPixelWidth","getPixelHeight","getRawValue","getRawWidth","getRawHeight","isPercentage$1","isPixel","isInEditableContext$1","inSelection","leftEdge","rightEdge","topEdge","bottomEdge","isWithin","isRectangular","isRect","detailIsWithin","detailA","detailB","getAnyBox","startCoords","finishCoords","getBox$1","intercepts$1","parentCell","innerCell","isContainedBy","c1","c2","deltaColumn","getWarehouse","intercepts","nestedIntercepts","firstTable","lastTable","optStartCell","optLastCell","TagBoundaries","DomUniverse","isEmptyTag","isNonEditable","comparePosition","copyAttributesTo","destination","as","getLanguage","universe","look","tail","oneAll","unsafeOne","commonElement","ancestors$2","ps1","ps2","prune","ind","pruned1","pruned2","shared","sharedOne$1","ancestors$1","universe$3","sharedOne","_universe","rootTable","finishTable","ancestorCells","lca","lcaTable","finishAncestorCells","startAncestorCells","retrieve$1","sels","boxes","lastSelectedSelector","getEdges","firstSelectedSelector","expandTo","shiftSelection","retrieve","retrieveBox","sectionSelector","firstAncestor","lastAncestor","fA","lA","unmergable","hasSpan","hasRowOrColSpan","mergable","ephemera","strSelected","strSelectedSelector","strAttributeSelector","strFirstSelected","strFirstSelectedSelector","strLastSelected","strLastSelectedSelector","attributeSelector","paste","clipboard","generators","pasteRows","_cell","getSelectionCellFallback","getSelectionFromSelector","initCell","cellName","getSelectionCellOrCaption","getSelectionCell","getCellsFromSelection","getCellsFromFakeSelection","extractSelected","serializeElements","replicaElements","multiCellContext","scan$1","toEnd","freefallRtl$2","freefallRtl$1","universe$2","halve","main","surround","sizes","clampDeltaHelper","minCellSize","clampNegativeDelta","clampDelta","resizeTable","calcFixedDeltas","clampedDelta","calcRelativeDeltas","newThis","calcLeftEdgeDeltas","isRelative","resizer","_prev","totalWidth","pixelDelta","newSizes","preserveTable","isLastColumn","maxDelta","_minCellSize","_totalWidth","_pixelDelta","_isRelative","getGridSize","isHeaderCell","isHeaderCells","getRowHeaderType","isHeaderRow","getRowType","findCommonCellType","headerCells","findCommonRowType","rowTypes","hasHeader","hasFooter","hasBody","findTableRowHeaderType","rowType","transformCell","substitution","transformRow","fixedCell","sectionCells","TableSection","setIfNot","generateSection","sectionName","newSection","render$1","syncRows","gridSection","syncColGroup","colGroup","renderSection","sectionElems","removeSection","renderOrRemoveSection","headSection","bodySection","footSection","columnGroupsSection","clonedCell","getColumn","getRow","findDiff","subgrid","isColRow","toDetails","seen","updateSeen","toGrid","colgroupCols","rowDetail","fromWarehouse","toDetailList","findInWarehouse","extractCells","cell$1","lc","postAction","genWrappers","tableSection","newElements","tableSizing","resizing","onPasteByEditor","onMergable","_warehouse","onUnmergable","onCells","onUnlockedCells","isUnlockedTableCell","allUnlocked","onUnlockedMergable","mergeable","onUnlockedUnmergable","merge$2","unmerge","currentCell","currentCellElm","isToReplace","uniqueCells","splitCols","prevCell","splitRows","rowPrevCells","sub","measure","startAddress","gridA","gridB","rowRemainder","colRemainder","colRequired","rowRequired","measureWidth","colLengthA","colLengthB","measureHeight","rowLengthA","rowLengthB","generateElements","generator","rowFill","exampleRow","colFill","lockedColFill","colNum","newChild","tailor","fillCols","fillRows","gridWidth","isLastColLocked","modifiedCols","newLockedColumns","isSpanning","matching","mergeTables","gridBRows","mergeHeight","mergeWidth","lockedColumnObj","skippedCol","gridBColIndex","newCellElm","getValidStartAddress","currentStartAddress","gridColLength","adjustedRowAddress","possibleColAddresses","validColAddress","getLockedColumnsWithinBounds","validStartAddress","lockedColumnsWithinBounds","fittedGrid","newLockedColumnsWithinBounds","insertCols","fittedNewGrid","secondDelta","fittedOldGrid","insertRows","oldCols","oldRows","newLocked","secondDiff","fittedGridB","insertRowAt","example","getElementFor","withinSpan","insertColumnAt","deleteColumnsAt","deleteRowsAt","notInStartRow","notInStartColumn","isDuplicatedCell","rowReplacerPredicate","targetRow","columnHeaders","_rowIndex","columnReplacePredicate","targetColumn","rowHeaders","_colIndex","determineScope","applyScope","isInHeader","getScope","rowScopeGenerator","columnScopeGenerator","replaceIn","genScope","shouldReplace","getColumnCells","getRowCells","replaceColumns","indexes","shouldReplaceCell","scopeGenerator","replaceRows","newGrid","replaceCells","targetCells","ColumnContext","neighbours","determine","onOnly","onMiddle","measures","recalculateWidthForCells","widths","recalculateWidthForColumns","matchRowHeight","sumUp","recalculate","recalculateAndApply","adjustWidth","clampedStep","newWidths","adjustHeight","newHeights","newRowSizes","adjustAndRedistributeWidths$1","_table","resizeBehaviour","tablePixelWidth","adjustWidthTo","_info","uniqueColumns","currentDetail","isCol","isColgroup","isRow$1","elementToData","toData","nuCell","nuRow","recent","transform$1","makeNew","getScopeAttribute","Generators","getScopeProperty","stringAttributes","baseScope","blockList","isList$1","isEmptyTag$1","universe$1","advancedBr","siblingIsBlock","rightSibling","markCell","rightSiblingIsBlock","cursor","findEditableCursorPosition","elementFromGrid","cursorElement","uniqueRows","opInsertRowsBefore","targetIndex","opInsertRowsAfter","newG","opInsertColumnsBefore","extractDetail","opInsertColumnsAfter","opMakeColumnsHeader","initialGrid","columnIndexes","opMakeCellsHeader","opUnmakeColumnsHeader","opUnmakeCellsHeader","makeRowsSection","rowIndexes","opMakeRowsHeader","opMakeRowsBody","opMakeRowsFooter","opEraseColumns","_comparator","_genWrappers","maxColIndex","opEraseRows","maxRowIndex","opMergeCells","opUnmergeCells","opPasteCells","pasteDetails","wh","gridifyRows","opPasteColsBefore","mergedGrid","opPasteColsAfter","opPasteRowsBefore","opPasteRowsAfter","opGetColumnsType","lastSelectedCell","minColRange","maxColRange","selectedColumnCells","opGetCellsType","opGetRowsType","minRowRange","maxRowRange","selectedRows","adjustAndRedistributeWidths","firstColumnIsLocked","lastColumnIsLocked","getColumnsWidth","uniqueCols","colWidth","insertColumnsExtractor","eraseColumnsExtractor","pasteColumnsExtractor","headerCellGenerator","bodyCellGenerator","insertRowsBefore","insertRowsAfter","insertColumnsBefore","insertColumnsAfter","eraseColumns","eraseRows","makeColumnsHeader","unmakeColumnsHeader","makeRowsHeader","makeRowsBody","makeRowsFooter","makeCellsHeader","unmakeCellsHeader","mergeCells","unmergeCells","pasteCells","pasteColsBefore","pasteColsAfter","pasteRowsBefore","pasteRowsAfter","getColumnsType","getCellsType","getRowsType","fireNewRow","fireNewCell","fireTableModified","fireTableSelectionChange","fireTableSelectionClear","styleModified","structureModified","styleAndStructureModified","TableActions","cellSelectionHandler","isTableBody","lastRowGuard","lastColumnGuard","colMutationOp","getTableSectionType","setSelectionFromAction","des","guard","noEvents","deleteRow","deleteColumn","insertRowsBefore$1","insertRowsAfter$1","insertColumnsBefore$1","insertColumnsAfter$1","mergeCells$1","unmergeCells$1","pasteColsBefore$1","pasteColsAfter$1","pasteRowsBefore$1","pasteRowsAfter$1","pasteCells$1","makeCellsHeader$1","unmakeCellsHeader$1","makeColumnsHeader$1","unmakeColumnsHeader$1","makeRowsHeader$1","makeRowsBody$1","makeRowsFooter$1","constrainSpan","currentColspan","isColInRange","generateColGroup","colsToCopy","copiedCols","clonedCol","fakeColgroup","generateRows","cellsToCopy","copiedCells","fakeTR","copyCols","fakeColGroups","fakeRows","copyRows","slicedGrid","filteredGrid","slicedDetails","validateFor","rawAmount","Size","redistributeToPercent","pc","redistributeToPx","newTotalWidth","redistributeEmpty","newWidthType","pixels","redistributeValues","_pc","redistribute$1","newType","floats","roundDown","floored","redistributeToW","redistributeToColumns","redistributeToH","getUnit","redistribute","optWidth","optHeight","widthUnit","oldWidths","nuWidths","totalHeight","oldHeights","nuHeights","isPercentSizing","isPixelSizing","isNoneSizing","cleanupLegacyAttributes","convertToPercentSizeWidth","convertToPixelSizeWidth","convertToPixelSizeHeight","convertToNoneSizeWidth","rowElements","DefaultRenderOptions","tableHeaderCell","tableCell","tableColumn","createRow","createGroupRow","createRows","headerType","renderOpts","rowHeadersGoInThead","actualRowHeaders","thead","theadRows","tbody","tbodyRows","placeCaretInCell","selectFirstCellInTable","fireEvents","isPercentage","colHeaders","insertTable","checkInput","headerRows","headerColumns","tableTypeBase","tableTypeRow","tableTypeColumn","setData","fakeClipboardItem","clearData","setRows","rowsOpt","clearRows","getRows","setColumns","columnsOpt","clearColumns","getColumns","getSelectionStartCellOrCaption","getSelectionStartCell","eraseTable","cellOrCaption","setSizingMode","sizing","getTableFromCell","performActionOnSelection","toggleTableClass","toggleTableCellClass","formatterAction","toggleCaption","postExecute","actOnSelection","copyRowSelection","copyColSelection","pasteOnSelection","clonedRows","actOnType","getFormatName","validArgs","registerQueryCommands","lookupOnSelection","Response","selectNodeContents","selectNodeContentsUsing","Situs","convertToRange","makeSitus","sync","selectRange","cellSel","newSels","backtrack","_direction","sidestep","advance","successors","succ","Walkers","hone","isLeaf","seekLeft$1","seekRight$1","seekLeft","seekRight","beforeBounds","afterBounds","isRow","BeforeAfter","beforeOffset","afterOffset","afterCell","beforeCell","_sharedRow","onSuccess","onFailedUp","onFailedDown","inParent","indexInParent","gatherer","cand","gather","handleBr","handleParent","adjacent","tryBr","analysis","_message","getBottom","getPartialBox","toCaret","getElemBox","getBoxAt","getEntireBox","JUMP_SIZE","NUM_RETRIES","isOutside","inOutsideBlock","adjustDown","guessBox","lowerCaret","upMovement","higherCaret","downMovement","isAtTable","adjustForTable","numRetries","adjustTil","guess","newCaret","checkScroll","adjusted","retry","moved","Retries","MAX_RETRIES","findSpot","brNeighbour","tryCursor","situs","tryAgain","tryAt","inSameTable","simulate","precheck","firstUpCheck","lastOffset","lastDownCheck","findCell","isInEditableContext","MouseSelection","clearstate","singleCell","isNonEditableCell","isCellClosestContentEditable","up","isKey","keycode","isUp","isDown","isNavigation","by","doSetNativeRange","doSetRange","setLegacyRtlRange","setRangeFromRelative","setExact","setRelative","setToElement","selectNodeContents$1","WindowBridge","exactAdt","rc","mouse","isEditableNode","isEditableSelection","keyboard","clearToNavigate","realEvent","update$1","removeClasses","SelectionAnnotation","addSelectionClass","removeSelectionClasses","onSelection","onClear","removeSelectionAttributes","addSelectionAttribute","clearBeforeUpdate","onMultiple","onSingle","Selections","lazyRoot","getUpOrLeftCells","upGrid","upDetails","slicedCells","getDownOrRightCells","downGrid","downDetails","getOtherCells","upOrLeftCells","downOrRightCells","hasInternalTarget","TableCellSelectionHandler","cellSelection","cellsDom","otherCellsDom","cellArr","syncSelection","mouseHandlers","keyHandlers","handleResponse","wrappedEvent","isLeftMouse","isLeftButtonPressed","dragStart","mouseDown","mouseOver","mouseUp","doubleTap","lastTarget","lastTimeStamp","lT","lTS","Event","typeDefs","reqMessage","unsuppMessage","validateStrArr","invalidTypeMessage","incorrect","checkDupes","everything","handleUnsupported","baseWith","invalidKeys","handleExact","exactly","DragMode","DragSink","DragApi","InDrag","onEvent","NoDrag","Movement","noDragState","inDragState","mutation","throttledDrop","runIfActive","namespace","dashNamespace","Blocker","MouseDrag","mdown","mup","mmove","mout","Mutation","BarMutation","bar","resizeBar","resizeRowBar","resizeColBar","BAR_THICKNESS","resizableRows","resizableColumns","resizableCols","wire","drawBar","cpOption","cp","refreshCol","colPositions","tableHeight","colBar","refreshRow","rowPositions","tableWidth","rowBar","refreshGrid","warhouse","resizableRowBars","resizableRowPositions","_pos","barIndex","resizableColBars","resizableColPositions","bars","isRowBar","isColBar","resizeBarDragging","BarManager","hoverTable","getResizer","_dataRow","_dataCol","currentCol","getDelta","oldX","findClosestEditableTable","destroy$1","tbl","TableResize","lazySizing","hdirection","vdirection","ResizeWire","chrome","dragContainer","createContainer","getInlineResizeWire","isSplitUiMode$1","barResizerPrefix","syncTableCellPixels","computedWidth","isCornerResize","getCornerLocation","TableResizeHandler","tableResize","resizeWire","startRawW","startRawH","lazyResizingBehaviour","getNumColumns","getNumRows","afterCornerResize","isRightEdgeResize","isNorthEdgeResize","percentW","targetPercentW","sz","rawWire","rawTable","showResizeBars","hideResizeBars","setupTable","DomModel","applyListFormat","listName","getNumberStyles","getBulletStyles","isCustomList","isChildOfBody","regex","isListNode","isTableCellNode","inList","getSelectedStyleType","isWithinNonEditable","setNodeChangeHandler","nodeChangeHandler","initialNode","styleValueToText","updateButtonState","addSplitButton","listStyleTypeAliases","stylesContainsAliasMap","alias","iconStyle","listStyle","addButton","addControl","getAutoLinkPattern","getDefaultLinkTarget","getDefaultLinkProtocol","allowUnsafeLinkTarget","isTextNode","isBracketOrSpace","hasProtocol","isPunctuation","findChar","tempOffset","parseCurrentLine","autoLinkPattern","startSpot","convertToLink","defaultLinkTarget","handleSpacebar","handleBracket","groupBy","wasType","isTextNode$1","isOlUlNode","isOlNode","isListItemNode","isDlItemNode","isVoid","keepBookmarks","shouldIndentOnTab","contentNode","blockAttrs","hasContentNode","splitList","removeAndKeepBookmarks","bookmarks","isDescriptionDetail","isDescriptionTerm","outdentDlItem","dl","indentDlItem","dlIndentation","dlItems","getNormalizedPoint","outRng","rangeStart","rangeEnd","listNames","listSelector","getParentList","getClosestListHost","isParentListSelected","findSubLists","getSelectedSubLists","findParentListItemsNodes","listItemsElms","parentLi","getSelectedListItems","getSelectedDlItems","getClosestEditingHost","parentTableCell","isListHost","isNotForcedRootBlock","isListInsideAnLiWithFirstAndLastNotListElement","findLastParentListNode","parentLists","getSelectedLists","firstList","subsequentLists","getParentLists","getSelectedListRoots","selectedLists","getUniqueListRoots","listRoots","selectionIsWithinNonEditableList","fireListEvent","hasFirstChildList","hasLastChildList","isEntryList","isEntryComment","isEntryFragment","isIndented","cloneItemContent","createEntry","depth","joinSegment","joinSegments","segments","appendSegments","head$1","createSegment","listType","createSegments","populateSegments","normalizeSegment","appendItem","writeShallow","cast","newCast","writeDeep","composeList","firstCommentEntryOpt","firstCommentEntry","fistCast","indentEntry","cloneListProperties","cleanListProperties","closestSiblingEntry","normalizeEntries","matchingEntry","parseSingleItem","itemSelection","selectionState","currentItemEntry","childListEntries","parseList","parseItem","parsedSiblings","liChild","newDepth","parseLists","initialDepth","outdentedComposer","normalizedEntries","listItemAttrs","indentedComposer","composeEntries","indentSelectedEntries","getItemSelection","selectedListItems","listIndentation","entrySets","entrySet","composedLists","composedList","selectionIndentation","isHandled","handleIndentation","indentListSelection","outdentListSelection","flattenListSelection","createBookmark","setupEndPoint","offsetNode","listToggleActionFromListName","updateListStyle","updateListAttrs","updateListWithDetails","getEndPointNode","findBlockAncestor","findBetterContainer","getSelectedTextBlocks","hasCompatibleStyle","sib","sibStyle","detailStyle","getRootSearchStart","applyList","listItemName","selectedTextBlocks","listBlock","mergeWithAdjacentLists","isValidLists","list1","list2","hasSameListStyle","targetStyle","hasSameClasses","elm1","elm2","shouldMerge","liSibling","updateList$1","newList","updateCustomList","toggleMultipleLists","parentIsList","hasListStyleDetail","allLists","toggleSingleList","toggleList","selectedSubLists","normalizeList","normalizeLists","findNextCaretContainer","nonEmptyBlocks","hasOnlyOneBlockChild","isUnwrappable","unwrapSingleBlockChild","moveChildren","mergeLiElements","listNode","ul","nestedLists","mergeIntoEmptyLi","fromLi","toLi","mergeForward","mergeBackward","resolvedBookmark","backspaceDeleteFromListToListCaret","selectionStartElm","otherLi","willMergeParentIntoChild","oldParentElRef","removeBlock","backspaceDeleteIntoListCaret","findValidElement","findRoot","otherLiCell","caretCell","hasListSelection","shouldFireInput","inputHandler","updateList","parseAlphabeticBase26","charValue","composeAlphabeticBase26","quotient","isUppercase","isLowercase","isNumeric","deduceListType","parseStartValue","parseDetail","currentList","queryListCommandState","registerDialog","nodeBuffer","wrapInvalidChildren","insertListItem","reducer","restBuffer","setupTabKey","setupToggleButtonHandler","toggleButtonHandler","exec","setupMenuButtonHandler","listProperties","assumeExternalTargets","hasContextToolbar","getLinkList","getTargetList","getRelList","getLinkClassList","shouldShowLinkTitle","useQuickLink","attributesPostProcess","isLink","getHref","collectNodesInRange","applyRelTargetRules","isUnsafe","addTargetRules","removeTargetRules","newRels","trimCaretContainers","getAnchorElement","getLinksInSelection","isImageFigure","isInAnchor","getAnchorText","anchorElm","getLinks$1","hasLinks","hasLinksInSelection","isOnlyTextSelected","inlineTextElements","getLinkAttrs","handleExternalTargets","applyLinkOverrides","linkAttrs","newLinkAttrs","updateLink","linkImageFigure","linkDomMutation","attachState","attributesPostProcess$1","unlinkSelection","startAnchorElm","endAnchorElm","unlinkDomMutation","unlinkImageFigure","unwrapOptions","sanitizeData","uriOptions","sanitizedData","unlink","fig","sanitizeList","sanitizeWith","extracter","ListOptions","isListGroup","findTextByValue","catalog","persistentText","hasPersistentText","findCatalog","catalogs","DialogChanges","linkCatalog","persistentData","getTitleFromUrlChange","getTextFromUrlChange","onUrlChange","onCatalogChange","delayedConfirm","tryEmailTransform","oldData","tryProtocolTransform","defaultLinkProtocol","DialogConfirms","AnchorListOptions","anchorNodes","anchors","ClassListOptions","parseJson","LinkListOptions","extractor","linkList","optItems","RelOptions","isTargetBlank","enforceSafe","safeRelExtractor","fallbacks","TargetOptions","nonEmptyAttr","extractFromAnchor","linkClass","DialogInfo","linkNode","links","handleSubmit","getChangedValue","changedData","pData","collectData","getInitialData","defaultTarget","makeDialog","urlInput","titleText","dialogDelta","appendClickRemove","openLink","hasOnlyAltModifier","gotoLink","isSelectionOnImageWithEmbeddedLink","getLinkFromElement","getLinkInSelection","getLinkFromSelection","selectedLink","getSelectedLink","gotoSelectedLink","toggler","toggleLinkState","toggleLinkMenuState","toggleRequiresLinkState","hasLinks$1","updateEnabled","setupButtons","setupMenuItems","setupContextMenu","inLink","noLink","setupContextToolbars","collapseSelectionToEnd","onSetupLink","getLinkText","onlyText","fireInsertCustomChar","insertChar","evtChr","charMapProcessor","getCharMap$1","getCharMapAppend","UserDefined","getDefaultCharMap","charmapFilter","charmap","getCharsFromOption","extendCharMap","userCharMap","userCharMapAppend","userDefinedGroup","cg","getCharMap","fromCodePoint","charMatches","charCode","lowerCasePattern","patternName","charMap","makeGroupItems","makeTabs","charGroup","makePanel","makeTabPanel","currentTab","scanAndSet","dialogApi","updateFilter","bridgeSpec","changeData","_maxResults","_reject","autocompleteApi","onSetupEditable","nodeChanged","getPreventClicksOnLinksScript","isMacOSOrIOS","getPreviewHtml","headHtml","cors","dirAttr","allowHtmlInNamedAnchor","namedAnchorSelector","isEmptyString","getIdFromAnchor","isEmptyNamedAnchor","removeEmptyNamedAnchorsInSelection","isValidId","getNamedAnchor","getId","createAnchor","updateAnchor","anchorElement","insertAnchor","newId","currentId","isNamedAnchorNode","isEmptyNamedAnchorNode","unbindSelectorChanged","unbindEditableChanged","punctuation$1","punctuation","compareDocumentPosition","documentPositionPreceding","isSimpleBoundary","isContentEditableTrueInCef","nuSection","walkerFn","skipStart","collectTextToBoundary","finishSection","collectRangeSections","ceTrueNode","fromRng","fromNode","fromNodes","matchedText","matchStart","matchFinish","nodePositions","matchIdx","replacementNode","findAndMark","textSections","findAndMarkInSelection","getElmIndex","markAllMatches","currentSearchState","findSpansByIndex","spans","searchState","testIndex","escapeSearchText","wholeWord","wordRegex","matchCase","escapedText","isForwardSelection","isMatchSpan","matchIndex","currentIndex","currentMatchIndex","nextIndex","keepEditorSelection","hasNext","hasPrev","currentState","selectedText","updateButtonStates","updateSearchState","disableAll","toggleNotFoundAlert","getDialogSpec","focusButtonIfRequired","doFind","getPanelItems","showNoMatchesAlertBanner","fireVisualBlocks","toggleVisualBlocks","enabledState","isEnabledByDefault","toggleActiveState","editorEventCallback","editorContent","fullscreenState","siblings$2","fireFullscreenStateChanged","getFullscreenNative","getFullscreenRoot","getFullscreenElement","getFullscreenchangeEventName","requestFullscreen","sugarElem","exitFullscreen","sugarDoc","isFullscreenElement","siblings$1","siblingStyles","ancestorPosition","ancestorStyles","bgFallback","matchColor","clobberStyles","gatherSiblings","clobber","clobberStyle","backup","bgColor","restoreStyles","clobberedEls","getScrollPos","setScrollPos","viewportUpdate","resizeBinder","scrollBinder","refreshScroll","refreshVisualViewport","editorContainerS","sinkContainerS","fullscreenRoot","fullscreenInfo","editorContainerStyle","iframeStyle","handleClasses","fullscreenChangeHandler","_evt","newFullScreenInfo","getAudioTemplateCallback","getVideoTemplateCallback","getIframeTemplateCallback","hasLiveEmbeds","shouldFilterHtml","getUrlResolver","hasAltSource","hasPoster","hasDimensions","trimPx","getEphoxEmbedData","htmlToData","mimes","fileEnd","Parser","addPx","updateEphoxEmbed","sources","updateAll","numSources","sourceCount","urlPatterns","getProtocol","protocolMatches","getUrl","protocol","newUrl","matchPattern","iframeTemplateCallback","allowFullscreen","getFlashHtml","getAudioHtml","audioTemplateCallback","getVideoHtml","videoTemplateCallback","dataToHtml","dataIn","isMediaElement","previewObj","embedPromise","rej","wrappedResolve","defaultPromise","loadedData","getEmbedHtml","embedHandler","isCached","extractMeta","sourceInput","mainData","metaData","getFromData","getFromMetaData","getNonEmptyValue","getFromValueFirst","getFromMetaFirst","dims","errorMessage","getEditorData","snippet","isEmbedIframe","addEmbedHtml","selectPlaceholder","beforeObjects","afterObjects","handleInsert","mediaDataType","shouldInsertAsNewIframe","submitForm","editorData","handleSource","serviceData","handleEmbed","dataFromEmbed","handleUpdate","mediaInput","sizeInput","generalTab","embedTab","advancedFormItems","advancedTab","tabs","showDialog$1","isLiveEmbedNode","dimension","setDimensions","previewNode","useDefaults","fallbackHeight","defaultHeight","appendNodeContent","createPlaceholderNode","placeHolder","retainAttributesAndInnerHtml","createPreviewNode","previewWrapper","sanitizedHtml","shimNode","sourceNode","innerHtml","isPageEmbedWrapper","nodeClass","isWithinEmbedWrapper","placeHolderConverter","parseAndSanitize","getEditorOption","sanitize","boolAttrs","realElmName","realElm","unbindEditable","getMinHeight","getAutoResizeOverflowPadding","getAutoResizeBottomMargin","toggleScrolling","parseCssValueToInt","shouldScrollIntoView","setContentEvent","oldSize","getExtraMarginBottom","resizeBottomMargin","resizeHeight","marginTop","marginBottom","contentHeight","containerHeight","contentAreaHeight","deltaSize","overflowPadding","tinymceOptions","customContentCss","contentUiSkinCss","contentCss","tinyMceHTMLCleaner","resized"],"mappings":"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EACpB,CACL,MAAOw2O,GAAa92O,CAAK,EACzB,MAAO,EACR,EAEM,CACL,MAAO,GACP,QAAS,8BACV,EAGCq3O,EAAqBr3O,GACrBe,GAASf,CAAK,GAAKA,EAAQ,EACtB,CACL,MAAAA,EACA,MAAO,EACR,EAEM,CACL,MAAO,GACP,QAAS,4BACV,EAGLy+C,EAAe,YAAa,CAC1B,UAAW04L,EACX,QAAS,CACP,UACA,cACA,UACA,eACA,UACA,YACA,UACA,eACA,UACA,aACA,UACA,QACA,UACA,SACA,UACA,MACA,UACA,SACA,UACA,OACA,UACA,iBACA,UACA,SACA,UACA,WACA,UACA,cACA,UACA,YACA,UACA,aACA,UACA,cACA,UACA,OACA,UACA,YACA,UACA,YACA,UACA,QACA,UACA,OACV,CACA,CAAO,EACD14L,EAAe,gBAAiB,CAAE,UAAW24L,CAAiB,CAAE,EAChE34L,EAAe,uBAAwB,CAAE,UAAW04L,CAAc,CAAE,EACpE14L,EAAe,uBAAwB,CAAE,UAAW04L,CAAc,CAAE,EACpE14L,EAAe,aAAc,CAC3B,UAAW44L,EACX,QAASC,GAAS9uM,CAAM,CAChC,CAAO,EACDiW,EAAe,wBAAyB,CACtC,UAAW44L,EACX,QAASE,GAAY/uM,EAAQiuM,EAAY,CACjD,CAAO,EACDh4L,EAAe,wBAAyB,CACtC,UAAW44L,EACX,QAASE,GAAY/uM,EAAQkuM,EAAY,CACjD,CAAO,EACDj4L,EAAe,gBAAiB,CAC9B,UAAW,UACX,QAAS,EACjB,CAAO,EACDA,EAAe,2BAA4B,CACzC,UAAW,SACX,QAASw4L,EACjB,CAAO,EACDx4L,EAAe,2BAA4B,CACzC,UAAW,SACX,QAASw4L,EACjB,CAAO,CACF,EACKO,GAAc,CAAChvM,EAAQx0B,IACvBA,IAAOyiO,IAAgBjuM,EAAO,QAAQ,MAAM,sBAAsB,EAC7DwuM,GAAS,sBAAsB,EAAExuM,CAAM,EACrCx0B,IAAO0iO,IAAgBluM,EAAO,QAAQ,MAAM,sBAAsB,EACpEwuM,GAAS,sBAAsB,EAAExuM,CAAM,EACrCA,EAAO,QAAQ,MAAM,eAAe,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,EAAK,GAAKQ,GAAUR,EAAK,EACtEy+C,GAAe,UAAW,CAAE,UAAW64T,EAAgB,CAAE,EACzD74T,GAAe,iBAAkB,CAAE,UAAW64T,EAAgB,CAAE,CACjE,EACKC,GAAejlV,GAAO,SAAS,EAC/BklV,GAAmBllV,GAAO,gBAAgB,EAE1C7qB,GAAUksT,GAAO,QACjB8jD,GAAc,eACdC,GAAoB,IACjB,CACL,CACE,KAAM,WACN,WAAY,CACV,CACE,GACA,aACD,EACD,CACE,IACA,WACD,EACD,CACE,KACA,WACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,UACD,EACD,CACE,IACA,eACD,EACD,CACE,KACA,oBACD,EACD,CACE,KACA,YACD,EACD,CACE,KACA,eACD,EACD,CACE,KACA,mBACD,EACD,CACE,KACA,WACD,EACD,CACE,KACA,WACD,EACD,CACE,KACA,YACD,EACD,CACE,KACA,aACD,EACD,CACE,KACA,YACD,EACD,CACE,KACA,UACD,EACD,CACE,KACA,iBACD,EACD,CACE,KACA,WACD,EACD,CACE,KACA,UACD,EACD,CACE,KACA,aACD,EACD,CACE,KACA,cACD,EACD,CACE,KACA,qBACD,EACD,CACE,KACA,WACD,EACD,CACE,KACA,cACD,EACD,CACE,KACA,cACD,EACD,CACE,KACA,cACD,EACD,CACE,KACA,WACD,EACD,CACE,KACA,qBACD,EACD,CACE,KACA,eACD,EACD,CACE,KACA,YACD,EACD,CACE,KACA,mBACD,EACD,CACE,KACA,mBACD,EACD,CACE,KACA,kBACD,EACD,CACE,KACA,YACD,EACD,CACE,KACA,YACD,EACD,CACE,MACA,eACD,EACD,CACE,MACA,gBACD,EACD,CACE,MACA,yCACD,EACD,CACE,MACA,gCACd,CACA,CACS,EACD,CACE,KAAM,OACN,WAAY,CACV,CACE,IACA,gBACD,EACD,CACE,IACA,iBACD,EACD,CACE,KACA,iBACD,EACD,CACE,KACA,gBACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,YACD,EACD,CACE,KACA,QACD,EACD,CACE,KACA,kBACD,EACD,CACE,KACA,gBACD,EACD,CACE,KACA,kBACD,EACD,CACE,IACA,cACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,mBACd,CACA,CACS,EACD,CACE,KAAM,aACN,WAAY,CACV,CACE,KACA,2CACD,EACD,CACE,KACA,4CACD,EACD,CACE,IACA,yBACD,EACD,CACE,IACA,0BACD,EACD,CACE,KACA,4BACD,EACD,CACE,KACA,6BACD,EACD,CACE,KACA,4BACD,EACD,CACE,KACA,6BACD,EACD,CACE,KACA,6BACD,EACD,CACE,KACA,6BACD,EACD,CACE,GACA,gBACD,EACD,CACE,GACA,mBACD,EACD,CACE,KACA,uBACD,EACD,CACE,KACA,0BACD,EACD,CACE,KACA,SACD,EACD,CACE,KACA,SACD,EACD,CACE,IACA,QACD,EACD,CACE,KACA,UACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,2BACD,EACD,CACE,IACA,sBACD,EACD,CACE,IACA,mBACD,EACD,CACE,IACA,aACD,EACD,CACE,IACA,aACD,EACD,CACE,KACA,YACD,EACD,CACE,IACA,iBACD,EACD,CACE,IACA,eACD,EACD,CACE,KACA,gBACD,EACD,CACE,IACA,qBACD,EACD,CACE,IACA,iBACD,EACD,CACE,IACA,iBACD,EACD,CACE,IACA,mBACD,EACD,CACE,IACA,sBACD,EACD,CACE,IACA,mBACD,EACD,CACE,IACA,yBACd,CACA,CACS,EACD,CACE,KAAM,eACN,WAAY,CACV,CACE,IACA,mBACD,EACD,CACE,KACA,UACD,EACD,CACE,KACA,gBACD,EACD,CACE,KACA,UACD,EACD,CACE,KACA,aACD,EACD,CACE,KACA,YACD,EACD,CACE,KACA,wBACD,EACD,CACE,KACA,iBACD,EACD,CACE,KACA,cACD,EACD,CACE,KACA,cACD,EACD,CACE,KACA,YACD,EACD,CACE,KACA,mBACD,EACD,CACE,KACA,oBACD,EACD,CACE,KACA,eACD,EACD,CACE,KACA,aACD,EACD,CACE,KACA,YACD,EACD,CACE,IACA,UACD,EACD,CACE,KACA,cACD,EACD,CACE,KACA,OACD,EACD,CACE,KACA,sBACD,EACD,CACE,KACA,SACD,EACD,CACE,KACA,cACD,EACD,CACE,KACA,UACD,EACD,CACE,KACA,qBACD,EACD,CACE,KACA,mBACD,EACD,CACE,KACA,iBACD,EACD,CACE,KACA,OACd,CACA,CACS,EACD,CACE,KAAM,iBACN,WAAY,CACV,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,aACD,EACD,CACE,IACA,aACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,aACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,aACD,EACD,CACE,IACA,aACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,SACD,EACD,CACE,IACA,UACD,EACD,CACE,IACA,aACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,gBACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,WACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,eACD,EACD,CACE,IACA,YACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,MACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,SACD,EACD,CACE,IACA,MACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,MACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,QACD,EACD,CACE,IACA,IACD,EACD,CACE,IACA,IACD,EACD,CACE,IACA,IACD,EACD,CACE,IACA,SACD,EACD,CACE,IACA,IACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,SACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,MACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,SACD,EACD,CACE,IACA,MACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,MACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,QACD,EACD,CACE,IACA,IACD,EACD,CACE,IACA,IACD,EACD,CACE,IACA,IACD,EACD,CACE,IACA,SACD,EACD,CACE,IACA,IACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,aACD,EACD,CACE,IACA,OACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,SACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,KACD,EACD,CACE,IACA,OACd,CACA,CACS,EACD,CACE,KAAM,UACN,WAAY,CACV,CACE,KACA,aACD,EACD,CACE,IACA,WACD,EACD,CACE,KACA,kBACD,EACD,CACE,IACA,uBACD,EACD,CACE,KACA,eACD,EACD,CACE,KACA,gBACd,CACA,CACS,EACD,CACE,KAAM,SACN,WAAY,CACV,CACE,KACA,iBACD,EACD,CACE,KACA,eACD,EACD,CACE,KACA,kBACD,EACD,CACE,KACA,iBACD,EACD,CACE,KACA,kBACD,EACD,CACE,KACA,iBACD,EACD,CACE,KACA,wBACD,EACD,CACE,KACA,sBACD,EACD,CACE,KACA,yBACD,EACD,CACE,KACA,wBACD,EACD,CACE,KACA,yBACD,EACD,CACE,KACA,WACD,EACD,CACE,KACA,WACD,EACD,CACE,KACA,aACD,EACD,CACE,KACA,iBACD,EACD,CACE,KACA,uBACD,EACD,CACE,KACA,yBACD,EACD,CACE,KACA,cACD,EACD,CACE,KACA,eACD,EACD,CACE,KACA,eACD,EACD,CACE,KACA,cACD,EACD,CACE,KACA,cACD,EACD,CACE,KACA,eACD,EACD,CACE,KACA,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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32]}