{"version":3,"file":"scripts.fe1dda05f10881e65e75.js","mappings":"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AC7C,IAAIlB,EAAIsB,EAAGJ,GACXqG,EAAE/G,OAAOR,IAAMU,EAAEV,EAAGkB,EACtB,CACA,OAAOqG,CACT,CAojF+BsrB,CAAYvd,EAAO1Q,GACvCwF,GAAMwoB,EAAQryB,GAAK8W,GAC5B,CACF,EACIyb,GAAYH,GA/BD,CACb,KACA,KACA,KACA,KACA,KACA,OA0BEI,GAAYJ,GArHH,CACX,UACA,QACA,UACA,MACA,KACA,aACA,SACA,OACA,WACA,SACA,SACA,OACA,OACA,MACA,UACA,UACA,OACA,IACA,KACA,WACA,KACA,SACA,UACA,SACA,aACA,KACA,KACA,KACA,KACA,KACA,KACA,UACA,MACA,MACA,YACA,OACA,MACA,KACA,KACA,KACA,KACA,QACA,QACA,QACA,QACA,KACA,KACA,KACA,YAwEEK,GAAa,SAAU3b,GACzB,OAAOiD,GAAYjD,KAAU0b,GAAU1b,EACzC,EACI4b,GAAS,SAAU5b,GACrB,OAAOiD,GAAYjD,IAAwB,OAAf9W,GAAK8W,EACnC,EACI6b,GAAgBP,GAnEH,CACf,KACA,KACA,KACA,KACA,KACA,KACA,IACA,MACA,UACA,MACA,OACA,aACA,SACA,MACA,WACA,SACA,SACA,UACA,UACA,SACA,QACA,MACA,WA6CEQ,GAASR,GA9BD,CACV,KACA,KACA,OA4BES,GAAaT,GApCC,CAChB,KACA,KACA,OAkCEU,GAAiBV,GA3ED,CAClB,QACA,QACA,UAyEEW,GAAgBX,GAhFH,CACf,KACA,OA+EEY,GAAsBZ,GA7BT,CACf,MACA,SACA,WACA,UAgCEa,GAAO,OAQPC,GATY,SAUZC,GARW,SAAUC,GACvB,MAHc,WAGPA,CACT,EAOIC,GANa,SAAUjtB,GACzB,OAAOA,EAAE0G,QAAQ,UAAW,GAC9B,EAMIwmB,GAAcxT,GACdyT,GAAWzS,GACX0S,GAA0B,SAAU1c,GAItC,OAHIyc,GAASzc,KACXA,EAAOA,EAAK0D,YAEP8Y,GAAYxc,IAASA,EAAKwJ,aAAa,iBAChD,EACImT,GAAyB,SAAU3c,GACrC,OAAOyc,GAASzc,IAASqc,GAAOrc,EA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GAASytF,GAAazqI,GAAOA,EAAM16B,EAC5C,EACF,EACIkmK,GAAa,SAAUlqB,EAAQz0N,GACjC,OAAOu9O,GAAa9oB,EAAQz0N,GAAMskB,KAAK,SAAU6uF,GAC/C,OAAOg9C,GAAS1qI,GAAUnR,QAAQmgN,GAASthH,EAAMshH,EAAOkpB,YAC1D,EACF,EAMI1oF,GAAQ,SAAUh1J,EAAO4pD,EAAKpsC,GAChC,IAAImhO,EAA+B,iBAAV3+O,EAAqBquE,WAAWruE,GAASA,EAMlE,OALI2+O,EAAcnhO,EAChBmhO,EAAcnhO,EACLmhO,EAAc/0L,IACvB+0L,EAAc/0L,GAET+0L,CACT,EA8BIC,GAAc,CAChB,EACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,EACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,IACA,KACA,EACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,EACA,IACA,IACA,IACA,IACA,EACA,IACA,IACA,IACA,EACA,IACA,EACA,IACA,IACA,EACA,IACA,IACA,IACA,EACA,IACA,IACA,EACA,IACA,IACA,IACA,IAEEC,GAAW,SAAUC,EAASC,GAIhC,IAHA,IAEIh6N,EAFAs0M,EAAM,GACN9wN,EAAM,IAAI3K,MAAM,IAEXe,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAK,IAAIwrC,EAAI,EAAGA,EAAI,EAAGA,IACrBkvL,EAAIlvL,GAAK40M,EAAQ50M,EAAQ,EAAJxrC,GAEvB,IAASwrC,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1BplB,EAAM,EACN,IAAK,IAAIhe,EAAI,EAAGA,EAAI,EAAGA,IACrBge,GAAO+5N,EAAQ3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AAI9Y,IAAW,CACjB,CACA,OAAO8Y,CACT,CACA,SAAS4nB,GAAMY,GACb,IACIn3B,EADA22R,EAAY7jS,GAAO,MAEvB,IAAKkN,KAAYm3B,EACXz2C,GAAMsF,GAAgBmxC,EAAQ,CAACn3B,MACjC22R,EAAU32R,GAAYm3B,EAAOn3B,IAGjC,OAAO22R,CACT,CACA,SAASC,GAAaz/P,EAAQ3B,GAC5B,KAAkB,OAAX2B,GAAiB,CACtB,IAAI42G,EAAOsnJ,GAAyBl+P,EAAQ3B,GAC5C,GAAIu4G,EAAM,CACR,GAAIA,EAAK7oI,IACP,OAAOywR,GAAQ5nJ,EAAK7oI,KAEtB,GAA0B,mBAAf6oI,EAAK1uJ,MACd,OAAOs2S,GAAQ5nJ,EAAK1uJ,MAExB,CACA83C,EAASj6B,GAAei6B,EAC1B,CAKA,OAJA,SAAuBthC,GAErB,OADAf,QAAQ0P,KAAK,qBAAsB3O,GAC5B,IACT,CAEF,CACA,IAAIghS,GAASvoO,GAAO,CAClB,IACA,OACA,UACA,UACA,OACA,UACA,QACA,QACA,IACA,MACA,MACA,MACA,QACA,aACA,OACA,KACA,SACA,SACA,UACA,SACA,OACA,OACA,MACA,WACA,UACA,OACA,WACA,KACA,YACA,MACA,UACA,MACA,SACA,MACA,MACA,KACA,KACA,UACA,KACA,WACA,aACA,SACA,OACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,OACA,SACA,SACA,KACA,OACA,IACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,MACA,OACA,UACA,OACA,WACA,QACA,MACA,OACA,KACA,WACA,SACA,SACA,IACA,UACA,MACA,WACA,IACA,KACA,KACA,OACA,IACA,OACA,UACA,SACA,SACA,QACA,SACA,SACA,OACA,SACA,SACA,QACA,MACA,UACA,MACA,QACA,QACA,KACA,WACA,WACA,QACA,KACA,QACA,OACA,KACA,QACA,KACA,IACA,KACA,MACA,QACA,QAEEwoO,GAAQxoO,GAAO,CACjB,MACA,IACA,WACA,cACA,eACA,eACA,gBACA,mBACA,SACA,WACA,OACA,OACA,UACA,SACA,OACA,IACA,QACA,WACA,QACA,QACA,OACA,iBACA,SACA,OACA,WACA,QACA,OACA,UACA,UACA,WACA,iBACA,OACA,OACA,QACA,SACA,SACA,OACA,WACA,QACA,OACA,QACA,OACA,UAEEyoO,GAAazoO,GAAO,CACtB,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,iBACA,UACA,UACA,UACA,UACA,UACA,iBACA,UACA,UACA,cACA,eACA,WACA,eACA,qBACA,cACA,SACA,iBAEE0oO,GAAgB1oO,GAAO,CACzB,UACA,gBACA,SACA,UACA,eACA,YACA,mBACA,iBACA,gBACA,gBACA,gBACA,QACA,YACA,OACA,eACA,YACA,UACA,gBACA,SACA,MACA,aACA,UACA,QAEE2oO,GAAW3oO,GAAO,CACpB,OACA,WACA,SACA,UACA,QACA,SACA,KACA,aACA,gBACA,KACA,KACA,QACA,UACA,WACA,QACA,OACA,KACA,SACA,QACA,SACA,OACA,OACA,UACA,SACA,MACA,QACA,MACA,SACA,eAEE4oO,GAAmB5oO,GAAO,CAC5B,UACA,cACA,aACA,WACA,YACA,UACA,UACA,SACA,SACA,QACA,YACA,aACA,iBACA,cACA,SAEEn5D,GAAOm5D,GAAO,CAAC,UACf/5D,GAAO+5D,GAAO,CAChB,SACA,SACA,QACA,MACA,iBACA,eACA,uBACA,WACA,aACA,UACA,SACA,UACA,cACA,cACA,UACA,OACA,QACA,QACA,QACA,OACA,UACA,WACA,eACA,SACA,cACA,WACA,WACA,UACA,MACA,WACA,0BACA,wBACA,WACA,YACA,UACA,eACA,OACA,MACA,UACA,SACA,SACA,OACA,OACA,WACA,KACA,YACA,YACA,QACA,OACA,QACA,OACA,OACA,UACA,OACA,MACA,MACA,YACA,QACA,SACA,MACA,YACA,WACA,QACA,OACA,QACA,UACA,aACA,SACA,OACA,UACA,UACA,cACA,cACA,SACA,UACA,UACA,aACA,WACA,MACA,WACA,MACA,WACA,OACA,OACA,UACA,aACA,QACA,WACA,QACA,OACA,QACA,OACA,UACA,QACA,MACA,SACA,OACA,QACA,UACA,WACA,QACA,YACA,OACA,SACA,SACA,QACA,QACA,QACA,SAEEgwI,GAAMhwI,GAAO,CACf,gBACA,aACA,WACA,qBACA,SACA,gBACA,gBACA,UACA,gBACA,iBACA,QACA,OACA,KACA,QACA,OACA,gBACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,KACA,KACA,IACA,KACA,KACA,kBACA,YACA,UACA,UACA,MACA,WACA,YACA,MACA,OACA,eACA,YACA,SACA,cACA,cACA,gBACA,cACA,YACA,mBACA,eACA,aACA,eACA,cACA,KACA,KACA,KACA,KACA,aACA,WACA,gBACA,oBACA,SACA,OACA,KACA,kBACA,KACA,MACA,IACA,KACA,KACA,KACA,KACA,UACA,YACA,aACA,WACA,OACA,eACA,iBACA,eACA,mBACA,iBACA,QACA,aACA,aACA,eACA,eACA,cACA,cACA,mBACA,YACA,MACA,OACA,QACA,SACA,OACA,MACA,OACA,aACA,SACA,WACA,UACA,QACA,SACA,cACA,SACA,WACA,cACA,OACA,aACA,sBACA,mBACA,eACA,SACA,gBACA,sBACA,iBACA,IACA,KACA,KACA,SACA,OACA,OACA,cACA,YACA,UACA,SACA,SACA,QACA,OACA,kBACA,mBACA,mBACA,eACA,cACA,eACA,cACA,aACA,eACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,SACA,eACA,QACA,eACA,iBACA,WACA,UACA,UACA,YACA,mBACA,cACA,kBACA,iBACA,aACA,OACA,KACA,KACA,UACA,SACA,UACA,aACA,UACA,aACA,gBACA,gBACA,QACA,eACA,OACA,eACA,mBACA,mBACA,IACA,KACA,KACA,QACA,IACA,KACA,KACA,IACA,eAEE6oO,GAAS7oO,GAAO,CAClB,SACA,cACA,QACA,WACA,QACA,eACA,cACA,aACA,aACA,QACA,MACA,UACA,eACA,WACA,Q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","sources":["node_modules/tinymce/tinymce.js","node_modules/tinymce/themes/silver/theme.js","../app/assets/javascripts/tinymce/plugins/placeholder/plugin.js","node_modules/tinymce/icons/default/icons.js"],"sourcesContent":["/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.10.7 (2022-12-06)\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 var typeOf = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType$1 = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isSimpleType = function (type) {\n return function (value) {\n return typeof value === type;\n };\n };\n var eq$1 = function (t) {\n return function (a) {\n return t === a;\n };\n };\n var isString$1 = isType$1('string');\n var isObject = isType$1('object');\n var isArray$1 = isType$1('array');\n var isNull = eq$1(null);\n var isBoolean = isSimpleType('boolean');\n var isUndefined = eq$1(undefined);\n var isNullable = function (a) {\n return a === null || a === undefined;\n };\n var isNonNullable = function (a) {\n return !isNullable(a);\n };\n var isFunction = isSimpleType('function');\n var isNumber = isSimpleType('number');\n\n var noop = function () {\n };\n var compose = function (fa, fb) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fa(fb.apply(null, args));\n };\n };\n var compose1 = function (fbc, fab) {\n return function (a) {\n return fbc(fab(a));\n };\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n var tripleEquals = function (a, b) {\n return a === b;\n };\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n var not = function (f) {\n return function (t) {\n return !f(t);\n };\n };\n var die = function (msg) {\n return function () {\n throw new Error(msg);\n };\n };\n var apply = function (f) {\n return f();\n };\n var call = function (f) {\n f();\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var call = function (thunk) {\n return thunk();\n };\n var id = identity;\n var me = {\n fold: function (n, _s) {\n return n();\n },\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: function () {\n return none();\n },\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n }\n };\n return me;\n };\n var from$1 = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from$1\n };\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var indexOf$2 = function (xs, x) {\n var r = rawIndexOf(xs, x);\n return r === -1 ? Optional.none() : Optional.some(r);\n };\n var contains$3 = function (xs, x) {\n return rawIndexOf(xs, x) > -1;\n };\n var exists = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n var map$3 = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each$k = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var eachr = function (xs, f) {\n for (var i = xs.length - 1; i >= 0; i--) {\n var x = xs[i];\n f(x, i);\n }\n };\n var partition = function (xs, pred) {\n var pass = [];\n var fail = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n var arr = pred(x, i) ? pass : fail;\n arr.push(x);\n }\n return {\n pass: pass,\n fail: fail\n };\n };\n var filter$4 = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var foldr = function (xs, f, acc) {\n eachr(xs, function (x, i) {\n acc = f(acc, x, i);\n });\n return acc;\n };\n var foldl = function (xs, f, acc) {\n each$k(xs, function (x, i) {\n acc = f(acc, x, i);\n });\n return acc;\n };\n var findUntil$1 = function (xs, pred, until) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var 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 var find$3 = function (xs, pred) {\n return findUntil$1(xs, pred, never);\n };\n var findIndex$2 = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Optional.some(i);\n }\n }\n return Optional.none();\n };\n var flatten = function (xs) {\n var r = [];\n for (var 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 var bind = function (xs, f) {\n return flatten(map$3(xs, f));\n };\n var forall = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; ++i) {\n var x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n var reverse = function (xs) {\n var r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n var difference = function (a1, a2) {\n return filter$4(a1, function (x) {\n return !contains$3(a2, x);\n });\n };\n var mapToObject = function (xs, f) {\n var r = {};\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n var sort = function (xs, comparator) {\n var copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n var get$a = function (xs, i) {\n return i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n };\n var head = function (xs) {\n return get$a(xs, 0);\n };\n var last$2 = function (xs) {\n return get$a(xs, xs.length - 1);\n };\n var from = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n var findMap = function (arr, f) {\n for (var i = 0; i < arr.length; i++) {\n var r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n var keys = Object.keys;\n var hasOwnProperty$1 = Object.hasOwnProperty;\n var each$j = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var map$2 = function (obj, f) {\n return tupleMap(obj, function (x, i) {\n return {\n k: i,\n v: f(x, i)\n };\n });\n };\n var tupleMap = function (obj, f) {\n var r = {};\n each$j(obj, function (x, i) {\n var tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n var objAcc = function (r) {\n return function (x, i) {\n r[i] = x;\n };\n };\n var internalFilter = function (obj, pred, onTrue, onFalse) {\n var r = {};\n each$j(obj, function (x, i) {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n return r;\n };\n var bifilter = function (obj, pred) {\n var t = {};\n var f = {};\n internalFilter(obj, pred, objAcc(t), objAcc(f));\n return {\n t: t,\n f: f\n };\n };\n var filter$3 = function (obj, pred) {\n var t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n var mapToArray = function (obj, f) {\n var r = [];\n each$j(obj, function (value, name) {\n r.push(f(value, name));\n });\n return r;\n };\n var values = function (obj) {\n return mapToArray(obj, identity);\n };\n var get$9 = function (obj, key) {\n return has$2(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n var has$2 = function (obj, key) {\n return hasOwnProperty$1.call(obj, key);\n };\n var hasNonNullableKey = function (obj, key) {\n return has$2(obj, key) && obj[key] !== undefined && obj[key] !== null;\n };\n var equal$1 = function (a1, a2, eq) {\n if (eq === void 0) {\n eq = eqAny;\n }\n return eqRecord(eq).eq(a1, a2);\n };\n\n var isArray = Array.isArray;\n var toArray$1 = function (obj) {\n if (!isArray(obj)) {\n var array = [];\n for (var 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 var each$i = function (o, cb, s) {\n var n, l;\n if (!o) {\n return false;\n }\n s = s || o;\n if (o.length !== undefined) {\n for (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 (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 var map$1 = function (array, callback) {\n var out = [];\n each$i(array, function (item, index) {\n out.push(callback(item, index, array));\n });\n return out;\n };\n var filter$2 = function (a, f) {\n var o = [];\n each$i(a, function (v, index) {\n if (!f || f(v, index, a)) {\n o.push(v);\n }\n });\n return o;\n };\n var indexOf$1 = function (a, v) {\n if (a) {\n for (var i = 0, l = a.length; i < l; i++) {\n if (a[i] === v) {\n return i;\n }\n }\n }\n return -1;\n };\n var reduce = function (collection, iteratee, accumulator, thisArg) {\n var acc = isUndefined(accumulator) ? collection[0] : accumulator;\n for (var i = 0; i < collection.length; i++) {\n acc = iteratee.call(thisArg, acc, collection[i], i);\n }\n return acc;\n };\n var findIndex$1 = function (array, predicate, thisArg) {\n var i, l;\n for (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 var last$1 = function (collection) {\n return collection[collection.length - 1];\n };\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n function __rest(s, e) {\n var t = {};\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === 'function')\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n }\n function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2)\n for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar)\n ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n }\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var DeviceType = function (os, browser, userAgent, mediaMatch) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isMobile = os.isiOS() || os.isAndroid();\n var isTouch = isMobile || mediaMatch('(pointer:coarse)');\n var isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n var isPhone = isiPhone || isMobile && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n var 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 var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find$2 = function (regexes, agent) {\n var r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n var group = function (i) {\n return Number(agent.replace(r, '$' + i));\n };\n return nu$4(group(1), group(2));\n };\n var detect$3 = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$2();\n }\n return find$2(versionRegexes, cleanedAgent);\n };\n var unknown$2 = function () {\n return nu$4(0, 0);\n };\n var nu$4 = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu$4,\n detect: detect$3,\n unknown: unknown$2\n };\n\n var detectBrowser$1 = function (browsers, userAgentData) {\n return findMap(userAgentData.brands, function (uaBrand) {\n var lcBrand = uaBrand.brand.toLowerCase();\n return find$3(browsers, function (browser) {\n var _a;\n return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n }).map(function (info) {\n return {\n current: info.name,\n version: Version.nu(parseInt(uaBrand.version, 10), 0)\n };\n });\n });\n };\n\n var detect$2 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find$3(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$2(browsers, userAgent).map(function (browser) {\n var version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version: version\n };\n });\n };\n var detectOs = function (oses, userAgent) {\n return detect$2(oses, userAgent).map(function (os) {\n var version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version: version\n };\n });\n };\n\n var removeFromStart = function (str, numChars) {\n return str.substring(numChars);\n };\n\n var checkRange = function (str, substr, start) {\n return substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n };\n var removeLeading = function (str, prefix) {\n return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n };\n var contains$2 = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var startsWith = function (str, prefix) {\n return checkRange(str, prefix, 0);\n };\n var blank = function (r) {\n return function (s) {\n return s.replace(r, '');\n };\n };\n var trim$4 = blank(/^\\s+|\\s+$/g);\n var lTrim = blank(/^\\s+/g);\n var rTrim = blank(/\\s+$/g);\n var isNotEmpty = function (s) {\n return s.length > 0;\n };\n var isEmpty$3 = function (s) {\n return !isNotEmpty(s);\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains$2(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains$2(uastring, 'edge/') && contains$2(uastring, 'chrome') && contains$2(uastring, 'safari') && contains$2(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n brand: 'Chromium',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (uastring) {\n return contains$2(uastring, 'chrome') && !contains$2(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: function (uastring) {\n return contains$2(uastring, 'msie') || contains$2(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: function (uastring) {\n return (contains$2(uastring, 'safari') || contains$2(uastring, 'mobile/')) && contains$2(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (uastring) {\n return contains$2(uastring, 'iphone') || contains$2(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: 'OSX',\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 var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie$1 = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var unknown$1 = function () {\n return nu$3({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$3 = function (info) {\n var current = info.current;\n var version = info.version;\n var isBrowser = function (name) {\n return function () {\n return current === name;\n };\n };\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge),\n isChrome: isBrowser(chrome),\n isIE: isBrowser(ie$1),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$3,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie$1),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var chromeos = 'ChromeOS';\n var unknown = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n var isOS = function (name) {\n return function () {\n return current === name;\n };\n };\n return {\n current: current,\n version: version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isOSX: isOS(osx),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n var OperatingSystem = {\n unknown: unknown,\n nu: nu$2,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n var detect$1 = function (userAgent, userAgentDataOpt, mediaMatch) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = userAgentDataOpt.bind(function (userAgentData) {\n return detectBrowser$1(browsers, userAgentData);\n }).orThunk(function () {\n return detectBrowser(browsers, userAgent);\n }).fold(Browser.unknown, Browser.nu);\n var os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n var deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$1 };\n\n var mediaMatch = function (query) {\n return window.matchMedia(query).matches;\n };\n var platform$2 = cached(function () {\n return PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch);\n });\n var detect = function () {\n return platform$2();\n };\n\n var userAgent = navigator.userAgent;\n var platform$1 = detect();\n var browser$4 = platform$1.browser;\n var os = platform$1.os;\n var deviceType = platform$1.deviceType;\n var webkit = /WebKit/.test(userAgent) && !browser$4.isEdge();\n var fileApi = 'FormData' in window && 'FileReader' in window && 'URL' in window && !!URL.createObjectURL;\n var windowsPhone = userAgent.indexOf('Windows Phone') !== -1;\n var Env = {\n opera: browser$4.isOpera(),\n webkit: webkit,\n ie: browser$4.isIE() || browser$4.isEdge() ? browser$4.version.major : false,\n gecko: browser$4.isFirefox(),\n mac: os.isOSX() || os.isiOS(),\n iOS: deviceType.isiPad() || deviceType.isiPhone(),\n android: os.isAndroid(),\n contentEditable: true,\n transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',\n caretAfter: true,\n range: window.getSelection && 'Range' in window,\n documentMode: browser$4.isIE() ? document.documentMode || 7 : 10,\n fileApi: fileApi,\n ceFalse: true,\n cacheSuffix: null,\n container: null,\n experimentalShadowDom: false,\n canHaveCSP: !browser$4.isIE(),\n desktop: deviceType.isDesktop(),\n windowsPhone: windowsPhone,\n browser: {\n current: browser$4.current,\n version: browser$4.version,\n isChrome: browser$4.isChrome,\n isEdge: browser$4.isEdge,\n isFirefox: browser$4.isFirefox,\n isIE: browser$4.isIE,\n isOpera: browser$4.isOpera,\n isSafari: browser$4.isSafari\n },\n os: {\n current: os.current,\n version: os.version,\n isAndroid: os.isAndroid,\n isChromeOS: os.isChromeOS,\n isFreeBSD: os.isFreeBSD,\n isiOS: os.isiOS,\n isLinux: os.isLinux,\n isOSX: os.isOSX,\n isSolaris: os.isSolaris,\n isWindows: os.isWindows\n },\n deviceType: {\n isDesktop: deviceType.isDesktop,\n isiPad: deviceType.isiPad,\n isiPhone: deviceType.isiPhone,\n isPhone: deviceType.isPhone,\n isTablet: deviceType.isTablet,\n isTouch: deviceType.isTouch,\n isWebView: deviceType.isWebView\n }\n };\n\n var whiteSpaceRegExp$2 = /^\\s*|\\s*$/g;\n var trim$3 = function (str) {\n return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp$2, '');\n };\n var is$3 = function (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 var makeMap$4 = function (items, delim, map) {\n var i;\n items = items || [];\n delim = delim || ',';\n if (typeof items === 'string') {\n items = items.split(delim);\n }\n map = map || {};\n i = items.length;\n while (i--) {\n map[items[i]] = {};\n }\n return map;\n };\n var hasOwnProperty = has$2;\n var create$9 = function (s, p, root) {\n var self = this;\n var sp, scn, c, de = 0;\n s = /^((static) )?([\\w.]+)(:([\\w.]+))?/.exec(s);\n var cn = s[3].match(/(^|\\.)(\\w+)$/i)[2];\n var ns = self.createNS(s[3].replace(/\\.\\w+$/, ''), root);\n if (ns[cn]) {\n return;\n }\n if (s[2] === 'static') {\n ns[cn] = p;\n if (this.onCreate) {\n this.onCreate(s[2], s[3], ns[cn]);\n }\n return;\n }\n if (!p[cn]) {\n p[cn] = function () {\n };\n de = 1;\n }\n ns[cn] = p[cn];\n self.extend(ns[cn].prototype, p);\n if (s[5]) {\n sp = self.resolve(s[5]).prototype;\n scn = s[5].match(/\\.(\\w+)$/i)[1];\n c = ns[cn];\n if (de) {\n ns[cn] = function () {\n return sp[scn].apply(this, arguments);\n };\n } else {\n ns[cn] = function () {\n this.parent = sp[scn];\n return c.apply(this, arguments);\n };\n }\n ns[cn].prototype[cn] = ns[cn];\n self.each(sp, function (f, n) {\n ns[cn].prototype[n] = sp[n];\n });\n self.each(p, function (f, n) {\n if (sp[n]) {\n ns[cn].prototype[n] = function () {\n this.parent = sp[n];\n return f.apply(this, arguments);\n };\n } else {\n if (n !== cn) {\n ns[cn].prototype[n] = f;\n }\n }\n });\n }\n self.each(p.static, function (f, n) {\n ns[cn][n] = f;\n });\n };\n var extend$6 = function (obj) {\n var exts = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n exts[_i - 1] = arguments[_i];\n }\n for (var i = 0; i < exts.length; i++) {\n var ext = exts[i];\n for (var name_1 in ext) {\n if (has$2(ext, name_1)) {\n var value = ext[name_1];\n if (value !== undefined) {\n obj[name_1] = value;\n }\n }\n }\n }\n return obj;\n };\n var walk$3 = function (o, f, n, s) {\n s = s || this;\n if (o) {\n if (n) {\n o = o[n];\n }\n each$i(o, function (o, i) {\n if (f.call(s, o, i, n) === false) {\n return false;\n }\n walk$3(o, f, n, s);\n });\n }\n };\n var createNS = function (n, o) {\n var i, v;\n o = o || window;\n n = n.split('.');\n for (i = 0; i < n.length; i++) {\n v = n[i];\n if (!o[v]) {\n o[v] = {};\n }\n o = o[v];\n }\n return o;\n };\n var resolve$3 = function (n, o) {\n var i, l;\n o = o || window;\n n = n.split('.');\n for (i = 0, l = n.length; i < l; i++) {\n o = o[n[i]];\n if (!o) {\n break;\n }\n }\n return o;\n };\n var explode$4 = function (s, d) {\n if (!s || is$3(s, 'array')) {\n return s;\n }\n return map$1(s.split(d || ','), trim$3);\n };\n var _addCacheSuffix = function (url) {\n var cacheSuffix = Env.cacheSuffix;\n if (cacheSuffix) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + cacheSuffix;\n }\n return url;\n };\n var Tools = {\n trim: trim$3,\n isArray: isArray,\n is: is$3,\n toArray: toArray$1,\n makeMap: makeMap$4,\n each: each$i,\n map: map$1,\n grep: filter$2,\n inArray: indexOf$1,\n hasOwn: hasOwnProperty,\n extend: extend$6,\n create: create$9,\n walk: walk$3,\n createNS: createNS,\n resolve: resolve$3,\n explode: explode$4,\n _addCacheSuffix: _addCacheSuffix\n };\n\n var fromHtml$1 = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom$2(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || document;\n var node = doc.createElement(tag);\n return fromDom$2(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || document;\n var node = doc.createTextNode(text);\n return fromDom$2(node);\n };\n var fromDom$2 = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n var fromPoint$1 = function (docElm, x, y) {\n return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$2);\n };\n var SugarElement = {\n fromHtml: fromHtml$1,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom$2,\n fromPoint: fromPoint$1\n };\n\n var toArray = function (target, f) {\n var r = [];\n var recurse = function (e) {\n r.push(e);\n return f(e);\n };\n var cur = f(target);\n do {\n cur = cur.bind(recurse);\n } while (cur.isSome());\n return r;\n };\n\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n\n var COMMENT = 8;\n var DOCUMENT = 9;\n var DOCUMENT_FRAGMENT = 11;\n var ELEMENT = 1;\n var TEXT = 3;\n\n var is$2 = function (element, selector) {\n var dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n var 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 var bypassSelector = function (dom) {\n return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map$3(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n var one = function (selector, scope) {\n var base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n };\n\n var eq = function (e1, e2) {\n return e1.dom === e2.dom;\n };\n var regularContains = function (e1, e2) {\n var d1 = e1.dom;\n var d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return documentPositionContainedBy(e1.dom, e2.dom);\n };\n var contains$1 = function (e1, e2) {\n return detect().browser.isIE() ? ieContains(e1, e2) : regularContains(e1, e2);\n };\n\n typeof window !== 'undefined' ? window : Function('return this;')();\n\n var name = function (element) {\n var r = element.dom.nodeName;\n return r.toLowerCase();\n };\n var type = function (element) {\n return element.dom.nodeType;\n };\n var isType = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isComment$1 = function (element) {\n return type(element) === COMMENT || name(element) === '#comment';\n };\n var isElement$6 = isType(ELEMENT);\n var isText$8 = isType(TEXT);\n var isDocument$2 = isType(DOCUMENT);\n var isDocumentFragment$1 = isType(DOCUMENT_FRAGMENT);\n var isTag = function (tag) {\n return function (e) {\n return isElement$6(e) && name(e) === tag;\n };\n };\n\n var owner$1 = function (element) {\n return SugarElement.fromDom(element.dom.ownerDocument);\n };\n var documentOrOwner = function (dos) {\n return isDocument$2(dos) ? dos : owner$1(dos);\n };\n var documentElement = function (element) {\n return SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n };\n var defaultView = function (element) {\n return SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n };\n var parent = function (element) {\n return Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n };\n var parents$1 = function (element, isRoot) {\n var stop = isFunction(isRoot) ? isRoot : never;\n var dom = element.dom;\n var ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n var rawParent = dom.parentNode;\n var 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 var siblings = function (element) {\n var filterSelf = function (elements) {\n return filter$4(elements, function (x) {\n return !eq(element, x);\n });\n };\n return parent(element).map(children).map(filterSelf).getOr([]);\n };\n var prevSibling = function (element) {\n return Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n };\n var nextSibling = function (element) {\n return Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n };\n var prevSiblings = function (element) {\n return reverse(toArray(element, prevSibling));\n };\n var nextSiblings = function (element) {\n return toArray(element, nextSibling);\n };\n var children = function (element) {\n return map$3(element.dom.childNodes, SugarElement.fromDom);\n };\n var child$1 = function (element, index) {\n var cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n var firstChild = function (element) {\n return child$1(element, 0);\n };\n var lastChild = function (element) {\n return child$1(element, element.dom.childNodes.length - 1);\n };\n var childNodesCount = function (element) {\n return element.dom.childNodes.length;\n };\n\n var getHead = function (doc) {\n var 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 var isShadowRoot = function (dos) {\n return isDocumentFragment$1(dos) && isNonNullable(dos.dom.host);\n };\n var supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n var isSupported$1 = constant(supported);\n var getRootNode = supported ? function (e) {\n return SugarElement.fromDom(e.dom.getRootNode());\n } : documentOrOwner;\n var getStyleContainer = function (dos) {\n return isShadowRoot(dos) ? dos : getHead(documentOrOwner(dos));\n };\n var getShadowRoot = function (e) {\n var r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n var getShadowHost = function (e) {\n return SugarElement.fromDom(e.dom.host);\n };\n var getOriginalEventTarget = function (event) {\n if (isSupported$1() && isNonNullable(event.target)) {\n var el = SugarElement.fromDom(event.target);\n if (isElement$6(el) && isOpenShadowHost(el)) {\n if (event.composed && event.composedPath) {\n var composedPath = event.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Optional.from(event.target);\n };\n var isOpenShadowHost = function (element) {\n return isNonNullable(element.dom.shadowRoot);\n };\n\n var before$4 = function (marker, element) {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n var after$3 = function (marker, element) {\n var sibling = nextSibling(marker);\n sibling.fold(function () {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n append$1(v, element);\n });\n }, function (v) {\n before$4(v, element);\n });\n };\n var prepend = function (parent, element) {\n var firstChild$1 = firstChild(parent);\n firstChild$1.fold(function () {\n append$1(parent, element);\n }, function (v) {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n var append$1 = function (parent, element) {\n parent.dom.appendChild(element.dom);\n };\n var wrap$3 = function (element, wrapper) {\n before$4(element, wrapper);\n append$1(wrapper, element);\n };\n\n var before$3 = function (marker, elements) {\n each$k(elements, function (x) {\n before$4(marker, x);\n });\n };\n var append = function (parent, elements) {\n each$k(elements, function (x) {\n append$1(parent, x);\n });\n };\n\n var empty = function (element) {\n element.dom.textContent = '';\n each$k(children(element), function (rogue) {\n remove$7(rogue);\n });\n };\n var remove$7 = function (element) {\n var dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n var unwrap = function (wrapper) {\n var children$1 = children(wrapper);\n if (children$1.length > 0) {\n before$3(wrapper, children$1);\n }\n remove$7(wrapper);\n };\n\n var inBody = function (element) {\n var dom = isText$8(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n var doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(function () {\n return doc.body.contains(dom);\n }, compose1(inBody, getShadowHost));\n };\n\n var r = function (left, top) {\n var translate = function (x, y) {\n return r(left + x, top + y);\n };\n return {\n left: left,\n top: top,\n translate: translate\n };\n };\n var SugarPosition = r;\n\n var boxPosition = function (dom) {\n var box = dom.getBoundingClientRect();\n return SugarPosition(box.left, box.top);\n };\n var firstDefinedOrZero = function (a, b) {\n if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n var absolute = function (element) {\n var doc = element.dom.ownerDocument;\n var body = doc.body;\n var win = doc.defaultView;\n var html = doc.documentElement;\n if (body === element.dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n var scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n var scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n var viewport = function (element) {\n var dom = element.dom;\n var doc = dom.ownerDocument;\n var 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 var get$8 = function (_DOC) {\n var doc = _DOC !== undefined ? _DOC.dom : document;\n var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n var y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return SugarPosition(x, y);\n };\n var to = function (x, y, _DOC) {\n var doc = _DOC !== undefined ? _DOC.dom : document;\n var win = doc.defaultView;\n if (win) {\n win.scrollTo(x, y);\n }\n };\n var intoView = function (element, alignToTop) {\n var isSafari = detect().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 var get$7 = function (_win) {\n var 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 var bounds = function (x, y, width, height) {\n return {\n x: x,\n y: y,\n width: width,\n height: height,\n right: x + width,\n bottom: y + height\n };\n };\n var getBounds = function (_win) {\n var win = _win === undefined ? window : _win;\n var doc = win.document;\n var scroll = get$8(SugarElement.fromDom(doc));\n return get$7(win).fold(function () {\n var html = win.document.documentElement;\n var width = html.clientWidth;\n var height = html.clientHeight;\n return bounds(scroll.left, scroll.top, width, height);\n }, function (visualViewport) {\n return bounds(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height);\n });\n };\n\n var isNodeType = function (type) {\n return function (node) {\n return !!node && node.nodeType === type;\n };\n };\n var isRestrictedNode = function (node) {\n return !!node && !Object.getPrototypeOf(node);\n };\n var isElement$5 = isNodeType(1);\n var matchNodeNames = function (names) {\n var lowercasedNames = names.map(function (s) {\n return s.toLowerCase();\n });\n return function (node) {\n if (node && node.nodeName) {\n var nodeName = node.nodeName.toLowerCase();\n return contains$3(lowercasedNames, nodeName);\n }\n return false;\n };\n };\n var matchStyleValues = function (name, values) {\n var items = values.toLowerCase().split(' ');\n return function (node) {\n if (isElement$5(node)) {\n for (var i = 0; i < items.length; i++) {\n var computed = node.ownerDocument.defaultView.getComputedStyle(node, null);\n var cssValue = computed ? computed.getPropertyValue(name) : null;\n if (cssValue === items[i]) {\n return true;\n }\n }\n }\n return false;\n };\n };\n var hasAttribute = function (attrName) {\n return function (node) {\n return isElement$5(node) && node.hasAttribute(attrName);\n };\n };\n var hasAttributeValue = function (attrName, attrValue) {\n return function (node) {\n return isElement$5(node) && node.getAttribute(attrName) === attrValue;\n };\n };\n var isBogus$2 = function (node) {\n return isElement$5(node) && node.hasAttribute('data-mce-bogus');\n };\n var isBogusAll$1 = function (node) {\n return isElement$5(node) && node.getAttribute('data-mce-bogus') === 'all';\n };\n var isTable$3 = function (node) {\n return isElement$5(node) && node.tagName === 'TABLE';\n };\n var hasContentEditableState = function (value) {\n return function (node) {\n if (isElement$5(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 var isTextareaOrInput = matchNodeNames([\n 'textarea',\n 'input'\n ]);\n var isText$7 = isNodeType(3);\n var isComment = isNodeType(8);\n var isDocument$1 = isNodeType(9);\n var isDocumentFragment = isNodeType(11);\n var isBr$5 = matchNodeNames(['br']);\n var isImg = matchNodeNames(['img']);\n var isContentEditableTrue$4 = hasContentEditableState('true');\n var isContentEditableFalse$b = hasContentEditableState('false');\n var isTableCell$5 = matchNodeNames([\n 'td',\n 'th'\n ]);\n var isMedia$2 = matchNodeNames([\n 'video',\n 'audio',\n 'object',\n 'embed'\n ]);\n\n var is$1 = function (lhs, rhs, comparator) {\n if (comparator === void 0) {\n comparator = tripleEquals;\n }\n return lhs.exists(function (left) {\n return comparator(left, rhs);\n });\n };\n var cat = function (arr) {\n var r = [];\n var push = function (x) {\n r.push(x);\n };\n for (var i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n var lift2 = function (oa, ob, f) {\n return oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n };\n var lift3 = function (oa, ob, oc, f) {\n return oa.isSome() && ob.isSome() && oc.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Optional.none();\n };\n var someIf = function (b, a) {\n return b ? Optional.some(a) : Optional.none();\n };\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n };\n\n var rawSet = function (dom, key, value) {\n if (isString$1(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 var set$1 = function (element, key, value) {\n rawSet(element.dom, key, value);\n };\n var setAll$1 = function (element, attrs) {\n var dom = element.dom;\n each$j(attrs, function (v, k) {\n rawSet(dom, k, v);\n });\n };\n var get$6 = function (element, key) {\n var v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n var getOpt = function (element, key) {\n return Optional.from(get$6(element, key));\n };\n var has$1 = function (element, key) {\n var dom = element.dom;\n return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n };\n var remove$6 = function (element, key) {\n element.dom.removeAttribute(key);\n };\n var clone$3 = function (element) {\n return foldl(element.dom.attributes, function (acc, attr) {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n };\n\n var internalSet = function (dom, property, value) {\n if (!isString$1(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 var setAll = function (element, css) {\n var dom = element.dom;\n each$j(css, function (v, k) {\n internalSet(dom, k, v);\n });\n };\n var get$5 = function (element, property) {\n var dom = element.dom;\n var styles = window.getComputedStyle(dom);\n var r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n };\n var getRaw = function (element, property) {\n var dom = element.dom;\n var raw = getUnsafeProperty(dom, property);\n return Optional.from(raw).filter(function (r) {\n return r.length > 0;\n });\n };\n var getAllRaw = function (element) {\n var css = {};\n var dom = element.dom;\n if (isSupported(dom)) {\n for (var i = 0; i < dom.style.length; i++) {\n var ruleName = dom.style.item(i);\n css[ruleName] = dom.style[ruleName];\n }\n }\n return css;\n };\n var reflow = function (e) {\n return e.dom.offsetWidth;\n };\n\n var browser$3 = detect().browser;\n var firstElement = function (nodes) {\n return find$3(nodes, isElement$6);\n };\n var getTableCaptionDeltaY = function (elm) {\n if (browser$3.isFirefox() && name(elm) === 'table') {\n return firstElement(children(elm)).filter(function (elm) {\n return name(elm) === 'caption';\n }).bind(function (caption) {\n return firstElement(nextSiblings(caption)).map(function (body) {\n var bodyTop = body.dom.offsetTop;\n var captionTop = caption.dom.offsetTop;\n var captionHeight = caption.dom.offsetHeight;\n return bodyTop <= captionTop ? -captionHeight : 0;\n });\n }).getOr(0);\n } else {\n return 0;\n }\n };\n var hasChild = function (elm, child) {\n return elm.children && contains$3(elm.children, child);\n };\n var getPos = function (body, elm, rootElm) {\n var x = 0, y = 0;\n var doc = body.ownerDocument;\n rootElm = rootElm ? rootElm : body;\n if (elm) {\n if (rootElm === body && elm.getBoundingClientRect && get$5(SugarElement.fromDom(body), 'position') === 'static') {\n var 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: x,\n y: y\n };\n }\n var offsetParent = elm;\n while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType && !hasChild(offsetParent, rootElm)) {\n var 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: x,\n y: y\n };\n };\n\n var exports$1 = {}, module$1 = { exports: exports$1 };\n (function (define, exports, module, require) {\n (function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.EphoxContactWrapper = factory());\n }(this, function () {\n var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n var promise = { exports: {} };\n (function (module) {\n (function (root) {\n var setTimeoutFunc = setTimeout;\n function noop() {\n }\n function bind(fn, thisArg) {\n return function () {\n fn.apply(thisArg, arguments);\n };\n }\n function Promise(fn) {\n if (typeof this !== 'object')\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function')\n throw new TypeError('not a function');\n this._state = 0;\n this._handled = false;\n this._value = undefined;\n this._deferreds = [];\n doResolve(fn, this);\n }\n function handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function () {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n }\n function resolve(self, newValue) {\n try {\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n }\n function reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n }\n function finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function () {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n }\n function Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n }\n function doResolve(fn, self) {\n var done = false;\n try {\n fn(function (value) {\n if (done)\n return;\n done = true;\n resolve(self, value);\n }, function (reason) {\n if (done)\n return;\n done = true;\n reject(self, reason);\n });\n } catch (ex) {\n if (done)\n return;\n done = true;\n reject(self, ex);\n }\n }\n Promise.prototype['catch'] = function (onRejected) {\n return this.then(null, onRejected);\n };\n Promise.prototype.then = function (onFulfilled, onRejected) {\n var prom = new this.constructor(noop);\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n };\n Promise.all = function (arr) {\n var args = Array.prototype.slice.call(arr);\n return new Promise(function (resolve, reject) {\n if (args.length === 0)\n return resolve([]);\n var remaining = args.length;\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n };\n Promise.resolve = function (value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n return new Promise(function (resolve) {\n resolve(value);\n });\n };\n Promise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n };\n Promise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n };\n Promise._immediateFn = typeof setImmediate === 'function' ? function (fn) {\n setImmediate(fn);\n } : function (fn) {\n setTimeoutFunc(fn, 0);\n };\n Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err);\n }\n };\n Promise._setImmediateFn = function _setImmediateFn(fn) {\n Promise._immediateFn = fn;\n };\n Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {\n Promise._unhandledRejectionFn = fn;\n };\n if (module.exports) {\n module.exports = Promise;\n } else if (!root.Promise) {\n root.Promise = Promise;\n }\n }(commonjsGlobal));\n }(promise));\n var promisePolyfill = promise.exports;\n var Global = function () {\n if (typeof window !== 'undefined') {\n return window;\n } else {\n return Function('return this;')();\n }\n }();\n var promisePolyfill_1 = { boltExport: Global.Promise || promisePolyfill };\n return promisePolyfill_1;\n }));\n }(undefined, exports$1, module$1));\n var Promise$1 = module$1.exports.boltExport;\n\n var nu$1 = function (baseFn) {\n var data = Optional.none();\n var callbacks = [];\n var map = function (f) {\n return nu$1(function (nCallback) {\n get(function (data) {\n nCallback(f(data));\n });\n });\n };\n var get = function (nCallback) {\n if (isReady()) {\n call(nCallback);\n } else {\n callbacks.push(nCallback);\n }\n };\n var set = function (x) {\n if (!isReady()) {\n data = Optional.some(x);\n run(callbacks);\n callbacks = [];\n }\n };\n var isReady = function () {\n return data.isSome();\n };\n var run = function (cbs) {\n each$k(cbs, call);\n };\n var call = function (cb) {\n data.each(function (x) {\n setTimeout(function () {\n cb(x);\n }, 0);\n });\n };\n baseFn(set);\n return {\n get: get,\n map: map,\n isReady: isReady\n };\n };\n var pure$1 = function (a) {\n return nu$1(function (callback) {\n callback(a);\n });\n };\n var LazyValue = {\n nu: nu$1,\n pure: pure$1\n };\n\n var errorReporter = function (err) {\n setTimeout(function () {\n throw err;\n }, 0);\n };\n var make = function (run) {\n var get = function (callback) {\n run().then(callback, errorReporter);\n };\n var map = function (fab) {\n return make(function () {\n return run().then(fab);\n });\n };\n var bind = function (aFutureB) {\n return make(function () {\n return run().then(function (v) {\n return aFutureB(v).toPromise();\n });\n });\n };\n var anonBind = function (futureB) {\n return make(function () {\n return run().then(function () {\n return futureB.toPromise();\n });\n });\n };\n var toLazy = function () {\n return LazyValue.nu(get);\n };\n var toCached = function () {\n var cache = null;\n return make(function () {\n if (cache === null) {\n cache = run();\n }\n return cache;\n });\n };\n var toPromise = run;\n return {\n map: map,\n bind: bind,\n anonBind: anonBind,\n toLazy: toLazy,\n toCached: toCached,\n toPromise: toPromise,\n get: get\n };\n };\n var nu = function (baseFn) {\n return make(function () {\n return new Promise$1(baseFn);\n });\n };\n var pure = function (a) {\n return make(function () {\n return Promise$1.resolve(a);\n });\n };\n var Future = {\n nu: nu,\n pure: pure\n };\n\n var par$1 = function (asyncValues, nu) {\n return nu(function (callback) {\n var r = [];\n var count = 0;\n var cb = function (i) {\n return function (value) {\n r[i] = value;\n count++;\n if (count >= asyncValues.length) {\n callback(r);\n }\n };\n };\n if (asyncValues.length === 0) {\n callback([]);\n } else {\n each$k(asyncValues, function (asyncValue, i) {\n asyncValue.get(cb(i));\n });\n }\n });\n };\n\n var par = function (futures) {\n return par$1(futures, Future.nu);\n };\n\n var value$1 = function (o) {\n var or = function (_opt) {\n return value$1(o);\n };\n var orThunk = function (_f) {\n return value$1(o);\n };\n var map = function (f) {\n return value$1(f(o));\n };\n var mapError = function (_f) {\n return value$1(o);\n };\n var each = function (f) {\n f(o);\n };\n var bind = function (f) {\n return f(o);\n };\n var fold = function (_, onValue) {\n return onValue(o);\n };\n var exists = function (f) {\n return f(o);\n };\n var forall = function (f) {\n return f(o);\n };\n var toOptional = function () {\n return Optional.some(o);\n };\n return {\n isValue: always,\n isError: never,\n getOr: constant(o),\n getOrThunk: constant(o),\n getOrDie: constant(o),\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: each,\n bind: bind,\n exists: exists,\n forall: forall,\n toOptional: toOptional\n };\n };\n var error = function (message) {\n var getOrThunk = function (f) {\n return f();\n };\n var getOrDie = function () {\n return die(String(message))();\n };\n var or = identity;\n var orThunk = function (f) {\n return f();\n };\n var map = function (_f) {\n return error(message);\n };\n var mapError = function (f) {\n return error(f(message));\n };\n var bind = function (_f) {\n return error(message);\n };\n var fold = function (onError, _) {\n return onError(message);\n };\n return {\n isValue: never,\n isError: always,\n getOr: identity,\n getOrThunk: getOrThunk,\n getOrDie: getOrDie,\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: noop,\n bind: bind,\n exists: never,\n forall: always,\n toOptional: Optional.none\n };\n };\n var fromOption = function (opt, err) {\n return opt.fold(function () {\n return error(err);\n }, value$1);\n };\n var Result = {\n value: value$1,\n error: error,\n fromOption: fromOption\n };\n\n var generate$1 = function (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 var constructors = [];\n var adt = {};\n each$k(cases, function (acase, count) {\n var keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n var key = keys$1[0];\n var 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] = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var 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 var match = function (branches) {\n var 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 var allReqd = forall(constructors, function (reqKey) {\n return contains$3(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: function () {\n var foldArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n foldArgs[_i] = arguments[_i];\n }\n if (foldArgs.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n }\n var target = foldArgs[count];\n return target.apply(null, args);\n },\n match: match,\n log: function (label) {\n console.log(label, {\n constructors: constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n var Adt = { generate: generate$1 };\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 var unite = function (result) {\n return result.fold(identity, identity);\n };\n\n function 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 var ancestor$3 = function (scope, predicate, isRoot) {\n var element = scope.dom;\n var stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n var 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 var closest$3 = function (scope, predicate, isRoot) {\n var is = function (s, test) {\n return test(s);\n };\n return ClosestOrAncestor(is, ancestor$3, scope, predicate, isRoot);\n };\n var sibling$2 = function (scope, predicate) {\n var element = scope.dom;\n if (!element.parentNode) {\n return Optional.none();\n }\n return child(SugarElement.fromDom(element.parentNode), function (x) {\n return !eq(scope, x) && predicate(x);\n });\n };\n var child = function (scope, predicate) {\n var pred = function (node) {\n return predicate(SugarElement.fromDom(node));\n };\n var result = find$3(scope.dom.childNodes, pred);\n return result.map(SugarElement.fromDom);\n };\n\n var ancestor$2 = function (scope, selector, isRoot) {\n return ancestor$3(scope, function (e) {\n return is$2(e, selector);\n }, isRoot);\n };\n var descendant = function (scope, selector) {\n return one(selector, scope);\n };\n var closest$2 = function (scope, selector, isRoot) {\n var is = function (element, selector) {\n return is$2(element, selector);\n };\n return ClosestOrAncestor(is, ancestor$2, scope, selector, isRoot);\n };\n\n var promiseObj = window.Promise ? window.Promise : Promise$1;\n\n var requestAnimationFramePromise;\n var requestAnimationFrame = function (callback, element) {\n var requestAnimationFrameFunc = window.requestAnimationFrame;\n var vendors = [\n 'ms',\n 'moz',\n 'webkit'\n ];\n var featurefill = function (cb) {\n window.setTimeout(cb, 0);\n };\n for (var i = 0; i < vendors.length && !requestAnimationFrameFunc; i++) {\n requestAnimationFrameFunc = window[vendors[i] + 'RequestAnimationFrame'];\n }\n if (!requestAnimationFrameFunc) {\n requestAnimationFrameFunc = featurefill;\n }\n requestAnimationFrameFunc(callback, element);\n };\n var wrappedSetTimeout = function (callback, time) {\n if (typeof time !== 'number') {\n time = 0;\n }\n return setTimeout(callback, time);\n };\n var wrappedSetInterval = function (callback, time) {\n if (typeof time !== 'number') {\n time = 1;\n }\n return setInterval(callback, time);\n };\n var wrappedClearTimeout = function (id) {\n return clearTimeout(id);\n };\n var wrappedClearInterval = function (id) {\n return clearInterval(id);\n };\n var debounce = function (callback, time) {\n var timer;\n var func = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n clearTimeout(timer);\n timer = wrappedSetTimeout(function () {\n callback.apply(this, args);\n }, time);\n };\n func.stop = function () {\n clearTimeout(timer);\n };\n return func;\n };\n var Delay = {\n requestAnimationFrame: function (callback, element) {\n if (requestAnimationFramePromise) {\n requestAnimationFramePromise.then(callback);\n return;\n }\n requestAnimationFramePromise = new promiseObj(function (resolve) {\n if (!element) {\n element = document.body;\n }\n requestAnimationFrame(resolve, element);\n }).then(callback);\n },\n setTimeout: wrappedSetTimeout,\n setInterval: wrappedSetInterval,\n setEditorTimeout: function (editor, callback, time) {\n return wrappedSetTimeout(function () {\n if (!editor.removed) {\n callback();\n }\n }, time);\n },\n setEditorInterval: function (editor, callback, time) {\n var timer = wrappedSetInterval(function () {\n if (!editor.removed) {\n callback();\n } else {\n clearInterval(timer);\n }\n }, time);\n return timer;\n },\n debounce: debounce,\n throttle: debounce,\n clearInterval: wrappedClearInterval,\n clearTimeout: wrappedClearTimeout\n };\n\n var StyleSheetLoader = function (documentOrShadowRoot, settings) {\n if (settings === void 0) {\n settings = {};\n }\n var idCount = 0;\n var loadedStates = {};\n var edos = SugarElement.fromDom(documentOrShadowRoot);\n var doc = documentOrOwner(edos);\n var maxLoadTime = settings.maxLoadTime || 5000;\n var _setReferrerPolicy = function (referrerPolicy) {\n settings.referrerPolicy = referrerPolicy;\n };\n var addStyle = function (element) {\n append$1(getStyleContainer(edos), element);\n };\n var removeStyle = function (id) {\n var styleContainer = getStyleContainer(edos);\n descendant(styleContainer, '#' + id).each(remove$7);\n };\n var getOrCreateState = function (url) {\n return get$9(loadedStates, url).getOrThunk(function () {\n return {\n id: 'mce-u' + idCount++,\n passed: [],\n failed: [],\n count: 0\n };\n });\n };\n var load = function (url, success, failure) {\n var link;\n var urlWithSuffix = Tools._addCacheSuffix(url);\n var state = getOrCreateState(urlWithSuffix);\n loadedStates[urlWithSuffix] = state;\n state.count++;\n var resolve = function (callbacks, status) {\n var i = callbacks.length;\n while (i--) {\n callbacks[i]();\n }\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 var passed = function () {\n return resolve(state.passed, 2);\n };\n var failed = function () {\n return resolve(state.failed, 3);\n };\n var wait = function (testCallback, waitCallback) {\n if (!testCallback()) {\n if (Date.now() - startTime < maxLoadTime) {\n Delay.setTimeout(waitCallback);\n } else {\n failed();\n }\n }\n };\n var waitForWebKitLinkLoaded = function () {\n wait(function () {\n var styleSheets = documentOrShadowRoot.styleSheets;\n var i = styleSheets.length;\n while (i--) {\n var styleSheet = styleSheets[i];\n var owner = styleSheet.ownerNode;\n if (owner && owner.id === link.id) {\n passed();\n return true;\n }\n }\n return false;\n }, waitForWebKitLinkLoaded);\n };\n if (success) {\n state.passed.push(success);\n }\n if (failure) {\n state.failed.push(failure);\n }\n if (state.status === 1) {\n return;\n }\n if (state.status === 2) {\n passed();\n return;\n }\n if (state.status === 3) {\n failed();\n return;\n }\n state.status = 1;\n var linkElem = SugarElement.fromTag('link', doc.dom);\n setAll$1(linkElem, {\n rel: 'stylesheet',\n type: 'text/css',\n id: state.id\n });\n var startTime = Date.now();\n if (settings.contentCssCors) {\n set$1(linkElem, 'crossOrigin', 'anonymous');\n }\n if (settings.referrerPolicy) {\n set$1(linkElem, 'referrerpolicy', settings.referrerPolicy);\n }\n link = linkElem.dom;\n link.onload = waitForWebKitLinkLoaded;\n link.onerror = failed;\n addStyle(linkElem);\n set$1(linkElem, 'href', urlWithSuffix);\n };\n var loadF = function (url) {\n return Future.nu(function (resolve) {\n load(url, compose(resolve, constant(Result.value(url))), compose(resolve, constant(Result.error(url))));\n });\n };\n var loadAll = function (urls, success, failure) {\n par(map$3(urls, loadF)).get(function (result) {\n var parts = partition(result, function (r) {\n return r.isValue();\n });\n if (parts.fail.length > 0) {\n failure(parts.fail.map(unite));\n } else {\n success(parts.pass.map(unite));\n }\n });\n };\n var unload = function (url) {\n var urlWithSuffix = Tools._addCacheSuffix(url);\n get$9(loadedStates, urlWithSuffix).each(function (state) {\n var count = --state.count;\n if (count === 0) {\n delete loadedStates[urlWithSuffix];\n removeStyle(state.id);\n }\n });\n };\n var unloadAll = function (urls) {\n each$k(urls, function (url) {\n unload(url);\n });\n };\n return {\n load: load,\n loadAll: loadAll,\n unload: unload,\n unloadAll: unloadAll,\n _setReferrerPolicy: _setReferrerPolicy\n };\n };\n\n var create$8 = function () {\n var map = new WeakMap();\n var forElement = function (referenceElement, settings) {\n var root = getRootNode(referenceElement);\n var rootDom = root.dom;\n return Optional.from(map.get(rootDom)).getOrThunk(function () {\n var sl = StyleSheetLoader(rootDom, settings);\n map.set(rootDom, sl);\n return sl;\n });\n };\n return { forElement: forElement };\n };\n var instance = create$8();\n\n var DomTreeWalker = function () {\n function DomTreeWalker(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 DomTreeWalker.prototype.current = function () {\n return this.node;\n };\n DomTreeWalker.prototype.next = function (shallow) {\n this.node = this.findSibling(this.node, 'firstChild', 'nextSibling', shallow);\n return this.node;\n };\n DomTreeWalker.prototype.prev = function (shallow) {\n this.node = this.findSibling(this.node, 'lastChild', 'previousSibling', shallow);\n return this.node;\n };\n DomTreeWalker.prototype.prev2 = function (shallow) {\n this.node = this.findPreviousNode(this.node, 'lastChild', 'previousSibling', shallow);\n return this.node;\n };\n DomTreeWalker.prototype.findSibling = function (node, startName, siblingName, shallow) {\n var sibling, parent;\n if (node) {\n if (!shallow && node[startName]) {\n return node[startName];\n }\n if (node !== this.rootNode) {\n sibling = node[siblingName];\n if (sibling) {\n return sibling;\n }\n for (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 };\n DomTreeWalker.prototype.findPreviousNode = function (node, startName, siblingName, shallow) {\n var sibling, parent, child;\n if (node) {\n sibling = node[siblingName];\n if (this.rootNode && sibling === this.rootNode) {\n return;\n }\n if (sibling) {\n if (!shallow) {\n for (child = sibling[startName]; child; child = child[startName]) {\n if (!child[startName]) {\n return child;\n }\n }\n }\n return sibling;\n }\n parent = node.parentNode;\n if (parent && parent !== this.rootNode) {\n return parent;\n }\n }\n };\n return DomTreeWalker;\n }();\n\n var blocks = [\n 'article',\n 'aside',\n 'details',\n 'div',\n 'dt',\n 'figcaption',\n 'footer',\n 'form',\n 'fieldset',\n 'header',\n 'hgroup',\n 'html',\n 'main',\n 'nav',\n 'section',\n 'summary',\n 'body',\n 'p',\n 'dl',\n 'multicol',\n 'dd',\n 'figure',\n 'address',\n 'center',\n 'blockquote',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'listing',\n 'xmp',\n 'pre',\n 'plaintext',\n 'menu',\n 'dir',\n 'ul',\n 'ol',\n 'li',\n 'hr',\n 'table',\n 'tbody',\n 'thead',\n 'tfoot',\n 'th',\n 'tr',\n 'td',\n 'caption'\n ];\n var tableCells = [\n 'td',\n 'th'\n ];\n var tableSections = [\n 'thead',\n 'tbody',\n 'tfoot'\n ];\n var 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 var headings = [\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ];\n var listItems$1 = [\n 'li',\n 'dd',\n 'dt'\n ];\n var lists = [\n 'ul',\n 'ol',\n 'dl'\n ];\n var wsElements = [\n 'pre',\n 'script',\n 'textarea',\n 'style'\n ];\n var lazyLookup = function (items) {\n var lookup;\n return function (node) {\n lookup = lookup ? lookup : mapToObject(items, always);\n return has$2(lookup, name(node));\n };\n };\n var isHeading = lazyLookup(headings);\n var isBlock$2 = lazyLookup(blocks);\n var isTable$2 = function (node) {\n return name(node) === 'table';\n };\n var isInline$1 = function (node) {\n return isElement$6(node) && !isBlock$2(node);\n };\n var isBr$4 = function (node) {\n return isElement$6(node) && name(node) === 'br';\n };\n var isTextBlock$2 = lazyLookup(textBlocks);\n var isList = lazyLookup(lists);\n var isListItem = lazyLookup(listItems$1);\n var isTableSection = lazyLookup(tableSections);\n var isTableCell$4 = lazyLookup(tableCells);\n var isWsPreserveElement = lazyLookup(wsElements);\n\n var ancestor$1 = function (scope, selector, isRoot) {\n return ancestor$2(scope, selector, isRoot).isSome();\n };\n\n var zeroWidth = '\\uFEFF';\n var nbsp = '\\xA0';\n var isZwsp$1 = function (char) {\n return char === zeroWidth;\n };\n var removeZwsp = function (s) {\n return s.replace(/\\uFEFF/g, '');\n };\n\n var ZWSP$1 = zeroWidth;\n var isZwsp = isZwsp$1;\n var trim$2 = removeZwsp;\n\n var isElement$4 = isElement$5;\n var isText$6 = isText$7;\n var isCaretContainerBlock$1 = function (node) {\n if (isText$6(node)) {\n node = node.parentNode;\n }\n return isElement$4(node) && node.hasAttribute('data-mce-caret');\n };\n var isCaretContainerInline = function (node) {\n return isText$6(node) && isZwsp(node.data);\n };\n var isCaretContainer$2 = function (node) {\n return isCaretContainerBlock$1(node) || isCaretContainerInline(node);\n };\n var hasContent = function (node) {\n return node.firstChild !== node.lastChild || !isBr$5(node.firstChild);\n };\n var insertInline$1 = function (node, before) {\n var doc = node.ownerDocument;\n var textNode = doc.createTextNode(ZWSP$1);\n var parentNode = node.parentNode;\n if (!before) {\n var sibling = node.nextSibling;\n if (isText$6(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.insertBefore(textNode, node.nextSibling);\n } else {\n parentNode.appendChild(textNode);\n }\n } else {\n var sibling = node.previousSibling;\n if (isText$6(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.insertBefore(textNode, node);\n }\n return textNode;\n };\n var isBeforeInline = function (pos) {\n var container = pos.container();\n if (!isText$7(container)) {\n return false;\n }\n return container.data.charAt(pos.offset()) === ZWSP$1 || pos.isAtStart() && isCaretContainerInline(container.previousSibling);\n };\n var isAfterInline = function (pos) {\n var container = pos.container();\n if (!isText$7(container)) {\n return false;\n }\n return container.data.charAt(pos.offset() - 1) === ZWSP$1 || pos.isAtEnd() && isCaretContainerInline(container.nextSibling);\n };\n var createBogusBr = function () {\n var br = document.createElement('br');\n br.setAttribute('data-mce-bogus', '1');\n return br;\n };\n var insertBlock$1 = function (blockName, node, before) {\n var doc = node.ownerDocument;\n var blockNode = doc.createElement(blockName);\n blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after');\n blockNode.setAttribute('data-mce-bogus', 'all');\n blockNode.appendChild(createBogusBr());\n var parentNode = node.parentNode;\n if (!before) {\n if (node.nextSibling) {\n parentNode.insertBefore(blockNode, node.nextSibling);\n } else {\n parentNode.appendChild(blockNode);\n }\n } else {\n parentNode.insertBefore(blockNode, node);\n }\n return blockNode;\n };\n var startsWithCaretContainer$1 = function (node) {\n return isText$6(node) && node.data[0] === ZWSP$1;\n };\n var endsWithCaretContainer$1 = function (node) {\n return isText$6(node) && node.data[node.data.length - 1] === ZWSP$1;\n };\n var trimBogusBr = function (elm) {\n var brs = elm.getElementsByTagName('br');\n var lastBr = brs[brs.length - 1];\n if (isBogus$2(lastBr)) {\n lastBr.parentNode.removeChild(lastBr);\n }\n };\n var showCaretContainerBlock = function (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('_moz_abspos');\n return caretContainer;\n }\n return null;\n };\n var isRangeInCaretContainerBlock = function (range) {\n return isCaretContainerBlock$1(range.startContainer);\n };\n\n var isContentEditableTrue$3 = isContentEditableTrue$4;\n var isContentEditableFalse$a = isContentEditableFalse$b;\n var isBr$3 = isBr$5;\n var isText$5 = isText$7;\n var isInvalidTextElement = matchNodeNames([\n 'script',\n 'style',\n 'textarea'\n ]);\n var isAtomicInline = matchNodeNames([\n 'img',\n 'input',\n 'textarea',\n 'hr',\n 'iframe',\n 'video',\n 'audio',\n 'object',\n 'embed'\n ]);\n var isTable$1 = matchNodeNames(['table']);\n var isCaretContainer$1 = isCaretContainer$2;\n var isCaretCandidate$3 = function (node) {\n if (isCaretContainer$1(node)) {\n return false;\n }\n if (isText$5(node)) {\n return !isInvalidTextElement(node.parentNode);\n }\n return isAtomicInline(node) || isBr$3(node) || isTable$1(node) || isNonUiContentEditableFalse(node);\n };\n var isUnselectable = function (node) {\n return isElement$5(node) && node.getAttribute('unselectable') === 'true';\n };\n var isNonUiContentEditableFalse = function (node) {\n return isUnselectable(node) === false && isContentEditableFalse$a(node);\n };\n var isInEditable = function (node, root) {\n for (node = node.parentNode; node && node !== root; node = node.parentNode) {\n if (isNonUiContentEditableFalse(node)) {\n return false;\n }\n if (isContentEditableTrue$3(node)) {\n return true;\n }\n }\n return true;\n };\n var isAtomicContentEditableFalse = function (node) {\n if (!isNonUiContentEditableFalse(node)) {\n return false;\n }\n return foldl(from(node.getElementsByTagName('*')), function (result, elm) {\n return result || isContentEditableTrue$3(elm);\n }, false) !== true;\n };\n var isAtomic$1 = function (node) {\n return isAtomicInline(node) || isAtomicContentEditableFalse(node);\n };\n var isEditableCaretCandidate$1 = function (node, root) {\n return isCaretCandidate$3(node) && isInEditable(node, root);\n };\n\n var whiteSpaceRegExp$1 = /^[ \\t\\r\\n]*$/;\n var isWhitespaceText = function (text) {\n return whiteSpaceRegExp$1.test(text);\n };\n\n var hasWhitespacePreserveParent = function (node, rootNode) {\n var rootElement = SugarElement.fromDom(rootNode);\n var startNode = SugarElement.fromDom(node);\n return ancestor$1(startNode, 'pre,code', curry(eq, rootElement));\n };\n var isWhitespace = function (node, rootNode) {\n return isText$7(node) && isWhitespaceText(node.data) && hasWhitespacePreserveParent(node, rootNode) === false;\n };\n var isNamedAnchor = function (node) {\n return isElement$5(node) && node.nodeName === 'A' && !node.hasAttribute('href') && (node.hasAttribute('name') || node.hasAttribute('id'));\n };\n var isContent$1 = function (node, rootNode) {\n return isCaretCandidate$3(node) && isWhitespace(node, rootNode) === false || isNamedAnchor(node) || isBookmark(node);\n };\n var isBookmark = hasAttribute('data-mce-bookmark');\n var isBogus$1 = hasAttribute('data-mce-bogus');\n var isBogusAll = hasAttributeValue('data-mce-bogus', 'all');\n var isEmptyNode = function (targetNode, skipBogus) {\n var brCount = 0;\n if (isContent$1(targetNode, targetNode)) {\n return false;\n } else {\n var node = targetNode.firstChild;\n if (!node) {\n return true;\n }\n var walker = new DomTreeWalker(node, targetNode);\n do {\n if (skipBogus) {\n if (isBogusAll(node)) {\n node = walker.next(true);\n continue;\n }\n if (isBogus$1(node)) {\n node = walker.next();\n continue;\n }\n }\n if (isBr$5(node)) {\n brCount++;\n node = walker.next();\n continue;\n }\n if (isContent$1(node, targetNode)) {\n return false;\n }\n node = walker.next();\n } while (node);\n return brCount <= 1;\n }\n };\n var isEmpty$2 = function (elm, skipBogus) {\n if (skipBogus === void 0) {\n skipBogus = true;\n }\n return isEmptyNode(elm.dom, skipBogus);\n };\n\n var isSpan = function (node) {\n return node.nodeName.toLowerCase() === 'span';\n };\n var isInlineContent = function (node, root) {\n return isNonNullable(node) && (isContent$1(node, root) || isInline$1(SugarElement.fromDom(node)));\n };\n var surroundedByInlineContent = function (node, root) {\n var prev = new DomTreeWalker(node, root).prev(false);\n var next = new DomTreeWalker(node, root).next(false);\n var prevIsInline = isUndefined(prev) || isInlineContent(prev, root);\n var nextIsInline = isUndefined(next) || isInlineContent(next, root);\n return prevIsInline && nextIsInline;\n };\n var isBookmarkNode$2 = function (node) {\n return isSpan(node) && node.getAttribute('data-mce-type') === 'bookmark';\n };\n var isKeepTextNode = function (node, root) {\n return isText$7(node) && node.data.length > 0 && surroundedByInlineContent(node, root);\n };\n var isKeepElement = function (node) {\n return isElement$5(node) ? node.childNodes.length > 0 : false;\n };\n var isDocument = function (node) {\n return isDocumentFragment(node) || isDocument$1(node);\n };\n var trimNode = function (dom, node, root) {\n var rootNode = root || node;\n if (isElement$5(node) && isBookmarkNode$2(node)) {\n return node;\n }\n var children = node.childNodes;\n for (var i = children.length - 1; i >= 0; i--) {\n trimNode(dom, children[i], rootNode);\n }\n if (isElement$5(node)) {\n var currentChildren = node.childNodes;\n if (currentChildren.length === 1 && isBookmarkNode$2(currentChildren[0])) {\n node.parentNode.insertBefore(currentChildren[0], node);\n }\n }\n if (!isDocument(node) && !isContent$1(node, rootNode) && !isKeepElement(node) && !isKeepTextNode(node, rootNode)) {\n dom.remove(node);\n }\n return node;\n };\n\n var makeMap$3 = Tools.makeMap;\n var attrsCharsRegExp = /[&<>\\\"\\u0060\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n var textCharsRegExp = /[<>&\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n var rawCharsRegExp = /[<>&\\\"\\']/g;\n var entityRegExp = /&#([a-z0-9]+);?|&([a-z0-9]+);/gi;\n var 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 var baseEntities = {\n '\"': '"',\n '\\'': ''',\n '<': '<',\n '>': '>',\n '&': '&',\n '`': '`'\n };\n var reverseEntities = {\n '<': '<',\n '>': '>',\n '&': '&',\n '"': '\"',\n ''': '\\''\n };\n var nativeDecode = function (text) {\n var elm = SugarElement.fromTag('div').dom;\n elm.innerHTML = text;\n return elm.textContent || elm.innerText || text;\n };\n var buildEntitiesLookup = function (items, radix) {\n var i, chr, entity;\n var lookup = {};\n if (items) {\n items = items.split(',');\n radix = radix || 10;\n for (i = 0; i < items.length; i += 2) {\n chr = String.fromCharCode(parseInt(items[i], radix));\n if (!baseEntities[chr]) {\n entity = '&' + items[i + 1] + ';';\n lookup[chr] = entity;\n lookup[entity] = chr;\n }\n }\n return lookup;\n }\n };\n var 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 var encodeRaw = function (text, attr) {\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n return baseEntities[chr] || chr;\n });\n };\n var encodeAllRaw = function (text) {\n return ('' + text).replace(rawCharsRegExp, function (chr) {\n return baseEntities[chr] || chr;\n });\n };\n var encodeNumeric = function (text, attr) {\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (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 };\n var encodeNamed = function (text, attr, entities) {\n entities = entities || namedEntities;\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n return baseEntities[chr] || entities[chr] || chr;\n });\n };\n var getEncodeFunc = function (name, entities) {\n var entitiesMap = buildEntitiesLookup(entities) || namedEntities;\n var encodeNamedAndNumeric = function (text, attr) {\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (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 };\n var encodeCustomNamed = function (text, attr) {\n return encodeNamed(text, attr, entitiesMap);\n };\n var 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 var decode = function (text) {\n return text.replace(entityRegExp, function (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 };\n var Entities = {\n encodeRaw: encodeRaw,\n encodeAllRaw: encodeAllRaw,\n encodeNumeric: encodeNumeric,\n encodeNamed: encodeNamed,\n getEncodeFunc: getEncodeFunc,\n decode: decode\n };\n\n var mapCache = {}, dummyObj = {};\n var makeMap$2 = Tools.makeMap, each$h = Tools.each, extend$5 = Tools.extend, explode$3 = Tools.explode, inArray$2 = Tools.inArray;\n var split$1 = function (items, delim) {\n items = Tools.trim(items);\n return items ? items.split(delim || ' ') : [];\n };\n var createMap = function (defaultValue, extendWith) {\n var value = makeMap$2(defaultValue, ' ', makeMap$2(defaultValue.toUpperCase(), ' '));\n return extend$5(value, extendWith);\n };\n var getTextRootBlockElements = function (schema) {\n return createMap('td th li dt dd figcaption caption details summary', schema.getTextBlockElements());\n };\n var compileSchema = function (type) {\n var schema = {};\n var globalAttributes, blockContent;\n var phrasingContent, flowContent, html4BlockContent, html4PhrasingContent;\n var add = function (name, attributes, children) {\n var ni, attributesOrder, element;\n var arrayToMap = function (array, obj) {\n var map = {};\n var i, l;\n for (i = 0, l = array.length; i < l; i++) {\n map[array[i]] = obj || {};\n }\n return map;\n };\n children = children || [];\n attributes = attributes || '';\n if (typeof children === 'string') {\n children = split$1(children);\n }\n var names = split$1(name);\n ni = names.length;\n while (ni--) {\n attributesOrder = split$1([\n globalAttributes,\n attributes\n ].join(' '));\n element = {\n attributes: arrayToMap(attributesOrder),\n attributesOrder: attributesOrder,\n children: arrayToMap(children, dummyObj)\n };\n schema[names[ni]] = element;\n }\n };\n var addAttrs = function (name, attributes) {\n var ni, schemaItem, i, l;\n var names = split$1(name);\n ni = names.length;\n var attrs = split$1(attributes);\n while (ni--) {\n schemaItem = schema[names[ni]];\n for (i = 0, l = attrs.length; i < l; i++) {\n schemaItem.attributes[attrs[i]] = {};\n schemaItem.attributesOrder.push(attrs[i]);\n }\n }\n };\n if (mapCache[type]) {\n return mapCache[type];\n }\n globalAttributes = 'id accesskey class dir lang style tabindex title role';\n blockContent = 'address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul';\n phrasingContent = 'a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd ' + 'label map noscript object q s samp script select small span strong sub sup ' + 'textarea u var #text #comment';\n if (type !== 'html4') {\n globalAttributes += ' contenteditable contextmenu draggable dropzone ' + 'hidden spellcheck translate';\n blockContent += ' article aside details dialog figure main header footer hgroup section nav';\n phrasingContent += ' audio canvas command datalist mark meter output picture ' + 'progress time wbr video ruby bdi keygen';\n }\n if (type !== 'html5-strict') {\n globalAttributes += ' xml:lang';\n html4PhrasingContent = 'acronym applet basefont big font strike tt';\n phrasingContent = [\n phrasingContent,\n html4PhrasingContent\n ].join(' ');\n each$h(split$1(html4PhrasingContent), function (name) {\n add(name, '', phrasingContent);\n });\n html4BlockContent = 'center dir isindex noframes';\n blockContent = [\n blockContent,\n html4BlockContent\n ].join(' ');\n flowContent = [\n blockContent,\n phrasingContent\n ].join(' ');\n each$h(split$1(html4BlockContent), function (name) {\n add(name, '', flowContent);\n });\n }\n flowContent = flowContent || [\n blockContent,\n phrasingContent\n ].join(' ');\n add('html', 'manifest', 'head body');\n add('head', '', 'base command link meta noscript script style title');\n add('title hr noscript br');\n add('base', 'href target');\n add('link', 'href rel media hreflang type sizes hreflang');\n add('meta', 'name http-equiv content charset');\n add('style', 'media type scoped');\n add('script', 'src async defer type charset');\n add('body', 'onafterprint onbeforeprint onbeforeunload onblur onerror onfocus ' + 'onhashchange onload onmessage onoffline ononline onpagehide onpageshow ' + 'onpopstate onresize onscroll onstorage onunload', flowContent);\n add('address dt dd div caption', '', flowContent);\n add('h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn', '', phrasingContent);\n add('blockquote', 'cite', flowContent);\n add('ol', 'reversed start type', 'li');\n add('ul', '', 'li');\n add('li', 'value', flowContent);\n add('dl', '', 'dt dd');\n add('a', 'href target rel media hreflang type', phrasingContent);\n add('q', 'cite', phrasingContent);\n add('ins del', 'cite datetime', flowContent);\n add('img', 'src sizes srcset alt usemap ismap width height');\n add('iframe', 'src name width height', flowContent);\n add('embed', 'src type width height');\n add('object', 'data type typemustmatch name usemap form width height', [\n flowContent,\n 'param'\n ].join(' '));\n add('param', 'name value');\n add('map', 'name', [\n flowContent,\n 'area'\n ].join(' '));\n add('area', 'alt coords shape href target rel media hreflang type');\n add('table', 'border', 'caption colgroup thead tfoot tbody tr' + (type === 'html4' ? ' col' : ''));\n add('colgroup', 'span', 'col');\n add('col', 'span');\n add('tbody thead tfoot', '', 'tr');\n add('tr', '', 'td th');\n add('td', 'colspan rowspan headers', flowContent);\n add('th', 'colspan rowspan headers scope abbr', flowContent);\n add('form', 'accept-charset action autocomplete enctype method name novalidate target', flowContent);\n add('fieldset', 'disabled form name', [\n flowContent,\n 'legend'\n ].join(' '));\n add('label', 'form for', phrasingContent);\n add('input', 'accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate ' + 'formtarget height list max maxlength min multiple name pattern readonly required size src step type value width');\n add('button', 'disabled form formaction formenctype formmethod formnovalidate formtarget name type value', type === 'html4' ? flowContent : phrasingContent);\n add('select', 'disabled form multiple name required size', 'option optgroup');\n add('optgroup', 'disabled label', 'option');\n add('option', 'disabled label selected value');\n add('textarea', 'cols dirname disabled form maxlength name readonly required rows wrap');\n add('menu', 'type label', [\n flowContent,\n 'li'\n ].join(' '));\n add('noscript', '', flowContent);\n if (type !== 'html4') {\n add('wbr');\n add('ruby', '', [\n phrasingContent,\n 'rt rp'\n ].join(' '));\n add('figcaption', '', flowContent);\n add('mark rt rp summary bdi', '', phrasingContent);\n add('canvas', 'width height', flowContent);\n add('video', 'src crossorigin poster preload autoplay mediagroup loop ' + 'muted controls width height buffered', [\n flowContent,\n 'track source'\n ].join(' '));\n add('audio', 'src crossorigin preload autoplay mediagroup loop muted controls ' + 'buffered volume', [\n flowContent,\n 'track source'\n ].join(' '));\n add('picture', '', 'img source');\n add('source', 'src srcset type media sizes');\n add('track', 'kind src srclang label default');\n add('datalist', '', [\n phrasingContent,\n 'option'\n ].join(' '));\n add('article section nav aside main header footer', '', flowContent);\n add('hgroup', '', 'h1 h2 h3 h4 h5 h6');\n add('figure', '', [\n flowContent,\n 'figcaption'\n ].join(' '));\n add('time', 'datetime', phrasingContent);\n add('dialog', 'open', flowContent);\n add('command', 'type label icon disabled checked radiogroup command');\n add('output', 'for form name', phrasingContent);\n add('progress', 'value max', phrasingContent);\n add('meter', 'value min max low high optimum', phrasingContent);\n add('details', 'open', [\n flowContent,\n 'summary'\n ].join(' '));\n add('keygen', 'autofocus challenge disabled form keytype name');\n }\n if (type !== 'html5-strict') {\n addAttrs('script', 'language xml:space');\n addAttrs('style', 'xml:space');\n addAttrs('object', 'declare classid code codebase codetype archive standby align border hspace vspace');\n addAttrs('embed', 'align name hspace vspace');\n addAttrs('param', 'valuetype type');\n addAttrs('a', 'charset name rev shape coords');\n addAttrs('br', 'clear');\n addAttrs('applet', 'codebase archive code object alt name width height align hspace vspace');\n addAttrs('img', 'name longdesc align border hspace vspace');\n addAttrs('iframe', 'longdesc frameborder marginwidth marginheight scrolling align');\n addAttrs('font basefont', 'size color face');\n addAttrs('input', 'usemap align');\n addAttrs('select');\n addAttrs('textarea');\n addAttrs('h1 h2 h3 h4 h5 h6 div p legend caption', 'align');\n addAttrs('ul', 'type compact');\n addAttrs('li', 'type');\n addAttrs('ol dl menu dir', 'compact');\n addAttrs('pre', 'width xml:space');\n addAttrs('hr', 'align noshade size width');\n addAttrs('isindex', 'prompt');\n addAttrs('table', 'summary width frame rules cellspacing cellpadding align bgcolor');\n addAttrs('col', 'width align char charoff valign');\n addAttrs('colgroup', 'width align char charoff valign');\n addAttrs('thead', 'align char charoff valign');\n addAttrs('tr', 'align char charoff valign bgcolor');\n addAttrs('th', 'axis align char charoff valign nowrap bgcolor width height');\n addAttrs('form', 'accept');\n addAttrs('td', 'abbr axis scope align char charoff valign nowrap bgcolor width height');\n addAttrs('tfoot', 'align char charoff valign');\n addAttrs('tbody', 'align char charoff valign');\n addAttrs('area', 'nohref');\n addAttrs('body', 'background bgcolor text link vlink alink');\n }\n if (type !== 'html4') {\n addAttrs('input button select textarea', 'autofocus');\n addAttrs('input textarea', 'placeholder');\n addAttrs('a', 'download');\n addAttrs('link script img', 'crossorigin');\n addAttrs('img', 'loading');\n addAttrs('iframe', 'sandbox seamless allowfullscreen loading');\n }\n each$h(split$1('a form meter progress dfn'), function (name) {\n if (schema[name]) {\n delete schema[name].children[name];\n }\n });\n delete schema.caption.children.table;\n delete schema.script;\n mapCache[type] = schema;\n return schema;\n };\n var compileElementMap = function (value, mode) {\n var styles;\n if (value) {\n styles = {};\n if (typeof value === 'string') {\n value = { '*': value };\n }\n each$h(value, function (value, key) {\n styles[key] = styles[key.toUpperCase()] = mode === 'map' ? makeMap$2(value, /[, ]/) : explode$3(value, /[, ]/);\n });\n }\n return styles;\n };\n var Schema = function (settings) {\n var elements = {};\n var children = {};\n var patternElements = [];\n var customElementsMap = {}, specialElements = {};\n var createLookupTable = function (option, defaultValue, extendWith) {\n var value = settings[option];\n if (!value) {\n value = mapCache[option];\n if (!value) {\n value = createMap(defaultValue, extendWith);\n mapCache[option] = value;\n }\n } else {\n value = makeMap$2(value, /[, ]/, makeMap$2(value.toUpperCase(), /[, ]/));\n }\n return value;\n };\n settings = settings || {};\n var schemaItems = compileSchema(settings.schema);\n if (settings.verify_html === false) {\n settings.valid_elements = '*[*]';\n }\n var validStyles = compileElementMap(settings.valid_styles);\n var invalidStyles = compileElementMap(settings.invalid_styles, 'map');\n var validClasses = compileElementMap(settings.valid_classes, 'map');\n var whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code');\n var selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');\n var shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track');\n var boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls');\n var nonEmptyOrMoveCaretBeforeOnEnter = 'td th iframe video audio object script code';\n var nonEmptyElementsMap = createLookupTable('non_empty_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' pre', shortEndedElementsMap);\n var moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', nonEmptyOrMoveCaretBeforeOnEnter + ' table', shortEndedElementsMap);\n var textBlockElementsMap = createLookupTable('text_block_elements', 'h1 h2 h3 h4 h5 h6 p div address pre form ' + 'blockquote center dir fieldset header footer article section hgroup aside main nav figure');\n var blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + 'th tr td li ol ul caption dl dt dd noscript menu isindex option ' + 'datalist select optgroup figcaption details summary', textBlockElementsMap);\n var textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font s strike u var cite ' + 'dfn code mark q sup sub samp');\n each$h((settings.special || 'script noscript iframe noframes noembed title style textarea xmp').split(' '), function (name) {\n specialElements[name] = new RegExp(']*>', 'gi');\n });\n var patternToRegExp = function (str) {\n return new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$');\n };\n var addValidElements = function (validElements) {\n var ei, el, ai, al, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder, prefix, outputName, globalAttributes, globalAttributesOrder, value;\n var elementRuleRegExp = /^([#+\\-])?([^\\[!\\/]+)(?:\\/([^\\[!]+))?(?:(!?)\\[([^\\]]+)])?$/, attrRuleRegExp = /^([!\\-])?(\\w+[\\\\:]:\\w+|[^=:<]+)?(?:([=:<])(.*))?$/, hasPatternsRegExp = /[*?+]/;\n if (validElements) {\n var validElementsArr = split$1(validElements, ',');\n if (elements['@']) {\n globalAttributes = elements['@'].attributes;\n globalAttributesOrder = elements['@'].attributesOrder;\n }\n for (ei = 0, el = validElementsArr.length; ei < el; ei++) {\n matches = elementRuleRegExp.exec(validElementsArr[ei]);\n if (matches) {\n prefix = matches[1];\n elementName = matches[2];\n outputName = matches[3];\n attrData = matches[5];\n attributes = {};\n attributesOrder = [];\n element = {\n attributes: attributes,\n attributesOrder: attributesOrder\n };\n if (prefix === '#') {\n element.paddEmpty = true;\n }\n if (prefix === '-') {\n element.removeEmpty = true;\n }\n if (matches[4] === '!') {\n element.removeEmptyAttrs = true;\n }\n if (globalAttributes) {\n each$j(globalAttributes, function (value, key) {\n attributes[key] = value;\n });\n attributesOrder.push.apply(attributesOrder, globalAttributesOrder);\n }\n if (attrData) {\n attrData = split$1(attrData, '|');\n for (ai = 0, al = attrData.length; ai < al; ai++) {\n matches = attrRuleRegExp.exec(attrData[ai]);\n if (matches) {\n attr = {};\n attrType = matches[1];\n attrName = matches[2].replace(/[\\\\:]:/g, ':');\n prefix = matches[3];\n value = matches[4];\n if (attrType === '!') {\n element.attributesRequired = element.attributesRequired || [];\n element.attributesRequired.push(attrName);\n attr.required = true;\n }\n if (attrType === '-') {\n delete attributes[attrName];\n attributesOrder.splice(inArray$2(attributesOrder, attrName), 1);\n continue;\n }\n if (prefix) {\n if (prefix === '=') {\n element.attributesDefault = element.attributesDefault || [];\n element.attributesDefault.push({\n name: attrName,\n value: value\n });\n attr.defaultValue = value;\n }\n if (prefix === ':') {\n element.attributesForced = element.attributesForced || [];\n element.attributesForced.push({\n name: attrName,\n value: value\n });\n attr.forcedValue = value;\n }\n if (prefix === '<') {\n attr.validValues = makeMap$2(value, '?');\n }\n }\n if (hasPatternsRegExp.test(attrName)) {\n element.attributePatterns = element.attributePatterns || [];\n attr.pattern = patternToRegExp(attrName);\n element.attributePatterns.push(attr);\n } else {\n if (!attributes[attrName]) {\n attributesOrder.push(attrName);\n }\n attributes[attrName] = attr;\n }\n }\n }\n }\n if (!globalAttributes && elementName === '@') {\n globalAttributes = attributes;\n globalAttributesOrder = attributesOrder;\n }\n if (outputName) {\n element.outputName = elementName;\n elements[outputName] = element;\n }\n if (hasPatternsRegExp.test(elementName)) {\n element.pattern = patternToRegExp(elementName);\n patternElements.push(element);\n } else {\n elements[elementName] = element;\n }\n }\n }\n }\n };\n var setValidElements = function (validElements) {\n elements = {};\n patternElements = [];\n addValidElements(validElements);\n each$h(schemaItems, function (element, name) {\n children[name] = element.children;\n });\n };\n var addCustomElements = function (customElements) {\n var customElementRegExp = /^(~)?(.+)$/;\n if (customElements) {\n mapCache.text_block_elements = mapCache.block_elements = null;\n each$h(split$1(customElements, ','), function (rule) {\n var matches = customElementRegExp.exec(rule), inline = matches[1] === '~', cloneName = inline ? 'span' : 'div', name = matches[2];\n children[name] = children[cloneName];\n customElementsMap[name] = cloneName;\n if (!inline) {\n blockElementsMap[name.toUpperCase()] = {};\n blockElementsMap[name] = {};\n }\n if (!elements[name]) {\n var customRule = elements[cloneName];\n customRule = extend$5({}, customRule);\n delete customRule.removeEmptyAttrs;\n delete customRule.removeEmpty;\n elements[name] = customRule;\n }\n each$h(children, function (element, elmName) {\n if (element[cloneName]) {\n children[elmName] = element = extend$5({}, children[elmName]);\n element[name] = element[cloneName];\n }\n });\n });\n }\n };\n var addValidChildren = function (validChildren) {\n var 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 mapCache[settings.schema] = null;\n if (validChildren) {\n each$h(split$1(validChildren, ','), function (rule) {\n var matches = childRuleRegExp.exec(rule);\n var parent, prefix;\n if (matches) {\n prefix = matches[1];\n if (prefix) {\n parent = children[matches[2]];\n } else {\n parent = children[matches[2]] = { '#comment': {} };\n }\n parent = children[matches[2]];\n each$h(split$1(matches[3], '|'), function (child) {\n if (prefix === '-') {\n delete parent[child];\n } else {\n parent[child] = {};\n }\n });\n }\n });\n }\n };\n var getElementRule = function (name) {\n var element = elements[name], i;\n if (element) {\n return element;\n }\n i = patternElements.length;\n while (i--) {\n element = patternElements[i];\n if (element.pattern.test(name)) {\n return element;\n }\n }\n };\n if (!settings.valid_elements) {\n each$h(schemaItems, function (element, name) {\n elements[name] = {\n attributes: element.attributes,\n attributesOrder: element.attributesOrder\n };\n children[name] = element.children;\n });\n if (settings.schema !== 'html5') {\n each$h(split$1('strong/b em/i'), function (item) {\n var items = split$1(item, '/');\n elements[items[1]].outputName = items[0];\n });\n }\n each$h(textInlineElementsMap, function (_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$h(split$1('ol ul blockquote a table tbody'), function (name) {\n if (elements[name]) {\n elements[name].removeEmpty = true;\n }\n });\n each$h(split$1('p h1 h2 h3 h4 h5 h6 th td pre div address caption li'), function (name) {\n elements[name].paddEmpty = true;\n });\n each$h(split$1('span'), function (name) {\n elements[name].removeEmptyAttrs = true;\n });\n } else {\n setValidElements(settings.valid_elements);\n }\n addCustomElements(settings.custom_elements);\n addValidChildren(settings.valid_children);\n addValidElements(settings.extended_valid_elements);\n addValidChildren('+ol[ul|ol],+ul[ul|ol]');\n each$h({\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 }, function (parents, item) {\n if (elements[item]) {\n elements[item].parentsRequired = split$1(parents);\n }\n });\n if (settings.invalid_elements) {\n each$h(explode$3(settings.invalid_elements), function (item) {\n if (elements[item]) {\n delete elements[item];\n }\n });\n }\n if (!getElementRule('span')) {\n addValidElements('span[!data-mce-type|*]');\n }\n var getValidStyles = constant(validStyles);\n var getInvalidStyles = constant(invalidStyles);\n var getValidClasses = constant(validClasses);\n var getBoolAttrs = constant(boolAttrMap);\n var getBlockElements = constant(blockElementsMap);\n var getTextBlockElements = constant(textBlockElementsMap);\n var getTextInlineElements = constant(textInlineElementsMap);\n var getShortEndedElements = constant(shortEndedElementsMap);\n var getSelfClosingElements = constant(selfClosingElementsMap);\n var getNonEmptyElements = constant(nonEmptyElementsMap);\n var getMoveCaretBeforeOnEnterElements = constant(moveCaretBeforeOnEnterElementsMap);\n var getWhiteSpaceElements = constant(whiteSpaceElementsMap);\n var getSpecialElements = constant(specialElements);\n var isValidChild = function (name, child) {\n var parent = children[name.toLowerCase()];\n return !!(parent && parent[child.toLowerCase()]);\n };\n var isValid = function (name, attr) {\n var attrPatterns, i;\n var rule = getElementRule(name);\n if (rule) {\n if (attr) {\n if (rule.attributes[attr]) {\n return true;\n }\n attrPatterns = rule.attributePatterns;\n if (attrPatterns) {\n i = attrPatterns.length;\n while (i--) {\n if (attrPatterns[i].pattern.test(name)) {\n return true;\n }\n }\n }\n } else {\n return true;\n }\n }\n return false;\n };\n var getCustomElements = constant(customElementsMap);\n return {\n children: children,\n elements: elements,\n getValidStyles: getValidStyles,\n getValidClasses: getValidClasses,\n getBlockElements: getBlockElements,\n getInvalidStyles: getInvalidStyles,\n getShortEndedElements: getShortEndedElements,\n getTextBlockElements: getTextBlockElements,\n getTextInlineElements: getTextInlineElements,\n getBoolAttrs: getBoolAttrs,\n getElementRule: getElementRule,\n getSelfClosingElements: getSelfClosingElements,\n getNonEmptyElements: getNonEmptyElements,\n getMoveCaretBeforeOnEnterElements: getMoveCaretBeforeOnEnterElements,\n getWhiteSpaceElements: getWhiteSpaceElements,\n getSpecialElements: getSpecialElements,\n isValidChild: isValidChild,\n isValid: isValid,\n getCustomElements: getCustomElements,\n addValidElements: addValidElements,\n setValidElements: setValidElements,\n addCustomElements: addCustomElements,\n addValidChildren: addValidChildren\n };\n };\n\n var toHex = function (match, r, g, b) {\n var hex = function (val) {\n val = parseInt(val, 10).toString(16);\n return val.length > 1 ? val : '0' + val;\n };\n return '#' + hex(r) + hex(g) + hex(b);\n };\n var Styles = function (settings, schema) {\n var _this = this;\n var rgbRegExp = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/gi;\n var urlOrStrRegExp = /(?:url(?:(?:\\(\\s*\\\"([^\\\"]+)\\\"\\s*\\))|(?:\\(\\s*\\'([^\\']+)\\'\\s*\\))|(?:\\(\\s*([^)\\s]+)\\s*\\))))|(?:\\'([^\\']+)\\')|(?:\\\"([^\\\"]+)\\\")/gi;\n var styleRegExp = /\\s*([^:]+):\\s*([^;]+);?/g;\n var trimRightRegExp = /\\s+$/;\n var i;\n var encodingLookup = {};\n var validStyles;\n var invalidStyles;\n var invisibleChar = zeroWidth;\n settings = settings || {};\n if (schema) {\n validStyles = schema.getValidStyles();\n invalidStyles = schema.getInvalidStyles();\n }\n var encodingItems = ('\\\\\" \\\\\\' \\\\; \\\\: ; : ' + invisibleChar).split(' ');\n for (i = 0; i < encodingItems.length; i++) {\n encodingLookup[encodingItems[i]] = invisibleChar + i;\n encodingLookup[invisibleChar + i] = encodingItems[i];\n }\n return {\n toHex: function (color) {\n return color.replace(rgbRegExp, toHex);\n },\n parse: function (css) {\n var styles = {};\n var matches, name, value, isEncoded;\n var urlConverter = settings.url_converter;\n var urlConverterScope = settings.url_converter_scope || _this;\n var compress = function (prefix, suffix, noJoin) {\n var top = styles[prefix + '-top' + suffix];\n if (!top) {\n return;\n }\n var right = styles[prefix + '-right' + suffix];\n if (!right) {\n return;\n }\n var bottom = styles[prefix + '-bottom' + suffix];\n if (!bottom) {\n return;\n }\n var left = styles[prefix + '-left' + suffix];\n if (!left) {\n return;\n }\n var box = [\n top,\n right,\n bottom,\n left\n ];\n 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 var canCompress = function (key) {\n var value = styles[key], i;\n if (!value) {\n return;\n }\n value = value.split(' ');\n i = value.length;\n while (i--) {\n if (value[i] !== value[0]) {\n return false;\n }\n }\n styles[key] = value[0];\n return true;\n };\n var compress2 = function (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 var encode = function (str) {\n isEncoded = true;\n return encodingLookup[str];\n };\n var decode = function (str, keepSlashes) {\n if (isEncoded) {\n str = str.replace(/\\uFEFF[0-9]/g, function (str) {\n return encodingLookup[str];\n });\n }\n if (!keepSlashes) {\n str = str.replace(/\\\\([\\'\\\";:])/g, '$1');\n }\n return str;\n };\n var decodeSingleHexSequence = function (escSeq) {\n return String.fromCharCode(parseInt(escSeq.slice(1), 16));\n };\n var decodeHexSequences = function (value) {\n return value.replace(/\\\\[0-9a-f]+/gi, decodeSingleHexSequence);\n };\n var processUrl = function (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 var 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, function (str) {\n return str.replace(/[;:]/g, encode);\n });\n while (matches = styleRegExp.exec(css)) {\n styleRegExp.lastIndex = matches.index + matches[0].length;\n name = matches[1].replace(trimRightRegExp, '').toLowerCase();\n value = matches[2].replace(trimRightRegExp, '');\n if (name && value) {\n name = decodeHexSequences(name);\n value = decodeHexSequences(value);\n if (name.indexOf(invisibleChar) !== -1 || name.indexOf('\"') !== -1) {\n continue;\n }\n if (!settings.allow_script_urls && (name === 'behavior' || /expression\\s*\\(|\\/\\*|\\*\\//.test(value))) {\n continue;\n }\n if (name === 'font-weight' && value === '700') {\n value = 'bold';\n } else if (name === 'color' || name === 'background-color') {\n value = value.toLowerCase();\n }\n value = value.replace(rgbRegExp, toHex);\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: function (styles, elementName) {\n var css = '';\n var serializeStyles = function (name) {\n var value;\n var styleList = validStyles[name];\n if (styleList) {\n for (var i_1 = 0, l = styleList.length; i_1 < l; i_1++) {\n name = styleList[i_1];\n value = styles[name];\n if (value) {\n css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n }\n }\n }\n };\n var isValid = function (name, elementName) {\n var styleMap = invalidStyles['*'];\n if (styleMap && styleMap[name]) {\n return false;\n }\n styleMap = invalidStyles[elementName];\n return !(styleMap && styleMap[name]);\n };\n if (elementName && validStyles) {\n serializeStyles('*');\n serializeStyles(elementName);\n } else {\n each$j(styles, function (value, name) {\n if (value && (!invalidStyles || isValid(name, elementName))) {\n css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n }\n });\n }\n return css;\n }\n };\n };\n\n var 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 var isNativeEvent = function (event) {\n return event instanceof Event || isFunction(event.initEvent);\n };\n var hasIsDefaultPrevented = function (event) {\n return event.isDefaultPrevented === always || event.isDefaultPrevented === never;\n };\n var needsNormalizing = function (event) {\n return isNullable(event.preventDefault) || isNativeEvent(event);\n };\n var clone$2 = function (originalEvent, data) {\n var event = data !== null && data !== void 0 ? data : {};\n for (var name_1 in originalEvent) {\n if (!has$2(deprecated, name_1)) {\n event[name_1] = originalEvent[name_1];\n }\n }\n if (isNonNullable(event.composedPath)) {\n event.composedPath = function () {\n return originalEvent.composedPath();\n };\n }\n return event;\n };\n var normalize$3 = function (type, originalEvent, fallbackTarget, data) {\n var _a;\n var event = clone$2(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 = function () {\n event.defaultPrevented = true;\n event.isDefaultPrevented = always;\n if (isFunction(originalEvent.preventDefault)) {\n originalEvent.preventDefault();\n } else if (isNativeEvent(originalEvent)) {\n originalEvent.returnValue = false;\n }\n };\n event.stopPropagation = function () {\n event.cancelBubble = true;\n event.isPropagationStopped = always;\n if (isFunction(originalEvent.stopPropagation)) {\n originalEvent.stopPropagation();\n } else if (isNativeEvent(originalEvent)) {\n originalEvent.cancelBubble = true;\n }\n };\n event.stopImmediatePropagation = function () {\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 var eventExpandoPrefix = 'mce-data-';\n var mouseEventRe = /^(?:mouse|contextmenu)|click/;\n var addEvent = function (target, name, callback, capture) {\n if (target.addEventListener) {\n target.addEventListener(name, callback, capture || false);\n } else if (target.attachEvent) {\n target.attachEvent('on' + name, callback);\n }\n };\n var removeEvent = function (target, name, callback, capture) {\n if (target.removeEventListener) {\n target.removeEventListener(name, callback, capture || false);\n } else if (target.detachEvent) {\n target.detachEvent('on' + name, callback);\n }\n };\n var isMouseEvent = function (event) {\n return isNonNullable(event) && mouseEventRe.test(event.type);\n };\n var fix = function (originalEvent, data) {\n var event = normalize$3(originalEvent.type, originalEvent, document, data);\n if (isMouseEvent(originalEvent) && isUndefined(originalEvent.pageX) && !isUndefined(originalEvent.clientX)) {\n var eventDoc = event.target.ownerDocument || document;\n var doc = eventDoc.documentElement;\n var body = eventDoc.body;\n var 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 if (isUndefined(event.metaKey)) {\n event.metaKey = false;\n }\n return event;\n };\n var bindOnReady = function (win, callback, eventUtils) {\n var doc = win.document, event = { type: 'ready' };\n if (eventUtils.domLoaded) {\n callback(event);\n return;\n }\n var isDocReady = function () {\n return doc.readyState === 'complete' || doc.readyState === 'interactive' && doc.body;\n };\n var readyHandler = function () {\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 var EventUtils = function () {\n function EventUtils() {\n this.domLoaded = false;\n this.events = {};\n this.count = 1;\n this.expando = eventExpandoPrefix + (+new Date()).toString(32);\n this.hasMouseEnterLeave = 'onmouseenter' in document.documentElement;\n this.hasFocusIn = 'onfocusin' in document.documentElement;\n this.count = 1;\n }\n EventUtils.prototype.bind = function (target, names, callback, scope) {\n var self = this;\n var id, callbackList, i, name, fakeName, nativeHandler, capture;\n var win = window;\n var defaultNativeHandler = function (evt) {\n self.executeHandlers(fix(evt || win.event), id);\n };\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return;\n }\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 var namesList = names.split(' ');\n i = namesList.length;\n while (i--) {\n name = namesList[i];\n nativeHandler = defaultNativeHandler;\n fakeName = capture = 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.hasMouseEnterLeave) {\n fakeName = self.mouseEnterLeave[name];\n if (fakeName) {\n nativeHandler = function (evt) {\n var current = evt.currentTarget;\n var related = evt.relatedTarget;\n if (related && current.contains) {\n related = current.contains(related);\n } else {\n while (related && related !== current) {\n related = related.parentNode;\n }\n }\n if (!related) {\n evt = fix(evt || win.event);\n evt.type = evt.type === 'mouseout' ? 'mouseleave' : 'mouseenter';\n evt.target = current;\n self.executeHandlers(evt, id);\n }\n };\n }\n }\n if (!self.hasFocusIn && (name === 'focusin' || name === 'focusout')) {\n capture = true;\n fakeName = name === 'focusin' ? 'focus' : 'blur';\n nativeHandler = function (evt) {\n evt = fix(evt || win.event);\n evt.type = evt.type === 'focus' ? 'focusin' : 'focusout';\n self.executeHandlers(evt, id);\n };\n }\n callbackList = self.events[id][name];\n if (!callbackList) {\n self.events[id][name] = callbackList = [{\n func: callback,\n scope: 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: scope\n });\n }\n }\n }\n target = callbackList = null;\n return callback;\n };\n EventUtils.prototype.unbind = function (target, names, callback) {\n var callbackList, i, ci, name, eventMap;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return this;\n }\n var id = target[this.expando];\n if (id) {\n eventMap = this.events[id];\n if (names) {\n var namesList = names.split(' ');\n i = namesList.length;\n while (i--) {\n name = namesList[i];\n callbackList = eventMap[name];\n if (callbackList) {\n if (callback) {\n ci = callbackList.length;\n while (ci--) {\n if (callbackList[ci].func === callback) {\n var nativeHandler = callbackList.nativeHandler;\n var fakeName = callbackList.fakeName, capture = callbackList.capture;\n callbackList = callbackList.slice(0, ci).concat(callbackList.slice(ci + 1));\n callbackList.nativeHandler = nativeHandler;\n callbackList.fakeName = fakeName;\n callbackList.capture = capture;\n eventMap[name] = callbackList;\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$j(eventMap, function (callbackList, name) {\n removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n });\n eventMap = {};\n }\n for (name in eventMap) {\n if (has$2(eventMap, name)) {\n return this;\n }\n }\n delete this.events[id];\n try {\n delete target[this.expando];\n } catch (ex) {\n target[this.expando] = null;\n }\n }\n return this;\n };\n EventUtils.prototype.fire = function (target, name, args) {\n var id;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return this;\n }\n var event = fix({\n type: name,\n target: target\n }, args);\n do {\n 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 EventUtils.prototype.clean = function (target) {\n var i, children;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\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 children = target.getElementsByTagName('*');\n 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 EventUtils.prototype.destroy = function () {\n this.events = {};\n };\n EventUtils.prototype.cancel = function (e) {\n if (e) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n return false;\n };\n EventUtils.prototype.executeHandlers = function (evt, id) {\n var container = this.events[id];\n var callbackList = container && container[evt.type];\n if (callbackList) {\n for (var i = 0, l = callbackList.length; i < l; i++) {\n var 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 EventUtils.Event = new EventUtils();\n return EventUtils;\n }();\n\n var support, Expr, getText, isXML, tokenize, compile, select$1, outermostContext, sortInput, hasDuplicate, setDocument, document$1, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains, expando = 'sizzle' + -new Date(), preferredDoc = window.document, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), sortOrder = function (a, b) {\n if (a === b) {\n hasDuplicate = true;\n }\n return 0;\n }, strundefined = typeof undefined, MAX_NEGATIVE = 1 << 31, hasOwn = {}.hasOwnProperty, arr = [], pop = arr.pop, push_native = arr.push, push$1 = arr.push, slice$1 = arr.slice, indexOf = arr.indexOf || function (elem) {\n var i = 0, len = this.length;\n for (; i < len; i++) {\n if (this[i] === elem) {\n return i;\n }\n }\n return -1;\n }, booleans = 'checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped', whitespace = '[\\\\x20\\\\t\\\\r\\\\n\\\\f]', identifier = '(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+', attributes = '\\\\[' + whitespace + '*(' + identifier + ')(?:' + whitespace + '*([*^$|!~]?=)' + whitespace + '*(?:\\'((?:\\\\\\\\.|[^\\\\\\\\\\'])*)\\'|\"((?:\\\\\\\\.|[^\\\\\\\\\"])*)\"|(' + identifier + '))|)' + whitespace + '*\\\\]', pseudos = ':(' + identifier + ')(?:\\\\((' + '(\\'((?:\\\\\\\\.|[^\\\\\\\\\\'])*)\\'|\"((?:\\\\\\\\.|[^\\\\\\\\\"])*)\")|' + '((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|' + attributes + ')*)|' + '.*' + ')\\\\)|)', rtrim = new RegExp('^' + whitespace + '+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)' + whitespace + '+$', 'g'), rcomma = new RegExp('^' + whitespace + '*,' + whitespace + '*'), rcombinators = new RegExp('^' + whitespace + '*([>+~]|' + whitespace + ')' + whitespace + '*'), rattributeQuotes = new RegExp('=' + whitespace + '*([^\\\\]\\'\"]*?)' + whitespace + '*\\\\]', 'g'), rpseudo = new RegExp(pseudos), ridentifier = new RegExp('^' + identifier + '$'), matchExpr = {\n ID: new RegExp('^#(' + identifier + ')'),\n CLASS: new RegExp('^\\\\.(' + identifier + ')'),\n TAG: new RegExp('^(' + identifier + '|[*])'),\n ATTR: new RegExp('^' + attributes),\n PSEUDO: new RegExp('^' + pseudos),\n CHILD: new RegExp('^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(' + whitespace + '*(even|odd|(([+-]|)(\\\\d*)n|)' + whitespace + '*(?:([+-]|)' + whitespace + '*(\\\\d+)|))' + whitespace + '*\\\\)|)', 'i'),\n bool: new RegExp('^(?:' + booleans + ')$', 'i'),\n needsContext: new RegExp('^' + whitespace + '*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(' + whitespace + '*((?:-\\\\d)?\\\\d*)' + whitespace + '*\\\\)|)(?=[^-]|$)', 'i')\n }, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\\d$/i, rnative = /^[^{]+\\{\\s*\\[native \\w/, rquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/, rsibling = /[+~]/, rescape = /'|\\\\/g, runescape = new RegExp('\\\\\\\\([\\\\da-f]{1,6}' + whitespace + '?|(' + whitespace + ')|.)', 'ig'), funescape = function (_, escaped, escapedWhitespace) {\n var high = '0x' + escaped - 65536;\n return high !== high || escapedWhitespace ? escaped : high < 0 ? String.fromCharCode(high + 65536) : String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320);\n };\n try {\n push$1.apply(arr = slice$1.call(preferredDoc.childNodes), preferredDoc.childNodes);\n arr[preferredDoc.childNodes.length].nodeType;\n } catch (e) {\n push$1 = {\n apply: arr.length ? function (target, els) {\n push_native.apply(target, slice$1.call(els));\n } : function (target, els) {\n var j = target.length, i = 0;\n while (target[j++] = els[i++]) {\n }\n target.length = j - 1;\n }\n };\n }\n var Sizzle = function (selector, context, results, seed) {\n var match, elem, m, nodeType, i, groups, old, nid, newContext, newSelector;\n if ((context ? context.ownerDocument || context : preferredDoc) !== document$1) {\n setDocument(context);\n }\n context = context || document$1;\n results = results || [];\n if (!selector || typeof selector !== 'string') {\n return results;\n }\n if ((nodeType = context.nodeType) !== 1 && nodeType !== 9) {\n return [];\n }\n if (documentIsHTML && !seed) {\n if (match = rquickExpr$1.exec(selector)) {\n if (m = match[1]) {\n if (nodeType === 9) {\n elem = context.getElementById(m);\n if (elem && elem.parentNode) {\n if (elem.id === m) {\n results.push(elem);\n return results;\n }\n } else {\n return results;\n }\n } else {\n if (context.ownerDocument && (elem = context.ownerDocument.getElementById(m)) && contains(context, elem) && elem.id === m) {\n results.push(elem);\n return results;\n }\n }\n } else if (match[2]) {\n push$1.apply(results, context.getElementsByTagName(selector));\n return results;\n } else if ((m = match[3]) && support.getElementsByClassName) {\n push$1.apply(results, context.getElementsByClassName(m));\n return results;\n }\n }\n if (support.qsa && (!rbuggyQSA || !rbuggyQSA.test(selector))) {\n nid = old = expando;\n newContext = context;\n newSelector = nodeType === 9 && selector;\n if (nodeType === 1 && context.nodeName.toLowerCase() !== 'object') {\n groups = tokenize(selector);\n if (old = context.getAttribute('id')) {\n nid = old.replace(rescape, '\\\\$&');\n } else {\n context.setAttribute('id', nid);\n }\n nid = '[id=\\'' + nid + '\\'] ';\n i = groups.length;\n while (i--) {\n groups[i] = nid + toSelector(groups[i]);\n }\n newContext = rsibling.test(selector) && testContext(context.parentNode) || context;\n newSelector = groups.join(',');\n }\n if (newSelector) {\n try {\n push$1.apply(results, newContext.querySelectorAll(newSelector));\n return results;\n } catch (qsaError) {\n } finally {\n if (!old) {\n context.removeAttribute('id');\n }\n }\n }\n }\n }\n return select$1(selector.replace(rtrim, '$1'), context, results, seed);\n };\n function createCache() {\n var keys = [];\n function cache(key, value) {\n if (keys.push(key + ' ') > Expr.cacheLength) {\n delete cache[keys.shift()];\n }\n return cache[key + ' '] = value;\n }\n return cache;\n }\n function markFunction(fn) {\n fn[expando] = true;\n return fn;\n }\n function siblingCheck(a, b) {\n var cur = b && a, diff = cur && a.nodeType === 1 && b.nodeType === 1 && (~b.sourceIndex || MAX_NEGATIVE) - (~a.sourceIndex || MAX_NEGATIVE);\n if (diff) {\n return diff;\n }\n if (cur) {\n while (cur = cur.nextSibling) {\n if (cur === b) {\n return -1;\n }\n }\n }\n return a ? 1 : -1;\n }\n function createInputPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return name === 'input' && elem.type === type;\n };\n }\n function createButtonPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return (name === 'input' || name === 'button') && elem.type === type;\n };\n }\n function createPositionalPseudo(fn) {\n return markFunction(function (argument) {\n argument = +argument;\n return markFunction(function (seed, matches) {\n var j, matchIndexes = fn([], seed.length, argument), i = matchIndexes.length;\n while (i--) {\n if (seed[j = matchIndexes[i]]) {\n seed[j] = !(matches[j] = seed[j]);\n }\n }\n });\n });\n }\n function testContext(context) {\n return context && typeof context.getElementsByTagName !== strundefined && context;\n }\n support = Sizzle.support = {};\n isXML = Sizzle.isXML = function (elem) {\n var documentElement = elem && (elem.ownerDocument || elem).documentElement;\n return documentElement ? documentElement.nodeName !== 'HTML' : false;\n };\n setDocument = Sizzle.setDocument = function (node) {\n var hasCompare, doc = node ? node.ownerDocument || node : preferredDoc, parent = doc.defaultView;\n function getTop(win) {\n try {\n return win.top;\n } catch (ex) {\n }\n return null;\n }\n if (doc === document$1 || doc.nodeType !== 9 || !doc.documentElement) {\n return document$1;\n }\n document$1 = doc;\n docElem = doc.documentElement;\n documentIsHTML = !isXML(doc);\n if (parent && parent !== getTop(parent)) {\n if (parent.addEventListener) {\n parent.addEventListener('unload', function () {\n setDocument();\n }, false);\n } else if (parent.attachEvent) {\n parent.attachEvent('onunload', function () {\n setDocument();\n });\n }\n }\n support.attributes = true;\n support.getElementsByTagName = true;\n support.getElementsByClassName = rnative.test(doc.getElementsByClassName);\n support.getById = true;\n Expr.find.ID = function (id, context) {\n if (typeof context.getElementById !== strundefined && documentIsHTML) {\n var m = context.getElementById(id);\n return m && m.parentNode ? [m] : [];\n }\n };\n Expr.filter.ID = function (id) {\n var attrId = id.replace(runescape, funescape);\n return function (elem) {\n return elem.getAttribute('id') === attrId;\n };\n };\n Expr.find.TAG = support.getElementsByTagName ? function (tag, context) {\n if (typeof context.getElementsByTagName !== strundefined) {\n return context.getElementsByTagName(tag);\n }\n } : function (tag, context) {\n var elem, tmp = [], i = 0, results = context.getElementsByTagName(tag);\n if (tag === '*') {\n while (elem = results[i++]) {\n if (elem.nodeType === 1) {\n tmp.push(elem);\n }\n }\n return tmp;\n }\n return results;\n };\n Expr.find.CLASS = support.getElementsByClassName && function (className, context) {\n if (documentIsHTML) {\n return context.getElementsByClassName(className);\n }\n };\n rbuggyMatches = [];\n rbuggyQSA = [];\n support.disconnectedMatch = true;\n rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join('|'));\n rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join('|'));\n hasCompare = rnative.test(docElem.compareDocumentPosition);\n contains = hasCompare || rnative.test(docElem.contains) ? function (a, b) {\n var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode;\n return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));\n } : function (a, b) {\n if (b) {\n while (b = b.parentNode) {\n if (b === a) {\n return true;\n }\n }\n }\n return false;\n };\n sortOrder = hasCompare ? function (a, b) {\n if (a === b) {\n hasDuplicate = true;\n return 0;\n }\n var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n if (compare) {\n return compare;\n }\n compare = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1;\n if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {\n if (a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a)) {\n return -1;\n }\n if (b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b)) {\n return 1;\n }\n return sortInput ? indexOf.call(sortInput, a) - indexOf.call(sortInput, b) : 0;\n }\n return compare & 4 ? -1 : 1;\n } : function (a, b) {\n if (a === b) {\n hasDuplicate = true;\n return 0;\n }\n var cur, i = 0, aup = a.parentNode, bup = b.parentNode, ap = [a], bp = [b];\n if (!aup || !bup) {\n return a === doc ? -1 : b === doc ? 1 : aup ? -1 : bup ? 1 : sortInput ? indexOf.call(sortInput, a) - indexOf.call(sortInput, b) : 0;\n } else if (aup === bup) {\n return siblingCheck(a, b);\n }\n cur = a;\n while (cur = cur.parentNode) {\n ap.unshift(cur);\n }\n cur = b;\n while (cur = cur.parentNode) {\n bp.unshift(cur);\n }\n while (ap[i] === bp[i]) {\n i++;\n }\n return i ? siblingCheck(ap[i], bp[i]) : ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0;\n };\n return doc;\n };\n Sizzle.matches = function (expr, elements) {\n return Sizzle(expr, null, null, elements);\n };\n Sizzle.matchesSelector = function (elem, expr) {\n if ((elem.ownerDocument || elem) !== document$1) {\n setDocument(elem);\n }\n expr = expr.replace(rattributeQuotes, '=\\'$1\\']');\n if (support.matchesSelector && documentIsHTML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {\n try {\n var ret = matches.call(elem, expr);\n if (ret || support.disconnectedMatch || elem.document && elem.document.nodeType !== 11) {\n return ret;\n }\n } catch (e) {\n }\n }\n return Sizzle(expr, document$1, null, [elem]).length > 0;\n };\n Sizzle.contains = function (context, elem) {\n if ((context.ownerDocument || context) !== document$1) {\n setDocument(context);\n }\n return contains(context, elem);\n };\n Sizzle.attr = function (elem, name) {\n if ((elem.ownerDocument || elem) !== document$1) {\n setDocument(elem);\n }\n var fn = Expr.attrHandle[name.toLowerCase()], val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;\n return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n };\n Sizzle.error = function (msg) {\n throw new Error('Syntax error, unrecognized expression: ' + msg);\n };\n Sizzle.uniqueSort = function (results) {\n var elem, duplicates = [], j = 0, i = 0;\n hasDuplicate = !support.detectDuplicates;\n sortInput = !support.sortStable && results.slice(0);\n results.sort(sortOrder);\n if (hasDuplicate) {\n while (elem = results[i++]) {\n if (elem === results[i]) {\n j = duplicates.push(i);\n }\n }\n while (j--) {\n results.splice(duplicates[j], 1);\n }\n }\n sortInput = null;\n return results;\n };\n getText = Sizzle.getText = function (elem) {\n var node, ret = '', i = 0, nodeType = elem.nodeType;\n if (!nodeType) {\n while (node = elem[i++]) {\n ret += getText(node);\n }\n } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n if (typeof elem.textContent === 'string') {\n return elem.textContent;\n } else {\n for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n ret += getText(elem);\n }\n }\n } else if (nodeType === 3 || nodeType === 4) {\n return elem.nodeValue;\n }\n return ret;\n };\n Expr = Sizzle.selectors = {\n cacheLength: 50,\n createPseudo: markFunction,\n match: matchExpr,\n attrHandle: {},\n find: {},\n relative: {\n '>': {\n dir: 'parentNode',\n first: true\n },\n ' ': { dir: 'parentNode' },\n '+': {\n dir: 'previousSibling',\n first: true\n },\n '~': { dir: 'previousSibling' }\n },\n preFilter: {\n ATTR: function (match) {\n match[1] = match[1].replace(runescape, funescape);\n match[3] = (match[3] || match[4] || match[5] || '').replace(runescape, funescape);\n if (match[2] === '~=') {\n match[3] = ' ' + match[3] + ' ';\n }\n return match.slice(0, 4);\n },\n CHILD: function (match) {\n match[1] = match[1].toLowerCase();\n if (match[1].slice(0, 3) === 'nth') {\n if (!match[3]) {\n Sizzle.error(match[0]);\n }\n match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === 'even' || match[3] === 'odd'));\n match[5] = +(match[7] + match[8] || match[3] === 'odd');\n } else if (match[3]) {\n Sizzle.error(match[0]);\n }\n return match;\n },\n PSEUDO: function (match) {\n var excess, unquoted = !match[6] && match[2];\n if (matchExpr.CHILD.test(match[0])) {\n return null;\n }\n if (match[3]) {\n match[2] = match[4] || match[5] || '';\n } else if (unquoted && rpseudo.test(unquoted) && (excess = tokenize(unquoted, true)) && (excess = unquoted.indexOf(')', unquoted.length - excess) - unquoted.length)) {\n match[0] = match[0].slice(0, excess);\n match[2] = unquoted.slice(0, excess);\n }\n return match.slice(0, 3);\n }\n },\n filter: {\n TAG: function (nodeNameSelector) {\n var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n return nodeNameSelector === '*' ? function () {\n return true;\n } : function (elem) {\n return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n };\n },\n CLASS: function (className) {\n var pattern = classCache[className + ' '];\n return pattern || (pattern = new RegExp('(^|' + whitespace + ')' + className + '(' + whitespace + '|$)')) && classCache(className, function (elem) {\n return pattern.test(typeof elem.className === 'string' && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute('class') || '');\n });\n },\n ATTR: function (name, operator, check) {\n return function (elem) {\n var result = Sizzle.attr(elem, name);\n if (result == null) {\n return operator === '!=';\n }\n if (!operator) {\n return true;\n }\n result += '';\n return operator === '=' ? result === check : operator === '!=' ? result !== check : operator === '^=' ? check && result.indexOf(check) === 0 : operator === '*=' ? check && result.indexOf(check) > -1 : operator === '$=' ? check && result.slice(-check.length) === check : operator === '~=' ? (' ' + result + ' ').indexOf(check) > -1 : operator === '|=' ? result === check || result.slice(0, check.length + 1) === check + '-' : false;\n };\n },\n CHILD: function (type, what, argument, first, last) {\n var simple = type.slice(0, 3) !== 'nth', forward = type.slice(-4) !== 'last', ofType = what === 'of-type';\n return first === 1 && last === 0 ? function (elem) {\n return !!elem.parentNode;\n } : function (elem, context, xml) {\n var cache, outerCache, node, diff, nodeIndex, start, dir = simple !== forward ? 'nextSibling' : 'previousSibling', parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType;\n if (parent) {\n if (simple) {\n while (dir) {\n node = elem;\n while (node = node[dir]) {\n if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {\n return false;\n }\n }\n start = dir = type === 'only' && !start && 'nextSibling';\n }\n return true;\n }\n start = [forward ? parent.firstChild : parent.lastChild];\n if (forward && useCache) {\n outerCache = parent[expando] || (parent[expando] = {});\n cache = outerCache[type] || [];\n nodeIndex = cache[0] === dirruns && cache[1];\n diff = cache[0] === dirruns && cache[2];\n node = nodeIndex && parent.childNodes[nodeIndex];\n while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n if (node.nodeType === 1 && ++diff && node === elem) {\n outerCache[type] = [\n dirruns,\n nodeIndex,\n diff\n ];\n break;\n }\n }\n } else if (useCache && (cache = (elem[expando] || (elem[expando] = {}))[type]) && cache[0] === dirruns) {\n diff = cache[1];\n } else {\n while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {\n if (useCache) {\n (node[expando] || (node[expando] = {}))[type] = [\n dirruns,\n diff\n ];\n }\n if (node === elem) {\n break;\n }\n }\n }\n }\n diff -= last;\n return diff === first || diff % first === 0 && diff / first >= 0;\n }\n };\n },\n PSEUDO: function (pseudo, argument) {\n var args, fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error('unsupported pseudo: ' + pseudo);\n if (fn[expando]) {\n return fn(argument);\n }\n if (fn.length > 1) {\n args = [\n pseudo,\n pseudo,\n '',\n argument\n ];\n return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {\n var idx, matched = fn(seed, argument), i = matched.length;\n while (i--) {\n idx = indexOf.call(seed, matched[i]);\n seed[idx] = !(matches[idx] = matched[i]);\n }\n }) : function (elem) {\n return fn(elem, 0, args);\n };\n }\n return fn;\n }\n },\n pseudos: {\n not: markFunction(function (selector) {\n var input = [], results = [], matcher = compile(selector.replace(rtrim, '$1'));\n return matcher[expando] ? markFunction(function (seed, matches, context, xml) {\n var elem, unmatched = matcher(seed, null, xml, []), i = seed.length;\n while (i--) {\n if (elem = unmatched[i]) {\n seed[i] = !(matches[i] = elem);\n }\n }\n }) : function (elem, context, xml) {\n input[0] = elem;\n matcher(input, null, xml, results);\n input[0] = null;\n return !results.pop();\n };\n }),\n has: markFunction(function (selector) {\n return function (elem) {\n return Sizzle(selector, elem).length > 0;\n };\n }),\n contains: markFunction(function (text) {\n text = text.replace(runescape, funescape);\n return function (elem) {\n return (elem.textContent || elem.innerText || getText(elem)).indexOf(text) > -1;\n };\n }),\n lang: markFunction(function (lang) {\n if (!ridentifier.test(lang || '')) {\n Sizzle.error('unsupported lang: ' + lang);\n }\n lang = lang.replace(runescape, funescape).toLowerCase();\n return function (elem) {\n var elemLang;\n do {\n if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute('xml:lang') || elem.getAttribute('lang')) {\n elemLang = elemLang.toLowerCase();\n return elemLang === lang || elemLang.indexOf(lang + '-') === 0;\n }\n } while ((elem = elem.parentNode) && elem.nodeType === 1);\n return false;\n };\n }),\n target: function (elem) {\n var hash = window.location && window.location.hash;\n return hash && hash.slice(1) === elem.id;\n },\n root: function (elem) {\n return elem === docElem;\n },\n focus: function (elem) {\n return elem === document$1.activeElement && (!document$1.hasFocus || document$1.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n },\n enabled: function (elem) {\n return elem.disabled === false;\n },\n disabled: function (elem) {\n return elem.disabled === true;\n },\n checked: function (elem) {\n var nodeName = elem.nodeName.toLowerCase();\n return nodeName === 'input' && !!elem.checked || nodeName === 'option' && !!elem.selected;\n },\n selected: function (elem) {\n if (elem.parentNode) {\n elem.parentNode.selectedIndex;\n }\n return elem.selected === true;\n },\n empty: function (elem) {\n for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n if (elem.nodeType < 6) {\n return false;\n }\n }\n return true;\n },\n parent: function (elem) {\n return !Expr.pseudos.empty(elem);\n },\n header: function (elem) {\n return rheader.test(elem.nodeName);\n },\n input: function (elem) {\n return rinputs.test(elem.nodeName);\n },\n button: function (elem) {\n var name = elem.nodeName.toLowerCase();\n return name === 'input' && elem.type === 'button' || name === 'button';\n },\n text: function (elem) {\n var attr;\n return elem.nodeName.toLowerCase() === 'input' && elem.type === 'text' && ((attr = elem.getAttribute('type')) == null || attr.toLowerCase() === 'text');\n },\n first: createPositionalPseudo(function () {\n return [0];\n }),\n last: createPositionalPseudo(function (matchIndexes, length) {\n return [length - 1];\n }),\n eq: createPositionalPseudo(function (matchIndexes, length, argument) {\n return [argument < 0 ? argument + length : argument];\n }),\n even: createPositionalPseudo(function (matchIndexes, length) {\n var i = 0;\n for (; i < length; i += 2) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n }),\n odd: createPositionalPseudo(function (matchIndexes, length) {\n var i = 1;\n for (; i < length; i += 2) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n }),\n lt: createPositionalPseudo(function (matchIndexes, length, argument) {\n var i = argument < 0 ? argument + length : argument;\n for (; --i >= 0;) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n }),\n gt: createPositionalPseudo(function (matchIndexes, length, argument) {\n var i = argument < 0 ? argument + length : argument;\n for (; ++i < length;) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n })\n }\n };\n Expr.pseudos.nth = Expr.pseudos.eq;\n each$k([\n 'radio',\n 'checkbox',\n 'file',\n 'password',\n 'image'\n ], function (i) {\n Expr.pseudos[i] = createInputPseudo(i);\n });\n each$k([\n 'submit',\n 'reset'\n ], function (i) {\n Expr.pseudos[i] = createButtonPseudo(i);\n });\n function setFilters() {\n }\n setFilters.prototype = Expr.filters = Expr.pseudos;\n Expr.setFilters = new setFilters();\n tokenize = Sizzle.tokenize = function (selector, parseOnly) {\n var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[selector + ' '];\n if (cached) {\n return parseOnly ? 0 : cached.slice(0);\n }\n soFar = selector;\n groups = [];\n preFilters = Expr.preFilter;\n while (soFar) {\n if (!matched || (match = rcomma.exec(soFar))) {\n if (match) {\n soFar = soFar.slice(match[0].length) || soFar;\n }\n groups.push(tokens = []);\n }\n matched = false;\n if (match = rcombinators.exec(soFar)) {\n matched = match.shift();\n tokens.push({\n value: matched,\n type: match[0].replace(rtrim, ' ')\n });\n soFar = soFar.slice(matched.length);\n }\n for (type in Expr.filter) {\n if (!Expr.filter.hasOwnProperty(type)) {\n continue;\n }\n if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {\n matched = match.shift();\n tokens.push({\n value: matched,\n type: type,\n matches: match\n });\n soFar = soFar.slice(matched.length);\n }\n }\n if (!matched) {\n break;\n }\n }\n return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : tokenCache(selector, groups).slice(0);\n };\n function toSelector(tokens) {\n var i = 0, len = tokens.length, selector = '';\n for (; i < len; i++) {\n selector += tokens[i].value;\n }\n return selector;\n }\n function addCombinator(matcher, combinator, base) {\n var dir = combinator.dir, checkNonElements = base && dir === 'parentNode', doneName = done++;\n return combinator.first ? function (elem, context, xml) {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n return matcher(elem, context, xml);\n }\n }\n } : function (elem, context, xml) {\n var oldCache, outerCache, newCache = [\n dirruns,\n doneName\n ];\n if (xml) {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n if (matcher(elem, context, xml)) {\n return true;\n }\n }\n }\n } else {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n outerCache = elem[expando] || (elem[expando] = {});\n if ((oldCache = outerCache[dir]) && oldCache[0] === dirruns && oldCache[1] === doneName) {\n return newCache[2] = oldCache[2];\n } else {\n outerCache[dir] = newCache;\n if (newCache[2] = matcher(elem, context, xml)) {\n return true;\n }\n }\n }\n }\n }\n };\n }\n function elementMatcher(matchers) {\n return matchers.length > 1 ? function (elem, context, xml) {\n var i = matchers.length;\n while (i--) {\n if (!matchers[i](elem, context, xml)) {\n return false;\n }\n }\n return true;\n } : matchers[0];\n }\n function multipleContexts(selector, contexts, results) {\n var i = 0, len = contexts.length;\n for (; i < len; i++) {\n Sizzle(selector, contexts[i], results);\n }\n return results;\n }\n function condense(unmatched, map, filter, context, xml) {\n var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null;\n for (; i < len; i++) {\n if (elem = unmatched[i]) {\n if (!filter || filter(elem, context, xml)) {\n newUnmatched.push(elem);\n if (mapped) {\n map.push(i);\n }\n }\n }\n }\n return newUnmatched;\n }\n function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n if (postFilter && !postFilter[expando]) {\n postFilter = setMatcher(postFilter);\n }\n if (postFinder && !postFinder[expando]) {\n postFinder = setMatcher(postFinder, postSelector);\n }\n return markFunction(function (seed, results, context, xml) {\n var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, elems = seed || multipleContexts(selector || '*', context.nodeType ? [context] : context, []), matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems, matcherOut = matcher ? postFinder || (seed ? preFilter : preexisting || postFilter) ? [] : results : matcherIn;\n if (matcher) {\n matcher(matcherIn, matcherOut, context, xml);\n }\n if (postFilter) {\n temp = condense(matcherOut, postMap);\n postFilter(temp, [], context, xml);\n i = temp.length;\n while (i--) {\n if (elem = temp[i]) {\n matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n }\n }\n }\n if (seed) {\n if (postFinder || preFilter) {\n if (postFinder) {\n temp = [];\n i = matcherOut.length;\n while (i--) {\n if (elem = matcherOut[i]) {\n temp.push(matcherIn[i] = elem);\n }\n }\n postFinder(null, matcherOut = [], temp, xml);\n }\n i = matcherOut.length;\n while (i--) {\n if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n seed[temp] = !(results[temp] = elem);\n }\n }\n }\n } else {\n matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);\n if (postFinder) {\n postFinder(null, results, matcherOut, xml);\n } else {\n push$1.apply(results, matcherOut);\n }\n }\n });\n }\n function matcherFromTokens(tokens) {\n var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[tokens[0].type], implicitRelative = leadingRelative || Expr.relative[' '], i = leadingRelative ? 1 : 0, matchContext = addCombinator(function (elem) {\n return elem === checkContext;\n }, implicitRelative, true), matchAnyContext = addCombinator(function (elem) {\n return indexOf.call(checkContext, elem) > -1;\n }, implicitRelative, true), matchers = [function (elem, context, xml) {\n var ret = !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));\n checkContext = null;\n return ret;\n }];\n for (; i < len; i++) {\n if (matcher = Expr.relative[tokens[i].type]) {\n matchers = [addCombinator(elementMatcher(matchers), matcher)];\n } else {\n matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n if (matcher[expando]) {\n j = ++i;\n for (; j < len; j++) {\n if (Expr.relative[tokens[j].type]) {\n break;\n }\n }\n return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector(tokens.slice(0, i - 1).concat({ value: tokens[i - 2].type === ' ' ? '*' : '' })).replace(rtrim, '$1'), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));\n }\n matchers.push(matcher);\n }\n }\n return elementMatcher(matchers);\n }\n function matcherFromGroupMatchers(elementMatchers, setMatchers) {\n var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function (seed, context, xml, results, outermost) {\n var elem, j, matcher, matchedCount = 0, i = '0', unmatched = seed && [], setMatched = [], contextBackup = outermostContext, elems = seed || byElement && Expr.find.TAG('*', outermost), dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1, len = elems.length;\n if (outermost) {\n outermostContext = context !== document$1 && context;\n }\n for (; i !== len && (elem = elems[i]) != null; i++) {\n if (byElement && elem) {\n j = 0;\n while (matcher = elementMatchers[j++]) {\n if (matcher(elem, context, xml)) {\n results.push(elem);\n break;\n }\n }\n if (outermost) {\n dirruns = dirrunsUnique;\n }\n }\n if (bySet) {\n if (elem = !matcher && elem) {\n matchedCount--;\n }\n if (seed) {\n unmatched.push(elem);\n }\n }\n }\n matchedCount += i;\n if (bySet && i !== matchedCount) {\n j = 0;\n while (matcher = setMatchers[j++]) {\n matcher(unmatched, setMatched, context, xml);\n }\n if (seed) {\n if (matchedCount > 0) {\n while (i--) {\n if (!(unmatched[i] || setMatched[i])) {\n setMatched[i] = pop.call(results);\n }\n }\n }\n setMatched = condense(setMatched);\n }\n push$1.apply(results, setMatched);\n if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {\n Sizzle.uniqueSort(results);\n }\n }\n if (outermost) {\n dirruns = dirrunsUnique;\n outermostContext = contextBackup;\n }\n return unmatched;\n };\n return bySet ? markFunction(superMatcher) : superMatcher;\n }\n compile = Sizzle.compile = function (selector, match) {\n var i, setMatchers = [], elementMatchers = [], cached = compilerCache[selector + ' '];\n if (!cached) {\n if (!match) {\n match = tokenize(selector);\n }\n i = match.length;\n while (i--) {\n cached = matcherFromTokens(match[i]);\n if (cached[expando]) {\n setMatchers.push(cached);\n } else {\n elementMatchers.push(cached);\n }\n }\n cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers));\n cached.selector = selector;\n }\n return cached;\n };\n select$1 = Sizzle.select = function (selector, context, results, seed) {\n var i, tokens, token, type, find, compiled = typeof selector === 'function' && selector, match = !seed && tokenize(selector = compiled.selector || selector);\n results = results || [];\n if (match.length === 1) {\n tokens = match[0] = match[0].slice(0);\n if (tokens.length > 2 && (token = tokens[0]).type === 'ID' && support.getById && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n context = (Expr.find.ID(token.matches[0].replace(runescape, funescape), context) || [])[0];\n if (!context) {\n return results;\n } else if (compiled) {\n context = context.parentNode;\n }\n selector = selector.slice(tokens.shift().value.length);\n }\n i = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n while (i--) {\n token = tokens[i];\n if (Expr.relative[type = token.type]) {\n break;\n }\n if (find = Expr.find[type]) {\n if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {\n tokens.splice(i, 1);\n selector = seed.length && toSelector(tokens);\n if (!selector) {\n push$1.apply(results, seed);\n return results;\n }\n break;\n }\n }\n }\n }\n (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, rsibling.test(selector) && testContext(context.parentNode) || context);\n return results;\n };\n support.sortStable = expando.split('').sort(sortOrder).join('') === expando;\n support.detectDuplicates = !!hasDuplicate;\n setDocument();\n support.sortDetached = true;\n\n var doc = document;\n var push = Array.prototype.push;\n var slice = Array.prototype.slice;\n var rquickExpr = /^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/;\n var Event$1 = EventUtils.Event;\n var skipUniques = Tools.makeMap('children,contents,next,prev');\n var isDefined = function (obj) {\n return typeof obj !== 'undefined';\n };\n var isString = function (obj) {\n return typeof obj === 'string';\n };\n var isWindow = function (obj) {\n return obj && obj === obj.window;\n };\n var createFragment$1 = function (html, fragDoc) {\n fragDoc = fragDoc || doc;\n var container = fragDoc.createElement('div');\n var frag = fragDoc.createDocumentFragment();\n container.innerHTML = html;\n var node;\n while (node = container.firstChild) {\n frag.appendChild(node);\n }\n return frag;\n };\n var domManipulate = function (targetNodes, sourceItem, callback, reverse) {\n var i;\n if (isString(sourceItem)) {\n sourceItem = createFragment$1(sourceItem, getElementDocument(targetNodes[0]));\n } else if (sourceItem.length && !sourceItem.nodeType) {\n sourceItem = DomQuery.makeArray(sourceItem);\n if (reverse) {\n for (i = sourceItem.length - 1; i >= 0; i--) {\n domManipulate(targetNodes, sourceItem[i], callback, reverse);\n }\n } else {\n for (i = 0; i < sourceItem.length; i++) {\n domManipulate(targetNodes, sourceItem[i], callback, reverse);\n }\n }\n return targetNodes;\n }\n if (sourceItem.nodeType) {\n i = targetNodes.length;\n while (i--) {\n callback.call(targetNodes[i], sourceItem);\n }\n }\n return targetNodes;\n };\n var hasClass = function (node, className) {\n return node && className && (' ' + node.className + ' ').indexOf(' ' + className + ' ') !== -1;\n };\n var wrap$2 = function (elements, wrapper, all) {\n var lastParent, newWrapper;\n wrapper = DomQuery(wrapper)[0];\n elements.each(function () {\n var self = this;\n if (!all || lastParent !== self.parentNode) {\n lastParent = self.parentNode;\n newWrapper = wrapper.cloneNode(false);\n self.parentNode.insertBefore(newWrapper, self);\n newWrapper.appendChild(self);\n } else {\n newWrapper.appendChild(self);\n }\n });\n return elements;\n };\n var numericCssMap = Tools.makeMap('fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom', ' ');\n var booleanMap = Tools.makeMap('checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected', ' ');\n var propFix = {\n for: 'htmlFor',\n class: 'className',\n readonly: 'readOnly'\n };\n var cssFix = { float: 'cssFloat' };\n var attrHooks = {}, cssHooks = {};\n var DomQueryConstructor = function (selector, context) {\n return new DomQuery.fn.init(selector, context);\n };\n var inArray$1 = function (item, array) {\n var i;\n if (array.indexOf) {\n return array.indexOf(item);\n }\n i = array.length;\n while (i--) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n };\n var whiteSpaceRegExp = /^\\s*|\\s*$/g;\n var trim$1 = function (str) {\n return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp, '');\n };\n var each$g = function (obj, callback) {\n var length, key, i, value;\n if (obj) {\n length = obj.length;\n if (length === undefined) {\n for (key in obj) {\n if (obj.hasOwnProperty(key)) {\n value = obj[key];\n if (callback.call(value, key, value) === false) {\n break;\n }\n }\n }\n } else {\n for (i = 0; i < length; i++) {\n value = obj[i];\n if (callback.call(value, i, value) === false) {\n break;\n }\n }\n }\n }\n return obj;\n };\n var grep$2 = function (array, callback) {\n var out = [];\n each$g(array, function (i, item) {\n if (callback(item, i)) {\n out.push(item);\n }\n });\n return out;\n };\n var getElementDocument = function (element) {\n if (!element) {\n return doc;\n }\n if (element.nodeType === 9) {\n return element;\n }\n return element.ownerDocument;\n };\n DomQueryConstructor.fn = DomQueryConstructor.prototype = {\n constructor: DomQueryConstructor,\n selector: '',\n context: null,\n length: 0,\n init: function (selector, context) {\n var self = this;\n var match, node;\n if (!selector) {\n return self;\n }\n if (selector.nodeType) {\n self.context = self[0] = selector;\n self.length = 1;\n return self;\n }\n if (context && context.nodeType) {\n self.context = context;\n } else {\n if (context) {\n return DomQuery(selector).attr(context);\n }\n self.context = context = document;\n }\n if (isString(selector)) {\n self.selector = selector;\n if (selector.charAt(0) === '<' && selector.charAt(selector.length - 1) === '>' && selector.length >= 3) {\n match = [\n null,\n selector,\n null\n ];\n } else {\n match = rquickExpr.exec(selector);\n }\n if (match) {\n if (match[1]) {\n node = createFragment$1(selector, getElementDocument(context)).firstChild;\n while (node) {\n push.call(self, node);\n node = node.nextSibling;\n }\n } else {\n node = getElementDocument(context).getElementById(match[2]);\n if (!node) {\n return self;\n }\n if (node.id !== match[2]) {\n return self.find(selector);\n }\n self.length = 1;\n self[0] = node;\n }\n } else {\n return DomQuery(context).find(selector);\n }\n } else {\n this.add(selector, false);\n }\n return self;\n },\n toArray: function () {\n return Tools.toArray(this);\n },\n add: function (items, sort) {\n var self = this;\n var nodes, i;\n if (isString(items)) {\n return self.add(DomQuery(items));\n }\n if (sort !== false) {\n nodes = DomQuery.unique(self.toArray().concat(DomQuery.makeArray(items)));\n self.length = nodes.length;\n for (i = 0; i < nodes.length; i++) {\n self[i] = nodes[i];\n }\n } else {\n push.apply(self, DomQuery.makeArray(items));\n }\n return self;\n },\n attr: function (name, value) {\n var self = this;\n var hook;\n if (typeof name === 'object') {\n each$g(name, function (name, value) {\n self.attr(name, value);\n });\n } else if (isDefined(value)) {\n this.each(function () {\n var hook;\n if (this.nodeType === 1) {\n hook = attrHooks[name];\n if (hook && hook.set) {\n hook.set(this, value);\n return;\n }\n if (value === null) {\n this.removeAttribute(name, 2);\n } else {\n this.setAttribute(name, value, 2);\n }\n }\n });\n } else {\n if (self[0] && self[0].nodeType === 1) {\n hook = attrHooks[name];\n if (hook && hook.get) {\n return hook.get(self[0], name);\n }\n if (booleanMap[name]) {\n return self.prop(name) ? name : undefined;\n }\n value = self[0].getAttribute(name, 2);\n if (value === null) {\n value = undefined;\n }\n }\n return value;\n }\n return self;\n },\n removeAttr: function (name) {\n return this.attr(name, null);\n },\n prop: function (name, value) {\n var self = this;\n name = propFix[name] || name;\n if (typeof name === 'object') {\n each$g(name, function (name, value) {\n self.prop(name, value);\n });\n } else if (isDefined(value)) {\n this.each(function () {\n if (this.nodeType === 1) {\n this[name] = value;\n }\n });\n } else {\n if (self[0] && self[0].nodeType && name in self[0]) {\n return self[0][name];\n }\n return value;\n }\n return self;\n },\n css: function (name, value) {\n var self = this;\n var elm, hook;\n var camel = function (name) {\n return name.replace(/-(\\D)/g, function (a, b) {\n return b.toUpperCase();\n });\n };\n var dashed = function (name) {\n return name.replace(/[A-Z]/g, function (a) {\n return '-' + a;\n });\n };\n if (typeof name === 'object') {\n each$g(name, function (name, value) {\n self.css(name, value);\n });\n } else {\n if (isDefined(value)) {\n name = camel(name);\n if (typeof value === 'number' && !numericCssMap[name]) {\n value = value.toString() + 'px';\n }\n self.each(function () {\n var style = this.style;\n hook = cssHooks[name];\n if (hook && hook.set) {\n hook.set(this, value);\n return;\n }\n try {\n this.style[cssFix[name] || name] = value;\n } catch (ex) {\n }\n if (value === null || value === '') {\n if (style.removeProperty) {\n style.removeProperty(dashed(name));\n } else {\n style.removeAttribute(name);\n }\n }\n });\n } else {\n elm = self[0];\n hook = cssHooks[name];\n if (hook && hook.get) {\n return hook.get(elm);\n }\n if (elm.ownerDocument.defaultView) {\n try {\n return elm.ownerDocument.defaultView.getComputedStyle(elm, null).getPropertyValue(dashed(name));\n } catch (ex) {\n return undefined;\n }\n } else if (elm.currentStyle) {\n return elm.currentStyle[camel(name)];\n } else {\n return '';\n }\n }\n }\n return self;\n },\n remove: function () {\n var self = this;\n var node, i = this.length;\n while (i--) {\n node = self[i];\n Event$1.clean(node);\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n }\n return this;\n },\n empty: function () {\n var self = this;\n var node, i = this.length;\n while (i--) {\n node = self[i];\n while (node.firstChild) {\n node.removeChild(node.firstChild);\n }\n }\n return this;\n },\n html: function (value) {\n var self = this;\n var i;\n if (isDefined(value)) {\n i = self.length;\n try {\n while (i--) {\n self[i].innerHTML = value;\n }\n } catch (ex) {\n DomQuery(self[i]).empty().append(value);\n }\n return self;\n }\n return self[0] ? self[0].innerHTML : '';\n },\n text: function (value) {\n var self = this;\n var i;\n if (isDefined(value)) {\n i = self.length;\n while (i--) {\n if ('innerText' in self[i]) {\n self[i].innerText = value;\n } else {\n self[0].textContent = value;\n }\n }\n return self;\n }\n return self[0] ? self[0].innerText || self[0].textContent : '';\n },\n append: function () {\n return domManipulate(this, arguments, function (node) {\n if (this.nodeType === 1 || this.host && this.host.nodeType === 1) {\n this.appendChild(node);\n }\n });\n },\n prepend: function () {\n return domManipulate(this, arguments, function (node) {\n if (this.nodeType === 1 || this.host && this.host.nodeType === 1) {\n this.insertBefore(node, this.firstChild);\n }\n }, true);\n },\n before: function () {\n var self = this;\n if (self[0] && self[0].parentNode) {\n return domManipulate(self, arguments, function (node) {\n this.parentNode.insertBefore(node, this);\n });\n }\n return self;\n },\n after: function () {\n var self = this;\n if (self[0] && self[0].parentNode) {\n return domManipulate(self, arguments, function (node) {\n this.parentNode.insertBefore(node, this.nextSibling);\n }, true);\n }\n return self;\n },\n appendTo: function (val) {\n DomQuery(val).append(this);\n return this;\n },\n prependTo: function (val) {\n DomQuery(val).prepend(this);\n return this;\n },\n replaceWith: function (content) {\n return this.before(content).remove();\n },\n wrap: function (content) {\n return wrap$2(this, content);\n },\n wrapAll: function (content) {\n return wrap$2(this, content, true);\n },\n wrapInner: function (content) {\n this.each(function () {\n DomQuery(this).contents().wrapAll(content);\n });\n return this;\n },\n unwrap: function () {\n return this.parent().each(function () {\n DomQuery(this).replaceWith(this.childNodes);\n });\n },\n clone: function () {\n var result = [];\n this.each(function () {\n result.push(this.cloneNode(true));\n });\n return DomQuery(result);\n },\n addClass: function (className) {\n return this.toggleClass(className, true);\n },\n removeClass: function (className) {\n return this.toggleClass(className, false);\n },\n toggleClass: function (className, state) {\n var self = this;\n if (typeof className !== 'string') {\n return self;\n }\n if (className.indexOf(' ') !== -1) {\n each$g(className.split(' '), function () {\n self.toggleClass(this, state);\n });\n } else {\n self.each(function (index, node) {\n var classState = hasClass(node, className);\n if (classState !== state) {\n var existingClassName = node.className;\n if (classState) {\n node.className = trim$1((' ' + existingClassName + ' ').replace(' ' + className + ' ', ' '));\n } else {\n node.className += existingClassName ? ' ' + className : className;\n }\n }\n });\n }\n return self;\n },\n hasClass: function (className) {\n return hasClass(this[0], className);\n },\n each: function (callback) {\n return each$g(this, callback);\n },\n on: function (name, callback) {\n return this.each(function () {\n Event$1.bind(this, name, callback);\n });\n },\n off: function (name, callback) {\n return this.each(function () {\n Event$1.unbind(this, name, callback);\n });\n },\n trigger: function (name) {\n return this.each(function () {\n if (typeof name === 'object') {\n Event$1.fire(this, name.type, name);\n } else {\n Event$1.fire(this, name);\n }\n });\n },\n show: function () {\n return this.css('display', '');\n },\n hide: function () {\n return this.css('display', 'none');\n },\n slice: function () {\n return DomQuery(slice.apply(this, arguments));\n },\n eq: function (index) {\n return index === -1 ? this.slice(index) : this.slice(index, +index + 1);\n },\n first: function () {\n return this.eq(0);\n },\n last: function () {\n return this.eq(-1);\n },\n find: function (selector) {\n var i, l;\n var ret = [];\n for (i = 0, l = this.length; i < l; i++) {\n DomQuery.find(selector, this[i], ret);\n }\n return DomQuery(ret);\n },\n filter: function (selector) {\n if (typeof selector === 'function') {\n return DomQuery(grep$2(this.toArray(), function (item, i) {\n return selector(i, item);\n }));\n }\n return DomQuery(DomQuery.filter(selector, this.toArray()));\n },\n closest: function (selector) {\n var result = [];\n if (selector instanceof DomQuery) {\n selector = selector[0];\n }\n this.each(function (i, node) {\n while (node) {\n if (typeof selector === 'string' && DomQuery(node).is(selector)) {\n result.push(node);\n break;\n } else if (node === selector) {\n result.push(node);\n break;\n }\n node = node.parentNode;\n }\n });\n return DomQuery(result);\n },\n offset: function (offset) {\n var elm, doc, docElm;\n var x = 0, y = 0, pos;\n if (!offset) {\n elm = this[0];\n if (elm) {\n doc = elm.ownerDocument;\n docElm = doc.documentElement;\n if (elm.getBoundingClientRect) {\n pos = elm.getBoundingClientRect();\n x = pos.left + (docElm.scrollLeft || doc.body.scrollLeft) - docElm.clientLeft;\n y = pos.top + (docElm.scrollTop || doc.body.scrollTop) - docElm.clientTop;\n }\n }\n return {\n left: x,\n top: y\n };\n }\n return this.css(offset);\n },\n push: push,\n sort: Array.prototype.sort,\n splice: Array.prototype.splice\n };\n Tools.extend(DomQueryConstructor, {\n extend: Tools.extend,\n makeArray: function (object) {\n if (isWindow(object) || object.nodeType) {\n return [object];\n }\n return Tools.toArray(object);\n },\n inArray: inArray$1,\n isArray: Tools.isArray,\n each: each$g,\n trim: trim$1,\n grep: grep$2,\n find: Sizzle,\n expr: Sizzle.selectors,\n unique: Sizzle.uniqueSort,\n text: Sizzle.getText,\n contains: Sizzle.contains,\n filter: function (expr, elems, not) {\n var i = elems.length;\n if (not) {\n expr = ':not(' + expr + ')';\n }\n while (i--) {\n if (elems[i].nodeType !== 1) {\n elems.splice(i, 1);\n }\n }\n if (elems.length === 1) {\n elems = DomQuery.find.matchesSelector(elems[0], expr) ? [elems[0]] : [];\n } else {\n elems = DomQuery.find.matches(expr, elems);\n }\n return elems;\n }\n });\n var dir = function (el, prop, until) {\n var matched = [];\n var cur = el[prop];\n if (typeof until !== 'string' && until instanceof DomQuery) {\n until = until[0];\n }\n while (cur && cur.nodeType !== 9) {\n if (until !== undefined) {\n if (cur === until) {\n break;\n }\n if (typeof until === 'string' && DomQuery(cur).is(until)) {\n break;\n }\n }\n if (cur.nodeType === 1) {\n matched.push(cur);\n }\n cur = cur[prop];\n }\n return matched;\n };\n var sibling$1 = function (node, siblingName, nodeType, until) {\n var result = [];\n if (until instanceof DomQuery) {\n until = until[0];\n }\n for (; node; node = node[siblingName]) {\n if (nodeType && node.nodeType !== nodeType) {\n continue;\n }\n if (until !== undefined) {\n if (node === until) {\n break;\n }\n if (typeof until === 'string' && DomQuery(node).is(until)) {\n break;\n }\n }\n result.push(node);\n }\n return result;\n };\n var firstSibling = function (node, siblingName, nodeType) {\n for (node = node[siblingName]; node; node = node[siblingName]) {\n if (node.nodeType === nodeType) {\n return node;\n }\n }\n return null;\n };\n each$g({\n parent: function (node) {\n var parent = node.parentNode;\n return parent && parent.nodeType !== 11 ? parent : null;\n },\n parents: function (node) {\n return dir(node, 'parentNode');\n },\n next: function (node) {\n return firstSibling(node, 'nextSibling', 1);\n },\n prev: function (node) {\n return firstSibling(node, 'previousSibling', 1);\n },\n children: function (node) {\n return sibling$1(node.firstChild, 'nextSibling', 1);\n },\n contents: function (node) {\n return Tools.toArray((node.nodeName === 'iframe' ? node.contentDocument || node.contentWindow.document : node).childNodes);\n }\n }, function (name, fn) {\n DomQueryConstructor.fn[name] = function (selector) {\n var self = this;\n var result = [];\n self.each(function () {\n var nodes = fn.call(result, this, selector, result);\n if (nodes) {\n if (DomQuery.isArray(nodes)) {\n result.push.apply(result, nodes);\n } else {\n result.push(nodes);\n }\n }\n });\n if (this.length > 1) {\n if (!skipUniques[name]) {\n result = DomQuery.unique(result);\n }\n if (name.indexOf('parents') === 0) {\n result = result.reverse();\n }\n }\n var wrappedResult = DomQuery(result);\n if (selector) {\n return wrappedResult.filter(selector);\n }\n return wrappedResult;\n };\n });\n each$g({\n parentsUntil: function (node, until) {\n return dir(node, 'parentNode', until);\n },\n nextUntil: function (node, until) {\n return sibling$1(node, 'nextSibling', 1, until).slice(1);\n },\n prevUntil: function (node, until) {\n return sibling$1(node, 'previousSibling', 1, until).slice(1);\n }\n }, function (name, fn) {\n DomQueryConstructor.fn[name] = function (selector, filter) {\n var self = this;\n var result = [];\n self.each(function () {\n var nodes = fn.call(result, this, selector, result);\n if (nodes) {\n if (DomQuery.isArray(nodes)) {\n result.push.apply(result, nodes);\n } else {\n result.push(nodes);\n }\n }\n });\n if (this.length > 1) {\n result = DomQuery.unique(result);\n if (name.indexOf('parents') === 0 || name === 'prevUntil') {\n result = result.reverse();\n }\n }\n var wrappedResult = DomQuery(result);\n if (filter) {\n return wrappedResult.filter(filter);\n }\n return wrappedResult;\n };\n });\n DomQueryConstructor.fn.is = function (selector) {\n return !!selector && this.filter(selector).length > 0;\n };\n DomQueryConstructor.fn.init.prototype = DomQueryConstructor.fn;\n DomQueryConstructor.overrideDefaults = function (callback) {\n var defaults;\n var sub = function (selector, context) {\n defaults = defaults || callback();\n if (arguments.length === 0) {\n selector = defaults.element;\n }\n if (!context) {\n context = defaults.context;\n }\n return new sub.fn.init(selector, context);\n };\n DomQuery.extend(sub, this);\n return sub;\n };\n DomQueryConstructor.attrHooks = attrHooks;\n DomQueryConstructor.cssHooks = cssHooks;\n var DomQuery = DomQueryConstructor;\n\n var each$f = Tools.each;\n var grep$1 = Tools.grep;\n var isIE = Env.ie;\n var simpleSelectorRe = /^([a-z0-9],?)+$/i;\n var setupAttrHooks = function (styles, settings, getContext) {\n var keepValues = settings.keep_values;\n var keepUrlHook = {\n set: function ($elm, value, name) {\n if (settings.url_converter && value !== null) {\n value = settings.url_converter.call(settings.url_converter_scope || getContext(), value, name, $elm[0]);\n }\n $elm.attr('data-mce-' + name, value).attr(name, value);\n },\n get: function ($elm, name) {\n return $elm.attr('data-mce-' + name) || $elm.attr(name);\n }\n };\n var attrHooks = {\n style: {\n set: function ($elm, value) {\n if (value !== null && typeof value === 'object') {\n $elm.css(value);\n return;\n }\n if (keepValues) {\n $elm.attr('data-mce-style', value);\n }\n if (value !== null && typeof value === 'string') {\n $elm.removeAttr('style');\n $elm.css(styles.parse(value));\n } else {\n $elm.attr('style', value);\n }\n },\n get: function ($elm) {\n var value = $elm.attr('data-mce-style') || $elm.attr('style');\n value = styles.serialize(styles.parse(value), $elm[0].nodeName);\n return value;\n }\n }\n };\n if (keepValues) {\n attrHooks.href = attrHooks.src = keepUrlHook;\n }\n return attrHooks;\n };\n var updateInternalStyleAttr = function (styles, $elm) {\n var rawValue = $elm.attr('style');\n var value = styles.serialize(styles.parse(rawValue), $elm[0].nodeName);\n if (!value) {\n value = null;\n }\n $elm.attr('data-mce-style', value);\n };\n var findNodeIndex = function (node, normalized) {\n var idx = 0, lastNodeType, nodeType;\n if (node) {\n for (lastNodeType = node.nodeType, node = node.previousSibling; node; node = node.previousSibling) {\n nodeType = node.nodeType;\n if (normalized && nodeType === 3) {\n if (nodeType === lastNodeType || !node.nodeValue.length) {\n continue;\n }\n }\n idx++;\n lastNodeType = nodeType;\n }\n }\n return idx;\n };\n var DOMUtils = function (doc, settings) {\n if (settings === void 0) {\n settings = {};\n }\n var addedStyles = {};\n var win = window;\n var files = {};\n var counter = 0;\n var stdMode = true;\n var boxModel = true;\n var styleSheetLoader = instance.forElement(SugarElement.fromDom(doc), {\n contentCssCors: settings.contentCssCors,\n referrerPolicy: settings.referrerPolicy\n });\n var boundEvents = [];\n var schema = settings.schema ? settings.schema : Schema({});\n var styles = Styles({\n url_converter: settings.url_converter,\n url_converter_scope: settings.url_converter_scope\n }, settings.schema);\n var events = settings.ownEvents ? new EventUtils() : EventUtils.Event;\n var blockElementsMap = schema.getBlockElements();\n var $ = DomQuery.overrideDefaults(function () {\n return {\n context: doc,\n element: self.getRoot()\n };\n });\n var isBlock = function (node) {\n if (typeof node === 'string') {\n return !!blockElementsMap[node];\n } else if (node) {\n var type = node.nodeType;\n if (type) {\n return !!(type === 1 && blockElementsMap[node.nodeName]);\n }\n }\n return false;\n };\n var get = function (elm) {\n return elm && doc && isString$1(elm) ? doc.getElementById(elm) : elm;\n };\n var $$ = function (elm) {\n return $(typeof elm === 'string' ? get(elm) : elm);\n };\n var getAttrib = function (elm, name, defaultVal) {\n var hook, value;\n var $elm = $$(elm);\n if ($elm.length) {\n hook = attrHooks[name];\n if (hook && hook.get) {\n value = hook.get($elm, name);\n } else {\n value = $elm.attr(name);\n }\n }\n if (typeof value === 'undefined') {\n value = defaultVal || '';\n }\n return value;\n };\n var getAttribs = function (elm) {\n var node = get(elm);\n if (!node) {\n return [];\n }\n return node.attributes;\n };\n var setAttrib = function (elm, name, value) {\n if (value === '') {\n value = null;\n }\n var $elm = $$(elm);\n var originalValue = $elm.attr(name);\n if (!$elm.length) {\n return;\n }\n var hook = attrHooks[name];\n if (hook && hook.set) {\n hook.set($elm, value, name);\n } else {\n $elm.attr(name, value);\n }\n if (originalValue !== value && settings.onSetAttrib) {\n settings.onSetAttrib({\n attrElm: $elm,\n attrName: name,\n attrValue: value\n });\n }\n };\n var clone = function (node, deep) {\n if (!isIE || node.nodeType !== 1 || deep) {\n return node.cloneNode(deep);\n } else {\n var clone_1 = doc.createElement(node.nodeName);\n each$f(getAttribs(node), function (attr) {\n setAttrib(clone_1, attr.nodeName, getAttrib(node, attr.nodeName));\n });\n return clone_1;\n }\n };\n var getRoot = function () {\n return settings.root_element || doc.body;\n };\n var getViewPort = function (argWin) {\n var vp = getBounds(argWin);\n return {\n x: vp.x,\n y: vp.y,\n w: vp.width,\n h: vp.height\n };\n };\n var getPos$1 = function (elm, rootElm) {\n return getPos(doc.body, get(elm), rootElm);\n };\n var setStyle = function (elm, name, value) {\n var $elm = isString$1(name) ? $$(elm).css(name, value) : $$(elm).css(name);\n if (settings.update_styles) {\n updateInternalStyleAttr(styles, $elm);\n }\n };\n var setStyles = function (elm, stylesArg) {\n var $elm = $$(elm).css(stylesArg);\n if (settings.update_styles) {\n updateInternalStyleAttr(styles, $elm);\n }\n };\n var getStyle = function (elm, name, computed) {\n var $elm = $$(elm);\n if (computed) {\n return $elm.css(name);\n }\n name = name.replace(/-(\\D)/g, function (a, b) {\n return b.toUpperCase();\n });\n if (name === 'float') {\n name = Env.browser.isIE() ? 'styleFloat' : 'cssFloat';\n }\n return $elm[0] && $elm[0].style ? $elm[0].style[name] : undefined;\n };\n var getSize = function (elm) {\n var w, h;\n elm = get(elm);\n w = getStyle(elm, 'width');\n h = getStyle(elm, 'height');\n if (w.indexOf('px') === -1) {\n w = 0;\n }\n if (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 var getRect = function (elm) {\n elm = get(elm);\n var pos = getPos$1(elm);\n var size = getSize(elm);\n return {\n x: pos.x,\n y: pos.y,\n w: size.w,\n h: size.h\n };\n };\n var is = function (elm, selector) {\n var i;\n if (!elm) {\n return false;\n }\n if (!Array.isArray(elm)) {\n if (selector === '*') {\n return elm.nodeType === 1;\n }\n if (simpleSelectorRe.test(selector)) {\n var selectors = selector.toLowerCase().split(/,/);\n var elmName = elm.nodeName.toLowerCase();\n for (i = selectors.length - 1; i >= 0; i--) {\n if (selectors[i] === elmName) {\n return true;\n }\n }\n return false;\n }\n if (elm.nodeType && elm.nodeType !== 1) {\n return false;\n }\n }\n var elms = !Array.isArray(elm) ? [elm] : elm;\n return Sizzle(selector, elms[0].ownerDocument || elms[0], null, elms).length > 0;\n };\n var getParents = function (elm, selector, root, collect) {\n var result = [];\n var selectorVal;\n var node = get(elm);\n collect = collect === undefined;\n root = root || (getRoot().nodeName !== 'BODY' ? getRoot().parentNode : null);\n if (Tools.is(selector, 'string')) {\n selectorVal = selector;\n if (selector === '*') {\n selector = function (node) {\n return node.nodeType === 1;\n };\n } else {\n selector = function (node) {\n return is(node, selectorVal);\n };\n }\n }\n while (node) {\n if (node === root || isNullable(node.nodeType) || isDocument$1(node) || isDocumentFragment(node)) {\n break;\n }\n if (!selector || typeof selector === 'function' && 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 var getParent = function (node, selector, root) {\n var parents = getParents(node, selector, root, false);\n return parents && parents.length > 0 ? parents[0] : null;\n };\n var _findSib = function (node, selector, name) {\n var func = selector;\n if (node) {\n if (typeof selector === 'string') {\n func = function (node) {\n return is(node, selector);\n };\n }\n for (node = node[name]; node; node = node[name]) {\n if (typeof func === 'function' && func(node)) {\n return node;\n }\n }\n }\n return null;\n };\n var getNext = function (node, selector) {\n return _findSib(node, selector, 'nextSibling');\n };\n var getPrev = function (node, selector) {\n return _findSib(node, selector, 'previousSibling');\n };\n var select = function (selector, scope) {\n return Sizzle(selector, get(scope) || settings.root_element || doc, []);\n };\n var run = function (elm, func, scope) {\n var result;\n var node = typeof elm === 'string' ? get(elm) : elm;\n if (!node) {\n return false;\n }\n if (Tools.isArray(node) && (node.length || node.length === 0)) {\n result = [];\n each$f(node, function (elm, i) {\n if (elm) {\n result.push(func.call(scope, typeof elm === 'string' ? get(elm) : elm, i));\n }\n });\n return result;\n }\n var context = scope ? scope : this;\n return func.call(context, node);\n };\n var setAttribs = function (elm, attrs) {\n $$(elm).each(function (i, node) {\n each$f(attrs, function (value, name) {\n setAttrib(node, name, value);\n });\n });\n };\n var setHTML = function (elm, html) {\n var $elm = $$(elm);\n if (isIE) {\n $elm.each(function (i, target) {\n if (target.canHaveHTML === false) {\n return;\n }\n while (target.firstChild) {\n target.removeChild(target.firstChild);\n }\n try {\n target.innerHTML = '
' + html;\n target.removeChild(target.firstChild);\n } catch (ex) {\n DomQuery('
').html('
' + html).contents().slice(1).appendTo(target);\n }\n return html;\n });\n } else {\n $elm.html(html);\n }\n };\n var add = function (parentElm, name, attrs, html, create) {\n return run(parentElm, function (parentElm) {\n var newElm = typeof name === 'string' ? doc.createElement(name) : name;\n setAttribs(newElm, attrs);\n if (html) {\n if (typeof html !== 'string' && html.nodeType) {\n newElm.appendChild(html);\n } else if (typeof html === 'string') {\n setHTML(newElm, html);\n }\n }\n return !create ? parentElm.appendChild(newElm) : newElm;\n });\n };\n var create = function (name, attrs, html) {\n return add(doc.createElement(name), name, attrs, html, true);\n };\n var decode = Entities.decode;\n var encode = Entities.encodeAllRaw;\n var createHTML = function (name, attrs, html) {\n var outHtml = '', key;\n outHtml += '<' + name;\n for (key in attrs) {\n if (hasNonNullableKey(attrs, key)) {\n outHtml += ' ' + key + '=\"' + encode(attrs[key]) + '\"';\n }\n }\n if (typeof html !== 'undefined') {\n return outHtml + '>' + html + '';\n }\n return outHtml + ' />';\n };\n var createFragment = function (html) {\n var node;\n var container = doc.createElement('div');\n var frag = doc.createDocumentFragment();\n frag.appendChild(container);\n if (html) {\n container.innerHTML = html;\n }\n while (node = container.firstChild) {\n frag.appendChild(node);\n }\n frag.removeChild(container);\n return frag;\n };\n var remove = function (node, keepChildren) {\n var $node = $$(node);\n if (keepChildren) {\n $node.each(function () {\n var child;\n while (child = this.firstChild) {\n if (child.nodeType === 3 && child.data.length === 0) {\n this.removeChild(child);\n } else {\n this.parentNode.insertBefore(child, this);\n }\n }\n }).remove();\n } else {\n $node.remove();\n }\n return $node.length > 1 ? $node.toArray() : $node[0];\n };\n var removeAllAttribs = function (e) {\n return run(e, function (e) {\n var i;\n var attrs = e.attributes;\n for (i = attrs.length - 1; i >= 0; i--) {\n e.removeAttributeNode(attrs.item(i));\n }\n });\n };\n var parseStyle = function (cssText) {\n return styles.parse(cssText);\n };\n var serializeStyle = function (stylesArg, name) {\n return styles.serialize(stylesArg, name);\n };\n var addStyle = function (cssText) {\n var head, styleElm;\n if (self !== DOMUtils.DOM && doc === document) {\n if (addedStyles[cssText]) {\n return;\n }\n addedStyles[cssText] = true;\n }\n styleElm = doc.getElementById('mceDefaultStyles');\n if (!styleElm) {\n styleElm = doc.createElement('style');\n styleElm.id = 'mceDefaultStyles';\n styleElm.type = 'text/css';\n head = doc.getElementsByTagName('head')[0];\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 var loadCSS = function (urls) {\n if (!urls) {\n urls = '';\n }\n each$k(urls.split(','), function (url) {\n files[url] = true;\n styleSheetLoader.load(url, noop);\n });\n };\n var toggleClass = function (elm, cls, state) {\n $$(elm).toggleClass(cls, state).each(function () {\n if (this.className === '') {\n DomQuery(this).attr('class', null);\n }\n });\n };\n var addClass = function (elm, cls) {\n $$(elm).addClass(cls);\n };\n var removeClass = function (elm, cls) {\n toggleClass(elm, cls, false);\n };\n var hasClass = function (elm, cls) {\n return $$(elm).hasClass(cls);\n };\n var show = function (elm) {\n $$(elm).show();\n };\n var hide = function (elm) {\n $$(elm).hide();\n };\n var isHidden = function (elm) {\n return $$(elm).css('display') === 'none';\n };\n var uniqueId = function (prefix) {\n return (!prefix ? 'mce_' : prefix) + counter++;\n };\n var getOuterHTML = function (elm) {\n var node = typeof elm === 'string' ? get(elm) : elm;\n return isElement$5(node) ? node.outerHTML : DomQuery('
').append(DomQuery(node).clone()).html();\n };\n var setOuterHTML = function (elm, html) {\n $$(elm).each(function () {\n try {\n if ('outerHTML' in this) {\n this.outerHTML = html;\n return;\n }\n } catch (ex) {\n }\n remove(DomQuery(this).html(html), true);\n });\n };\n var insertAfter = function (node, reference) {\n var referenceNode = get(reference);\n return run(node, function (node) {\n var parent = referenceNode.parentNode;\n var nextSibling = referenceNode.nextSibling;\n if (nextSibling) {\n parent.insertBefore(node, nextSibling);\n } else {\n parent.appendChild(node);\n }\n return node;\n });\n };\n var replace = function (newElm, oldElm, keepChildren) {\n return run(oldElm, function (oldElm) {\n if (Tools.is(oldElm, 'array')) {\n newElm = newElm.cloneNode(true);\n }\n if (keepChildren) {\n each$f(grep$1(oldElm.childNodes), function (node) {\n newElm.appendChild(node);\n });\n }\n return oldElm.parentNode.replaceChild(newElm, oldElm);\n });\n };\n var rename = function (elm, name) {\n var newElm;\n if (elm.nodeName !== name.toUpperCase()) {\n newElm = create(name);\n each$f(getAttribs(elm), function (attrNode) {\n setAttrib(newElm, attrNode.nodeName, getAttrib(elm, attrNode.nodeName));\n });\n replace(newElm, elm, true);\n }\n return newElm || elm;\n };\n var findCommonAncestor = function (a, b) {\n var ps = a, pe;\n while (ps) {\n 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 }\n return ps;\n };\n var toHex = function (rgbVal) {\n return styles.toHex(Tools.trim(rgbVal));\n };\n var isNonEmptyElement = function (node) {\n if (isElement$5(node)) {\n var isNamedAnchor = node.nodeName.toLowerCase() === 'a' && !getAttrib(node, 'href') && getAttrib(node, 'id');\n if (getAttrib(node, 'name') || getAttrib(node, 'data-mce-bookmark') || isNamedAnchor) {\n return true;\n }\n }\n return false;\n };\n var isEmpty = function (node, elements) {\n var type, name, brCount = 0;\n if (isNonEmptyElement(node)) {\n return false;\n }\n node = node.firstChild;\n if (node) {\n var walker = new DomTreeWalker(node, node.parentNode);\n var whitespace = schema ? schema.getWhiteSpaceElements() : {};\n elements = elements || (schema ? schema.getNonEmptyElements() : null);\n do {\n type = node.nodeType;\n if (isElement$5(node)) {\n var bogusVal = node.getAttribute('data-mce-bogus');\n if (bogusVal) {\n node = walker.next(bogusVal === 'all');\n continue;\n }\n name = node.nodeName.toLowerCase();\n if (elements && elements[name]) {\n if (name === 'br') {\n brCount++;\n node = walker.next();\n continue;\n }\n return false;\n }\n if (isNonEmptyElement(node)) {\n return false;\n }\n }\n if (type === 8) {\n return false;\n }\n if (type === 3 && !isWhitespaceText(node.nodeValue)) {\n return false;\n }\n if (type === 3 && node.parentNode && whitespace[node.parentNode.nodeName] && isWhitespaceText(node.nodeValue)) {\n return false;\n }\n node = walker.next();\n } while (node);\n }\n return brCount <= 1;\n };\n var createRng = function () {\n return doc.createRange();\n };\n var split = function (parentElm, splitElm, replacementElm) {\n var range = createRng();\n var beforeFragment;\n var afterFragment;\n var parentNode;\n if (parentElm && splitElm) {\n range.setStart(parentElm.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(parentElm.parentNode, findNodeIndex(parentElm) + 1);\n afterFragment = range.extractContents();\n parentNode = parentElm.parentNode;\n parentNode.insertBefore(trimNode(self, beforeFragment), parentElm);\n if (replacementElm) {\n parentNode.insertBefore(replacementElm, parentElm);\n } else {\n parentNode.insertBefore(splitElm, parentElm);\n }\n parentNode.insertBefore(trimNode(self, afterFragment), parentElm);\n remove(parentElm);\n return replacementElm || splitElm;\n }\n };\n var bind = function (target, name, func, scope) {\n if (Tools.isArray(target)) {\n var i = target.length;\n var rv = [];\n while (i--) {\n rv[i] = bind(target[i], name, func, scope);\n }\n return rv;\n }\n if (settings.collect && (target === doc || target === win)) {\n boundEvents.push([\n target,\n name,\n func,\n scope\n ]);\n }\n var output = events.bind(target, name, func, scope || self);\n return output;\n };\n var unbind = function (target, name, func) {\n if (Tools.isArray(target)) {\n var i = target.length;\n var 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 var i = boundEvents.length;\n while (i--) {\n var item = boundEvents[i];\n if (target === item[0] && (!name || name === item[1]) && (!func || func === item[2])) {\n events.unbind(item[0], item[1], item[2]);\n }\n }\n }\n return events.unbind(target, name, func);\n }\n };\n var fire = function (target, name, evt) {\n return events.fire(target, name, evt);\n };\n var getContentEditable = function (node) {\n if (node && isElement$5(node)) {\n var 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 var getContentEditableParent = function (node) {\n var root = getRoot();\n var state = null;\n for (; node && node !== root; node = node.parentNode) {\n state = getContentEditable(node);\n if (state !== null) {\n break;\n }\n }\n return state;\n };\n var destroy = function () {\n if (boundEvents.length > 0) {\n var i = boundEvents.length;\n while (i--) {\n var item = boundEvents[i];\n events.unbind(item[0], item[1], item[2]);\n }\n }\n each$j(files, function (_, url) {\n styleSheetLoader.unload(url);\n delete files[url];\n });\n if (Sizzle.setDocument) {\n Sizzle.setDocument();\n }\n };\n var isChildOf = function (node, parent) {\n if (!isIE) {\n return node === parent || parent.contains(node);\n } else {\n while (node) {\n if (parent === node) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n }\n };\n var dumpRng = function (r) {\n return 'startContainer: ' + r.startContainer.nodeName + ', startOffset: ' + r.startOffset + ', endContainer: ' + r.endContainer.nodeName + ', endOffset: ' + r.endOffset;\n };\n var self = {\n doc: doc,\n settings: settings,\n win: win,\n files: files,\n stdMode: stdMode,\n boxModel: boxModel,\n styleSheetLoader: styleSheetLoader,\n boundEvents: boundEvents,\n styles: styles,\n schema: schema,\n events: events,\n isBlock: isBlock,\n $: $,\n $$: $$,\n root: null,\n clone: clone,\n getRoot: getRoot,\n getViewPort: getViewPort,\n getRect: getRect,\n getSize: getSize,\n getParent: getParent,\n getParents: getParents,\n get: get,\n getNext: getNext,\n getPrev: getPrev,\n select: select,\n is: is,\n add: add,\n create: create,\n createHTML: createHTML,\n createFragment: createFragment,\n remove: remove,\n setStyle: setStyle,\n getStyle: getStyle,\n setStyles: setStyles,\n removeAllAttribs: removeAllAttribs,\n setAttrib: setAttrib,\n setAttribs: setAttribs,\n getAttrib: getAttrib,\n getPos: getPos$1,\n parseStyle: parseStyle,\n serializeStyle: serializeStyle,\n addStyle: addStyle,\n loadCSS: loadCSS,\n addClass: addClass,\n removeClass: removeClass,\n hasClass: hasClass,\n toggleClass: toggleClass,\n show: show,\n hide: hide,\n isHidden: isHidden,\n uniqueId: uniqueId,\n setHTML: setHTML,\n getOuterHTML: getOuterHTML,\n setOuterHTML: setOuterHTML,\n decode: decode,\n encode: encode,\n insertAfter: insertAfter,\n replace: replace,\n rename: rename,\n findCommonAncestor: findCommonAncestor,\n toHex: toHex,\n run: run,\n getAttribs: getAttribs,\n isEmpty: isEmpty,\n createRng: createRng,\n nodeIndex: findNodeIndex,\n split: split,\n bind: bind,\n unbind: unbind,\n fire: fire,\n getContentEditable: getContentEditable,\n getContentEditableParent: getContentEditableParent,\n destroy: destroy,\n isChildOf: isChildOf,\n dumpRng: dumpRng\n };\n var attrHooks = setupAttrHooks(styles, settings, constant(self));\n return self;\n };\n DOMUtils.DOM = DOMUtils(document);\n DOMUtils.nodeIndex = findNodeIndex;\n\n var DOM$a = DOMUtils.DOM;\n var each$e = Tools.each, grep = Tools.grep;\n var QUEUED = 0;\n var LOADING = 1;\n var LOADED = 2;\n var FAILED = 3;\n var ScriptLoader = function () {\n function ScriptLoader(settings) {\n if (settings === void 0) {\n settings = {};\n }\n this.states = {};\n this.queue = [];\n this.scriptLoadedCallbacks = {};\n this.queueLoadedCallbacks = [];\n this.loading = 0;\n this.settings = settings;\n }\n ScriptLoader.prototype._setReferrerPolicy = function (referrerPolicy) {\n this.settings.referrerPolicy = referrerPolicy;\n };\n ScriptLoader.prototype.loadScript = function (url, success, failure) {\n var dom = DOM$a;\n var elm;\n var cleanup = function () {\n dom.remove(id);\n if (elm) {\n elm.onerror = elm.onload = elm = null;\n }\n };\n var done = function () {\n cleanup();\n success();\n };\n var error = function () {\n cleanup();\n if (isFunction(failure)) {\n failure();\n } else {\n if (typeof console !== 'undefined' && console.log) {\n console.log('Failed to load script: ' + url);\n }\n }\n };\n var 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 ScriptLoader.prototype.isDone = function (url) {\n return this.states[url] === LOADED;\n };\n ScriptLoader.prototype.markDone = function (url) {\n this.states[url] = LOADED;\n };\n ScriptLoader.prototype.add = function (url, success, scope, failure) {\n var state = this.states[url];\n this.queue.push(url);\n if (state === undefined) {\n this.states[url] = QUEUED;\n }\n if (success) {\n if (!this.scriptLoadedCallbacks[url]) {\n this.scriptLoadedCallbacks[url] = [];\n }\n this.scriptLoadedCallbacks[url].push({\n success: success,\n failure: failure,\n scope: scope || this\n });\n }\n };\n ScriptLoader.prototype.load = function (url, success, scope, failure) {\n return this.add(url, success, scope, failure);\n };\n ScriptLoader.prototype.remove = function (url) {\n delete this.states[url];\n delete this.scriptLoadedCallbacks[url];\n };\n ScriptLoader.prototype.loadQueue = function (success, scope, failure) {\n this.loadScripts(this.queue, success, scope, failure);\n };\n ScriptLoader.prototype.loadScripts = function (scripts, success, scope, failure) {\n var self = this;\n var failures = [];\n var execCallbacks = function (name, url) {\n each$e(self.scriptLoadedCallbacks[url], function (callback) {\n if (isFunction(callback[name])) {\n callback[name].call(callback.scope);\n }\n });\n self.scriptLoadedCallbacks[url] = undefined;\n };\n self.queueLoadedCallbacks.push({\n success: success,\n failure: failure,\n scope: scope || this\n });\n var loadScripts = function () {\n var loadingScripts = grep(scripts);\n scripts.length = 0;\n each$e(loadingScripts, function (url) {\n if (self.states[url] === LOADED) {\n execCallbacks('success', url);\n return;\n }\n if (self.states[url] === FAILED) {\n execCallbacks('failure', url);\n return;\n }\n if (self.states[url] !== LOADING) {\n self.states[url] = LOADING;\n self.loading++;\n self.loadScript(url, function () {\n self.states[url] = LOADED;\n self.loading--;\n execCallbacks('success', url);\n loadScripts();\n }, function () {\n self.states[url] = FAILED;\n self.loading--;\n failures.push(url);\n execCallbacks('failure', url);\n loadScripts();\n });\n }\n });\n if (!self.loading) {\n var notifyCallbacks = self.queueLoadedCallbacks.slice(0);\n self.queueLoadedCallbacks.length = 0;\n each$e(notifyCallbacks, function (callback) {\n if (failures.length === 0) {\n if (isFunction(callback.success)) {\n callback.success.call(callback.scope);\n }\n } else {\n if (isFunction(callback.failure)) {\n callback.failure.call(callback.scope, failures);\n }\n }\n });\n }\n };\n loadScripts();\n };\n ScriptLoader.ScriptLoader = new ScriptLoader();\n return ScriptLoader;\n }();\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var isRaw = function (str) {\n return isObject(str) && has$2(str, 'raw');\n };\n var isTokenised = function (str) {\n return isArray$1(str) && str.length > 1;\n };\n var data = {};\n var currentCode = Cell('en');\n var getLanguageData = function () {\n return get$9(data, currentCode.get());\n };\n var getData = function () {\n return map$2(data, function (value) {\n return __assign({}, value);\n });\n };\n var setCode = function (newCode) {\n if (newCode) {\n currentCode.set(newCode);\n }\n };\n var getCode = function () {\n return currentCode.get();\n };\n var add$4 = function (code, items) {\n var langData = data[code];\n if (!langData) {\n data[code] = langData = {};\n }\n each$j(items, function (translation, name) {\n langData[name.toLowerCase()] = translation;\n });\n };\n var translate = function (text) {\n var langData = getLanguageData().getOr({});\n var toString = function (obj) {\n if (isFunction(obj)) {\n return Object.prototype.toString.call(obj);\n }\n return !isEmpty(obj) ? '' + obj : '';\n };\n var isEmpty = function (text) {\n return text === '' || text === null || text === undefined;\n };\n var getLangData = function (text) {\n var textstr = toString(text);\n return get$9(langData, textstr.toLowerCase()).map(toString).getOr(textstr);\n };\n var removeContext = function (str) {\n return str.replace(/{context:\\w+}$/, '');\n };\n if (isEmpty(text)) {\n return '';\n }\n if (isRaw(text)) {\n return toString(text.raw);\n }\n if (isTokenised(text)) {\n var values_1 = text.slice(1);\n var substitued = getLangData(text[0]).replace(/\\{([0-9]+)\\}/g, function ($1, $2) {\n return has$2(values_1, $2) ? toString(values_1[$2]) : $1;\n });\n return removeContext(substitued);\n }\n return removeContext(getLangData(text));\n };\n var isRtl$1 = function () {\n return getLanguageData().bind(function (items) {\n return get$9(items, '_dir');\n }).exists(function (dir) {\n return dir === 'rtl';\n });\n };\n var hasCode = function (code) {\n return has$2(data, code);\n };\n var I18n = {\n getData: getData,\n setCode: setCode,\n getCode: getCode,\n add: add$4,\n translate: translate,\n isRtl: isRtl$1,\n hasCode: hasCode\n };\n\n var AddOnManager = function () {\n var items = [];\n var urls = {};\n var lookup = {};\n var _listeners = [];\n var runListeners = function (name, state) {\n var matchedListeners = filter$4(_listeners, function (listener) {\n return listener.name === name && listener.state === state;\n });\n each$k(matchedListeners, function (listener) {\n return listener.callback();\n });\n };\n var get = function (name) {\n if (lookup[name]) {\n return lookup[name].instance;\n }\n return undefined;\n };\n var dependencies = function (name) {\n var result;\n if (lookup[name]) {\n result = lookup[name].dependencies;\n }\n return result || [];\n };\n var requireLangPack = function (name, languages) {\n if (AddOnManager.languageLoad !== false) {\n waitFor(name, function () {\n var language = I18n.getCode();\n var wrappedLanguages = ',' + (languages || '') + ',';\n if (!language || languages && wrappedLanguages.indexOf(',' + language + ',') === -1) {\n return;\n }\n ScriptLoader.ScriptLoader.add(urls[name] + '/langs/' + language + '.js');\n }, 'loaded');\n }\n };\n var add = function (id, addOn, dependencies) {\n var addOnConstructor = addOn;\n items.push(addOnConstructor);\n lookup[id] = {\n instance: addOnConstructor,\n dependencies: dependencies\n };\n runListeners(id, 'added');\n return addOnConstructor;\n };\n var remove = function (name) {\n delete urls[name];\n delete lookup[name];\n };\n var createUrl = function (baseUrl, dep) {\n if (typeof dep === 'object') {\n return dep;\n }\n return typeof baseUrl === 'string' ? {\n prefix: '',\n resource: dep,\n suffix: ''\n } : {\n prefix: baseUrl.prefix,\n resource: dep,\n suffix: baseUrl.suffix\n };\n };\n var addComponents = function (pluginName, scripts) {\n var pluginUrl = urls[pluginName];\n each$k(scripts, function (script) {\n ScriptLoader.ScriptLoader.add(pluginUrl + '/' + script);\n });\n };\n var loadDependencies = function (name, addOnUrl, success, scope) {\n var deps = dependencies(name);\n each$k(deps, function (dep) {\n var newUrl = createUrl(addOnUrl, dep);\n load(newUrl.resource, newUrl, undefined, undefined);\n });\n if (success) {\n if (scope) {\n success.call(scope);\n } else {\n success.call(ScriptLoader);\n }\n }\n };\n var load = function (name, addOnUrl, success, scope, failure) {\n if (urls[name]) {\n return;\n }\n var urlString = typeof addOnUrl === 'string' ? 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 var done = function () {\n runListeners(name, 'loaded');\n loadDependencies(name, addOnUrl, success, scope);\n };\n if (lookup[name]) {\n done();\n } else {\n ScriptLoader.ScriptLoader.add(urlString, done, scope, failure);\n }\n };\n var waitFor = function (name, callback, state) {\n if (state === void 0) {\n state = 'added';\n }\n if (has$2(lookup, name) && state === 'added') {\n callback();\n } else if (has$2(urls, name) && state === 'loaded') {\n callback();\n } else {\n _listeners.push({\n name: name,\n state: state,\n callback: callback\n });\n }\n };\n return {\n items: items,\n urls: urls,\n lookup: lookup,\n _listeners: _listeners,\n get: get,\n dependencies: dependencies,\n requireLangPack: requireLangPack,\n add: add,\n remove: remove,\n createUrl: createUrl,\n addComponents: addComponents,\n load: load,\n waitFor: waitFor\n };\n };\n AddOnManager.languageLoad = true;\n AddOnManager.baseURL = '';\n AddOnManager.PluginManager = AddOnManager();\n AddOnManager.ThemeManager = AddOnManager();\n\n var singleton = function (doRevoke) {\n var subject = Cell(Optional.none());\n var revoke = function () {\n return subject.get().each(doRevoke);\n };\n var clear = function () {\n revoke();\n subject.set(Optional.none());\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n var get = function () {\n return subject.get();\n };\n var set = function (s) {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear: clear,\n isSet: isSet,\n get: get,\n set: set\n };\n };\n var value = function () {\n var subject = singleton(noop);\n var on = function (f) {\n return subject.get().each(f);\n };\n return __assign(__assign({}, subject), { on: on });\n };\n\n var first = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNull(timer)) {\n timer = setTimeout(function () {\n timer = null;\n fn.apply(null, args);\n }, rate);\n }\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n var last = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n cancel();\n timer = setTimeout(function () {\n timer = null;\n fn.apply(null, args);\n }, rate);\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n\n var read$4 = function (element, attr) {\n var value = get$6(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n var add$3 = function (element, attr, id) {\n var old = read$4(element, attr);\n var nu = old.concat([id]);\n set$1(element, attr, nu.join(' '));\n return true;\n };\n var remove$5 = function (element, attr, id) {\n var nu = filter$4(read$4(element, attr), function (v) {\n return v !== id;\n });\n if (nu.length > 0) {\n set$1(element, attr, nu.join(' '));\n } else {\n remove$6(element, attr);\n }\n return false;\n };\n\n var supports = function (element) {\n return element.dom.classList !== undefined;\n };\n var get$4 = function (element) {\n return read$4(element, 'class');\n };\n var add$2 = function (element, clazz) {\n return add$3(element, 'class', clazz);\n };\n var remove$4 = function (element, clazz) {\n return remove$5(element, 'class', clazz);\n };\n\n var add$1 = function (element, clazz) {\n if (supports(element)) {\n element.dom.classList.add(clazz);\n } else {\n add$2(element, clazz);\n }\n };\n var cleanClass = function (element) {\n var classList = supports(element) ? element.dom.classList : get$4(element);\n if (classList.length === 0) {\n remove$6(element, 'class');\n }\n };\n var remove$3 = function (element, clazz) {\n if (supports(element)) {\n var classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$4(element, clazz);\n }\n cleanClass(element);\n };\n var has = function (element, clazz) {\n return supports(element) && element.dom.classList.contains(clazz);\n };\n\n var descendants$1 = function (scope, predicate) {\n var result = [];\n each$k(children(scope), function (x) {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(descendants$1(x, predicate));\n });\n return result;\n };\n\n var descendants = function (scope, selector) {\n return all(selector, scope);\n };\n\n var annotation = constant('mce-annotation');\n var dataAnnotation = constant('data-mce-annotation');\n var dataAnnotationId = constant('data-mce-annotation-uid');\n\n var identify = function (editor, annotationName) {\n var rng = editor.selection.getRng();\n var start = SugarElement.fromDom(rng.startContainer);\n var root = SugarElement.fromDom(editor.getBody());\n var selector = annotationName.fold(function () {\n return '.' + annotation();\n }, function (an) {\n return '[' + dataAnnotation() + '=\"' + an + '\"]';\n });\n var newStart = child$1(start, rng.startOffset).getOr(start);\n var closest = closest$2(newStart, selector, function (n) {\n return eq(n, root);\n });\n var getAttr = function (c, property) {\n if (has$1(c, property)) {\n return Optional.some(get$6(c, property));\n } else {\n return Optional.none();\n }\n };\n return closest.bind(function (c) {\n return getAttr(c, '' + dataAnnotationId()).bind(function (uid) {\n return getAttr(c, '' + dataAnnotation()).map(function (name) {\n var elements = findMarkers(editor, uid);\n return {\n uid: uid,\n name: name,\n elements: elements\n };\n });\n });\n });\n };\n var isAnnotation = function (elem) {\n return isElement$6(elem) && has(elem, annotation());\n };\n var findMarkers = function (editor, uid) {\n var body = SugarElement.fromDom(editor.getBody());\n return descendants(body, '[' + dataAnnotationId() + '=\"' + uid + '\"]');\n };\n var findAll = function (editor, name) {\n var body = SugarElement.fromDom(editor.getBody());\n var markers = descendants(body, '[' + dataAnnotation() + '=\"' + name + '\"]');\n var directory = {};\n each$k(markers, function (m) {\n var uid = get$6(m, dataAnnotationId());\n var nodesAlready = get$9(directory, uid).getOr([]);\n directory[uid] = nodesAlready.concat([m]);\n });\n return directory;\n };\n\n var setup$n = function (editor, _registry) {\n var changeCallbacks = Cell({});\n var initData = function () {\n return {\n listeners: [],\n previous: value()\n };\n };\n var withCallbacks = function (name, f) {\n updateCallbacks(name, function (data) {\n f(data);\n return data;\n });\n };\n var updateCallbacks = function (name, f) {\n var callbackMap = changeCallbacks.get();\n var data = get$9(callbackMap, name).getOrThunk(initData);\n var outputData = f(data);\n callbackMap[name] = outputData;\n changeCallbacks.set(callbackMap);\n };\n var fireCallbacks = function (name, uid, elements) {\n withCallbacks(name, function (data) {\n each$k(data.listeners, function (f) {\n return f(true, name, {\n uid: uid,\n nodes: map$3(elements, function (elem) {\n return elem.dom;\n })\n });\n });\n });\n };\n var fireNoAnnotation = function (name) {\n withCallbacks(name, function (data) {\n each$k(data.listeners, function (f) {\n return f(false, name);\n });\n });\n };\n var onNodeChange = last(function () {\n var callbackMap = changeCallbacks.get();\n var annotations = sort(keys(callbackMap));\n each$k(annotations, function (name) {\n updateCallbacks(name, function (data) {\n var prev = data.previous.get();\n identify(editor, Optional.some(name)).fold(function () {\n if (prev.isSome()) {\n fireNoAnnotation(name);\n data.previous.clear();\n }\n }, function (_a) {\n var uid = _a.uid, name = _a.name, elements = _a.elements;\n if (!is$1(prev, uid)) {\n fireCallbacks(name, uid, elements);\n data.previous.set(uid);\n }\n });\n return {\n previous: data.previous,\n listeners: data.listeners\n };\n });\n });\n }, 30);\n editor.on('remove', function () {\n onNodeChange.cancel();\n });\n editor.on('NodeChange', function () {\n onNodeChange.throttle();\n });\n var addListener = function (name, f) {\n updateCallbacks(name, function (data) {\n return {\n previous: data.previous,\n listeners: data.listeners.concat([f])\n };\n });\n };\n return { addListener: addListener };\n };\n\n var setup$m = function (editor, registry) {\n var identifyParserNode = function (span) {\n return Optional.from(span.attr(dataAnnotation())).bind(registry.lookup);\n };\n editor.on('init', function () {\n editor.serializer.addNodeFilter('span', function (spans) {\n each$k(spans, function (span) {\n identifyParserNode(span).each(function (settings) {\n if (settings.persistent === false) {\n span.unwrap();\n }\n });\n });\n });\n });\n };\n\n var create$7 = function () {\n var annotations = {};\n var register = function (name, settings) {\n annotations[name] = {\n name: name,\n settings: settings\n };\n };\n var lookup = function (name) {\n return get$9(annotations, name).map(function (a) {\n return a.settings;\n });\n };\n return {\n register: register,\n lookup: lookup\n };\n };\n\n var unique = 0;\n var generate = function (prefix) {\n var date = new Date();\n var time = date.getTime();\n var random = Math.floor(Math.random() * 1000000000);\n unique++;\n return prefix + '_' + random + unique + String(time);\n };\n\n var add = function (element, classes) {\n each$k(classes, function (x) {\n add$1(element, x);\n });\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n return children(SugarElement.fromDom(div));\n };\n var fromDom$1 = function (nodes) {\n return map$3(nodes, SugarElement.fromDom);\n };\n\n var get$3 = function (element) {\n return element.dom.innerHTML;\n };\n var set = function (element, content) {\n var owner = owner$1(element);\n var docDom = owner.dom;\n var fragment = SugarElement.fromDom(docDom.createDocumentFragment());\n var contentElements = fromHtml(content, docDom);\n append(fragment, contentElements);\n empty(element);\n append$1(element, fragment);\n };\n\n var clone$1 = function (original, isDeep) {\n return SugarElement.fromDom(original.dom.cloneNode(isDeep));\n };\n var shallow = function (original) {\n return clone$1(original, false);\n };\n var deep$1 = function (original) {\n return clone$1(original, true);\n };\n\n var TextWalker = function (startNode, rootNode, isBoundary) {\n if (isBoundary === void 0) {\n isBoundary = never;\n }\n var walker = new DomTreeWalker(startNode, rootNode);\n var walk = function (direction) {\n var next;\n do {\n next = walker[direction]();\n } while (next && !isText$7(next) && !isBoundary(next));\n return Optional.from(next).filter(isText$7);\n };\n return {\n current: function () {\n return Optional.from(walker.current()).filter(isText$7);\n },\n next: function () {\n return walk('next');\n },\n prev: function () {\n return walk('prev');\n },\n prev2: function () {\n return walk('prev2');\n }\n };\n };\n\n var TextSeeker = function (dom, isBoundary) {\n var isBlockBoundary = isBoundary ? isBoundary : function (node) {\n return dom.isBlock(node) || isBr$5(node) || isContentEditableFalse$b(node);\n };\n var walk = function (node, offset, walker, process) {\n if (isText$7(node)) {\n var 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(function (next) {\n return walk(next.container, next.offset, walker, process);\n });\n };\n var backwards = function (node, offset, process, root) {\n var walker = TextWalker(node, root, isBlockBoundary);\n return walk(node, offset, function () {\n return walker.prev().map(function (prev) {\n return {\n container: prev,\n offset: prev.length\n };\n });\n }, process).getOrNull();\n };\n var forwards = function (node, offset, process, root) {\n var walker = TextWalker(node, root, isBlockBoundary);\n return walk(node, offset, function () {\n return walker.next().map(function (next) {\n return {\n container: next,\n offset: 0\n };\n });\n }, process).getOrNull();\n };\n return {\n backwards: backwards,\n forwards: forwards\n };\n };\n\n var round$2 = Math.round;\n var clone = function (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 var collapse = function (rect, toStart) {\n rect = clone(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 var isEqual = function (rect1, rect2) {\n return rect1.left === rect2.left && rect1.top === rect2.top && rect1.bottom === rect2.bottom && rect1.right === rect2.right;\n };\n var isValidOverflow = function (overflowY, rect1, rect2) {\n return overflowY >= 0 && overflowY <= Math.min(rect1.height, rect2.height) / 2;\n };\n var isAbove$1 = function (rect1, rect2) {\n var 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 var isBelow$1 = function (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 var containsXY = function (rect, clientX, clientY) {\n return clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom;\n };\n\n var clamp$2 = function (value, min, max) {\n return Math.min(Math.max(value, min), max);\n };\n\n var getSelectedNode = function (range) {\n var startContainer = range.startContainer, startOffset = range.startOffset;\n if (startContainer.hasChildNodes() && range.endOffset === startOffset + 1) {\n return startContainer.childNodes[startOffset];\n }\n return null;\n };\n var getNode$1 = function (container, offset) {\n if (isElement$5(container) && container.hasChildNodes()) {\n var childNodes = container.childNodes;\n var safeOffset = clamp$2(offset, 0, childNodes.length - 1);\n return childNodes[safeOffset];\n } else {\n return container;\n }\n };\n var getNodeUnsafe = function (container, offset) {\n if (offset < 0 && isElement$5(container) && container.hasChildNodes()) {\n return undefined;\n } else {\n return getNode$1(container, offset);\n }\n };\n\n var 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 var isExtendingChar = function (ch) {\n return typeof ch === 'string' && ch.charCodeAt(0) >= 768 && extendingChars.test(ch);\n };\n\n var or = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return function (x) {\n for (var i = 0; i < args.length; i++) {\n if (args[i](x)) {\n return true;\n }\n }\n return false;\n };\n };\n var and = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return function (x) {\n for (var i = 0; i < args.length; i++) {\n if (!args[i](x)) {\n return false;\n }\n }\n return true;\n };\n };\n\n var isElement$3 = isElement$5;\n var isCaretCandidate$2 = isCaretCandidate$3;\n var isBlock$1 = matchStyleValues('display', 'block table');\n var isFloated = matchStyleValues('float', 'left right');\n var isValidElementCaretCandidate = and(isElement$3, isCaretCandidate$2, not(isFloated));\n var isNotPre = not(matchStyleValues('white-space', 'pre pre-line pre-wrap'));\n var isText$4 = isText$7;\n var isBr$2 = isBr$5;\n var nodeIndex$1 = DOMUtils.nodeIndex;\n var resolveIndex$1 = getNodeUnsafe;\n var createRange$1 = function (doc) {\n return 'createRange' in doc ? doc.createRange() : DOMUtils.DOM.createRng();\n };\n var isWhiteSpace$1 = function (chr) {\n return chr && /[\\r\\n\\t ]/.test(chr);\n };\n var isRange = function (rng) {\n return !!rng.setStart && !!rng.setEnd;\n };\n var isHiddenWhiteSpaceRange = function (range) {\n var container = range.startContainer;\n var offset = range.startOffset;\n if (isWhiteSpace$1(range.toString()) && isNotPre(container.parentNode) && isText$7(container)) {\n var 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 var getBrClientRect = function (brNode) {\n var doc = brNode.ownerDocument;\n var rng = createRange$1(doc);\n var nbsp$1 = doc.createTextNode(nbsp);\n var parentNode = brNode.parentNode;\n parentNode.insertBefore(nbsp$1, brNode);\n rng.setStart(nbsp$1, 0);\n rng.setEnd(nbsp$1, 1);\n var clientRect = clone(rng.getBoundingClientRect());\n parentNode.removeChild(nbsp$1);\n return clientRect;\n };\n var getBoundingClientRectWebKitText = function (rng) {\n var sc = rng.startContainer;\n var ec = rng.endContainer;\n var so = rng.startOffset;\n var eo = rng.endOffset;\n if (sc === ec && isText$7(ec) && so === 0 && eo === 1) {\n var newRng = rng.cloneRange();\n newRng.setEndAfter(ec);\n return getBoundingClientRect$1(newRng);\n } else {\n return null;\n }\n };\n var isZeroRect = function (r) {\n return r.left === 0 && r.right === 0 && r.top === 0 && r.bottom === 0;\n };\n var getBoundingClientRect$1 = function (item) {\n var clientRect;\n var clientRects = item.getClientRects();\n if (clientRects.length > 0) {\n clientRect = clone(clientRects[0]);\n } else {\n clientRect = clone(item.getBoundingClientRect());\n }\n if (!isRange(item) && isBr$2(item) && isZeroRect(clientRect)) {\n return getBrClientRect(item);\n }\n if (isZeroRect(clientRect) && isRange(item)) {\n return getBoundingClientRectWebKitText(item);\n }\n return clientRect;\n };\n var collapseAndInflateWidth = function (clientRect, toStart) {\n var newClientRect = collapse(clientRect, toStart);\n newClientRect.width = 1;\n newClientRect.right = newClientRect.left + 1;\n return newClientRect;\n };\n var getCaretPositionClientRects = function (caretPosition) {\n var clientRects = [];\n var addUniqueAndValidRect = function (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 var addCharacterOffset = function (container, offset) {\n var range = createRange$1(container.ownerDocument);\n if (offset < container.data.length) {\n if (isExtendingChar(container.data[offset])) {\n return clientRects;\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 clientRects;\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 var container = caretPosition.container();\n var offset = caretPosition.offset();\n if (isText$4(container)) {\n addCharacterOffset(container, offset);\n return clientRects;\n }\n if (isElement$3(container)) {\n if (caretPosition.isAtEnd()) {\n var node = resolveIndex$1(container, offset);\n if (isText$4(node)) {\n addCharacterOffset(node, node.data.length);\n }\n if (isValidElementCaretCandidate(node) && !isBr$2(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), false));\n }\n } else {\n var node = resolveIndex$1(container, offset);\n if (isText$4(node)) {\n addCharacterOffset(node, 0);\n }\n if (isValidElementCaretCandidate(node) && caretPosition.isAtEnd()) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), false));\n return clientRects;\n }\n var beforeNode = resolveIndex$1(caretPosition.container(), caretPosition.offset() - 1);\n if (isValidElementCaretCandidate(beforeNode) && !isBr$2(beforeNode)) {\n if (isBlock$1(beforeNode) || isBlock$1(node) || !isValidElementCaretCandidate(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(beforeNode), false));\n }\n }\n if (isValidElementCaretCandidate(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect$1(node), true));\n }\n }\n }\n return clientRects;\n };\n var CaretPosition = function (container, offset, clientRects) {\n var isAtStart = function () {\n if (isText$4(container)) {\n return offset === 0;\n }\n return offset === 0;\n };\n var isAtEnd = function () {\n if (isText$4(container)) {\n return offset >= container.data.length;\n }\n return offset >= container.childNodes.length;\n };\n var toRange = function () {\n var range = createRange$1(container.ownerDocument);\n range.setStart(container, offset);\n range.setEnd(container, offset);\n return range;\n };\n var getClientRects = function () {\n if (!clientRects) {\n clientRects = getCaretPositionClientRects(CaretPosition(container, offset));\n }\n return clientRects;\n };\n var isVisible = function () {\n return getClientRects().length > 0;\n };\n var isEqual = function (caretPosition) {\n return caretPosition && container === caretPosition.container() && offset === caretPosition.offset();\n };\n var getNode = function (before) {\n return resolveIndex$1(container, before ? offset - 1 : offset);\n };\n return {\n container: constant(container),\n offset: constant(offset),\n toRange: toRange,\n getClientRects: getClientRects,\n isVisible: isVisible,\n isAtStart: isAtStart,\n isAtEnd: isAtEnd,\n isEqual: isEqual,\n getNode: getNode\n };\n };\n CaretPosition.fromRangeStart = function (range) {\n return CaretPosition(range.startContainer, range.startOffset);\n };\n CaretPosition.fromRangeEnd = function (range) {\n return CaretPosition(range.endContainer, range.endOffset);\n };\n CaretPosition.after = function (node) {\n return CaretPosition(node.parentNode, nodeIndex$1(node) + 1);\n };\n CaretPosition.before = function (node) {\n return CaretPosition(node.parentNode, nodeIndex$1(node));\n };\n CaretPosition.isAbove = function (pos1, pos2) {\n return lift2(head(pos2.getClientRects()), last$2(pos1.getClientRects()), isAbove$1).getOr(false);\n };\n CaretPosition.isBelow = function (pos1, pos2) {\n return lift2(last$2(pos2.getClientRects()), head(pos1.getClientRects()), isBelow$1).getOr(false);\n };\n CaretPosition.isAtStart = function (pos) {\n return pos ? pos.isAtStart() : false;\n };\n CaretPosition.isAtEnd = function (pos) {\n return pos ? pos.isAtEnd() : false;\n };\n CaretPosition.isTextPosition = function (pos) {\n return pos ? isText$7(pos.container()) : false;\n };\n CaretPosition.isElementPosition = function (pos) {\n return CaretPosition.isTextPosition(pos) === false;\n };\n\n var trimEmptyTextNode$1 = function (dom, node) {\n if (isText$7(node) && node.data.length === 0) {\n dom.remove(node);\n }\n };\n var insertNode = function (dom, rng, node) {\n rng.insertNode(node);\n trimEmptyTextNode$1(dom, node.previousSibling);\n trimEmptyTextNode$1(dom, node.nextSibling);\n };\n var insertFragment = function (dom, rng, frag) {\n var firstChild = Optional.from(frag.firstChild);\n var lastChild = Optional.from(frag.lastChild);\n rng.insertNode(frag);\n firstChild.each(function (child) {\n return trimEmptyTextNode$1(dom, child.previousSibling);\n });\n lastChild.each(function (child) {\n return trimEmptyTextNode$1(dom, child.nextSibling);\n });\n };\n var rangeInsertNode = function (dom, rng, node) {\n if (isDocumentFragment(node)) {\n insertFragment(dom, rng, node);\n } else {\n insertNode(dom, rng, node);\n }\n };\n\n var isText$3 = isText$7;\n var isBogus = isBogus$2;\n var nodeIndex = DOMUtils.nodeIndex;\n var normalizedParent = function (node) {\n var parentNode = node.parentNode;\n if (isBogus(parentNode)) {\n return normalizedParent(parentNode);\n }\n return parentNode;\n };\n var getChildNodes = function (node) {\n if (!node) {\n return [];\n }\n return reduce(node.childNodes, function (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 var normalizedTextOffset = function (node, offset) {\n while (node = node.previousSibling) {\n if (!isText$3(node)) {\n break;\n }\n offset += node.data.length;\n }\n return offset;\n };\n var equal = function (a) {\n return function (b) {\n return a === b;\n };\n };\n var normalizedNodeIndex = function (node) {\n var nodes, index;\n nodes = getChildNodes(normalizedParent(node));\n index = findIndex$1(nodes, equal(node), node);\n nodes = nodes.slice(0, index + 1);\n var numTextFragments = reduce(nodes, function (result, node, i) {\n if (isText$3(node) && isText$3(nodes[i - 1])) {\n result++;\n }\n return result;\n }, 0);\n nodes = filter$2(nodes, matchNodeNames([node.nodeName]));\n index = findIndex$1(nodes, equal(node), node);\n return index - numTextFragments;\n };\n var createPathItem = function (node) {\n var name;\n if (isText$3(node)) {\n name = 'text()';\n } else {\n name = node.nodeName.toLowerCase();\n }\n return name + '[' + normalizedNodeIndex(node) + ']';\n };\n var parentsUntil$1 = function (root, node, predicate) {\n var parents = [];\n for (node = node.parentNode; node !== root; node = node.parentNode) {\n if (predicate && predicate(node)) {\n break;\n }\n parents.push(node);\n }\n return parents;\n };\n var create$6 = function (root, caretPosition) {\n var container, offset, path = [], outputOffset, childNodes, parents;\n container = caretPosition.container();\n offset = caretPosition.offset();\n if (isText$3(container)) {\n outputOffset = normalizedTextOffset(container, offset);\n } else {\n 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 parents = parentsUntil$1(root, container);\n parents = filter$2(parents, not(isBogus$2));\n path = path.concat(map$1(parents, function (node) {\n return createPathItem(node);\n }));\n return path.reverse().join('/') + ',' + outputOffset;\n };\n var resolvePathItem = function (node, name, index) {\n var nodes = getChildNodes(node);\n nodes = filter$2(nodes, function (node, index) {\n return !isText$3(node) || !isText$3(nodes[index - 1]);\n });\n nodes = filter$2(nodes, matchNodeNames([name]));\n return nodes[index];\n };\n var findTextPosition = function (container, offset) {\n var node = container, targetOffset = 0, dataLen;\n while (isText$3(node)) {\n dataLen = node.data.length;\n if (offset >= targetOffset && offset <= targetOffset + dataLen) {\n container = node;\n offset = offset - targetOffset;\n break;\n }\n if (!isText$3(node.nextSibling)) {\n container = node;\n offset = dataLen;\n break;\n }\n targetOffset += dataLen;\n node = node.nextSibling;\n }\n if (isText$3(container) && offset > container.data.length) {\n offset = container.data.length;\n }\n return CaretPosition(container, offset);\n };\n var resolve$2 = function (root, path) {\n var offset;\n if (!path) {\n return null;\n }\n var parts = path.split(',');\n var paths = parts[0].split('/');\n offset = parts.length > 1 ? parts[1] : 'before';\n var container = reduce(paths, function (result, value) {\n var 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$3(container)) {\n if (offset === 'after') {\n offset = nodeIndex(container) + 1;\n } else {\n offset = nodeIndex(container);\n }\n return CaretPosition(container.parentNode, offset);\n }\n return findTextPosition(container, parseInt(offset, 10));\n };\n\n var isContentEditableFalse$9 = isContentEditableFalse$b;\n var getNormalizedTextOffset = function (trim, container, offset) {\n var node, trimmedOffset;\n trimmedOffset = trim(container.data.slice(0, offset)).length;\n for (node = container.previousSibling; node && isText$7(node); node = node.previousSibling) {\n trimmedOffset += trim(node.data).length;\n }\n return trimmedOffset;\n };\n var getPoint = function (dom, trim, normalized, rng, start) {\n var container = rng[start ? 'startContainer' : 'endContainer'];\n var offset = rng[start ? 'startOffset' : 'endOffset'];\n var point = [];\n var childNodes, after = 0;\n var root = dom.getRoot();\n if (isText$7(container)) {\n point.push(normalized ? getNormalizedTextOffset(trim, container, offset) : offset);\n } else {\n 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 (; container && container !== root; container = container.parentNode) {\n point.push(dom.nodeIndex(container, normalized));\n }\n return point;\n };\n var getLocation = function (trim, selection, normalized, rng) {\n var dom = selection.dom, bookmark = {};\n bookmark.start = getPoint(dom, trim, normalized, rng, true);\n if (!selection.isCollapsed()) {\n bookmark.end = getPoint(dom, trim, normalized, rng, false);\n }\n if (isRangeInCaretContainerBlock(rng)) {\n bookmark.isFakeCaret = true;\n }\n return bookmark;\n };\n var findIndex = function (dom, name, element) {\n var count = 0;\n Tools.each(dom.select(name), function (node) {\n if (node.getAttribute('data-mce-bogus') === 'all') {\n return;\n }\n if (node === element) {\n return false;\n }\n count++;\n });\n return count;\n };\n var moveEndPoint$1 = function (rng, start) {\n var container, offset, childNodes;\n var prefix = start ? 'start' : 'end';\n container = rng[prefix + 'Container'];\n offset = rng[prefix + 'Offset'];\n if (isElement$5(container) && container.nodeName === 'TR') {\n 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 rng['set' + (start ? 'Start' : 'End')](container, offset);\n }\n }\n };\n var normalizeTableCellSelection = function (rng) {\n moveEndPoint$1(rng, true);\n moveEndPoint$1(rng, false);\n return rng;\n };\n var findSibling = function (node, offset) {\n var sibling;\n if (isElement$5(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$7(node) && isCaretContainerBlock$1(node)) {\n node = node.parentNode;\n }\n 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 };\n var findAdjacentContentEditableFalseElm = function (rng) {\n return findSibling(rng.startContainer, rng.startOffset) || findSibling(rng.endContainer, rng.endOffset);\n };\n var getOffsetBookmark = function (trim, normalized, selection) {\n var element = selection.getNode();\n var name = element ? element.nodeName : null;\n var rng = selection.getRng();\n if (isContentEditableFalse$9(element) || name === 'IMG') {\n return {\n name: name,\n index: findIndex(selection.dom, name, element)\n };\n }\n var sibling = findAdjacentContentEditableFalseElm(rng);\n if (sibling) {\n name = sibling.tagName;\n return {\n name: name,\n index: findIndex(selection.dom, name, sibling)\n };\n }\n return getLocation(trim, selection, normalized, rng);\n };\n var getCaretBookmark = function (selection) {\n var rng = selection.getRng();\n return {\n start: create$6(selection.dom.getRoot(), CaretPosition.fromRangeStart(rng)),\n end: create$6(selection.dom.getRoot(), CaretPosition.fromRangeEnd(rng))\n };\n };\n var getRangeBookmark = function (selection) {\n return { rng: selection.getRng() };\n };\n var createBookmarkSpan = function (dom, id, filled) {\n var args = {\n 'data-mce-type': 'bookmark',\n id: id,\n 'style': 'overflow:hidden;line-height:0px'\n };\n return filled ? dom.create('span', args, '') : dom.create('span', args);\n };\n var getPersistentBookmark = function (selection, filled) {\n var dom = selection.dom;\n var rng = selection.getRng();\n var id = dom.uniqueId();\n var collapsed = selection.isCollapsed();\n var element = selection.getNode();\n var name = element.nodeName;\n if (name === 'IMG') {\n return {\n name: name,\n index: findIndex(dom, name, element)\n };\n }\n var rng2 = normalizeTableCellSelection(rng.cloneRange());\n if (!collapsed) {\n rng2.collapse(false);\n var endBookmarkNode = createBookmarkSpan(dom, id + '_end', filled);\n rangeInsertNode(dom, rng2, endBookmarkNode);\n }\n rng = normalizeTableCellSelection(rng);\n rng.collapse(true);\n var startBookmarkNode = createBookmarkSpan(dom, id + '_start', filled);\n rangeInsertNode(dom, rng, startBookmarkNode);\n selection.moveToBookmark({\n id: id,\n keep: true\n });\n return { id: id };\n };\n var getBookmark$2 = function (selection, type, normalized) {\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 var getUndoBookmark = curry(getOffsetBookmark, identity, true);\n\n var DOM$9 = DOMUtils.DOM;\n var defaultPreviewStyles = 'font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow';\n var getBodySetting = function (editor, name, defaultValue) {\n var value = editor.getParam(name, defaultValue);\n if (value.indexOf('=') !== -1) {\n var bodyObj = editor.getParam(name, '', 'hash');\n return get$9(bodyObj, editor.id).getOr(defaultValue);\n } else {\n return value;\n }\n };\n var getIframeAttrs = function (editor) {\n return editor.getParam('iframe_attrs', {});\n };\n var getDocType = function (editor) {\n return editor.getParam('doctype', '');\n };\n var getDocumentBaseUrl = function (editor) {\n return editor.getParam('document_base_url', '');\n };\n var getBodyId = function (editor) {\n return getBodySetting(editor, 'body_id', 'tinymce');\n };\n var getBodyClass = function (editor) {\n return getBodySetting(editor, 'body_class', '');\n };\n var getContentSecurityPolicy = function (editor) {\n return editor.getParam('content_security_policy', '');\n };\n var shouldPutBrInPre$1 = function (editor) {\n return editor.getParam('br_in_pre', true);\n };\n var getForcedRootBlock = function (editor) {\n if (editor.getParam('force_p_newlines', false)) {\n return 'p';\n }\n var block = editor.getParam('forced_root_block', 'p');\n if (block === false) {\n return '';\n } else if (block === true) {\n return 'p';\n } else {\n return block;\n }\n };\n var getForcedRootBlockAttrs = function (editor) {\n return editor.getParam('forced_root_block_attrs', {});\n };\n var getBrNewLineSelector = function (editor) {\n return editor.getParam('br_newline_selector', '.mce-toc h2,figcaption,caption');\n };\n var getNoNewLineSelector = function (editor) {\n return editor.getParam('no_newline_selector', '');\n };\n var shouldKeepStyles = function (editor) {\n return editor.getParam('keep_styles', true);\n };\n var shouldEndContainerOnEmptyBlock = function (editor) {\n return editor.getParam('end_container_on_empty_block', false);\n };\n var getFontStyleValues = function (editor) {\n return Tools.explode(editor.getParam('font_size_style_values', 'xx-small,x-small,small,medium,large,x-large,xx-large'));\n };\n var getFontSizeClasses = function (editor) {\n return Tools.explode(editor.getParam('font_size_classes', ''));\n };\n var getImagesDataImgFilter = function (editor) {\n return editor.getParam('images_dataimg_filter', always, 'function');\n };\n var isAutomaticUploadsEnabled = function (editor) {\n return editor.getParam('automatic_uploads', true, 'boolean');\n };\n var shouldReuseFileName = function (editor) {\n return editor.getParam('images_reuse_filename', false, 'boolean');\n };\n var shouldReplaceBlobUris = function (editor) {\n return editor.getParam('images_replace_blob_uris', true, 'boolean');\n };\n var getIconPackName = function (editor) {\n return editor.getParam('icons', '', 'string');\n };\n var getIconsUrl = function (editor) {\n return editor.getParam('icons_url', '', 'string');\n };\n var getImageUploadUrl = function (editor) {\n return editor.getParam('images_upload_url', '', 'string');\n };\n var getImageUploadBasePath = function (editor) {\n return editor.getParam('images_upload_base_path', '', 'string');\n };\n var getImagesUploadCredentials = function (editor) {\n return editor.getParam('images_upload_credentials', false, 'boolean');\n };\n var getImagesUploadHandler = function (editor) {\n return editor.getParam('images_upload_handler', null, 'function');\n };\n var shouldUseContentCssCors = function (editor) {\n return editor.getParam('content_css_cors', false, 'boolean');\n };\n var getReferrerPolicy = function (editor) {\n return editor.getParam('referrer_policy', '', 'string');\n };\n var getLanguageCode = function (editor) {\n return editor.getParam('language', 'en', 'string');\n };\n var getLanguageUrl = function (editor) {\n return editor.getParam('language_url', '', 'string');\n };\n var shouldIndentUseMargin = function (editor) {\n return editor.getParam('indent_use_margin', false);\n };\n var getIndentation = function (editor) {\n return editor.getParam('indentation', '40px', 'string');\n };\n var getContentCss = function (editor) {\n var contentCss = editor.getParam('content_css');\n if (isString$1(contentCss)) {\n return map$3(contentCss.split(','), trim$4);\n } else if (isArray$1(contentCss)) {\n return contentCss;\n } else if (contentCss === false || editor.inline) {\n return [];\n } else {\n return ['default'];\n }\n };\n var getFontCss = function (editor) {\n var fontCss = editor.getParam('font_css', []);\n return isArray$1(fontCss) ? fontCss : map$3(fontCss.split(','), trim$4);\n };\n var getDirectionality = function (editor) {\n return editor.getParam('directionality', I18n.isRtl() ? 'rtl' : undefined);\n };\n var getInlineBoundarySelector = function (editor) {\n return editor.getParam('inline_boundaries_selector', 'a[href],code,.mce-annotation', 'string');\n };\n var getObjectResizing = function (editor) {\n var selector = editor.getParam('object_resizing');\n if (selector === false || Env.iOS) {\n return false;\n } else {\n return isString$1(selector) ? selector : 'table,img,figure.image,div,video,iframe';\n }\n };\n var getResizeImgProportional = function (editor) {\n return editor.getParam('resize_img_proportional', true, 'boolean');\n };\n var getPlaceholder = function (editor) {\n return editor.getParam('placeholder', DOM$9.getAttrib(editor.getElement(), 'placeholder'), 'string');\n };\n var getEventRoot = function (editor) {\n return editor.getParam('event_root');\n };\n var getServiceMessage = function (editor) {\n return editor.getParam('service_message');\n };\n var getTheme = function (editor) {\n return editor.getParam('theme');\n };\n var shouldValidate = function (editor) {\n return editor.getParam('validate');\n };\n var isInlineBoundariesEnabled = function (editor) {\n return editor.getParam('inline_boundaries') !== false;\n };\n var getFormats = function (editor) {\n return editor.getParam('formats');\n };\n var getPreviewStyles = function (editor) {\n var style = editor.getParam('preview_styles', defaultPreviewStyles);\n if (isString$1(style)) {\n return style;\n } else {\n return '';\n }\n };\n var canFormatEmptyLines = function (editor) {\n return editor.getParam('format_empty_lines', false, 'boolean');\n };\n var getCustomUiSelector = function (editor) {\n return editor.getParam('custom_ui_selector', '', 'string');\n };\n var getThemeUrl = function (editor) {\n return editor.getParam('theme_url');\n };\n var isInline = function (editor) {\n return editor.getParam('inline');\n };\n var hasHiddenInput = function (editor) {\n return editor.getParam('hidden_input');\n };\n var shouldPatchSubmit = function (editor) {\n return editor.getParam('submit_patch');\n };\n var isEncodingXml = function (editor) {\n return editor.getParam('encoding') === 'xml';\n };\n var shouldAddFormSubmitTrigger = function (editor) {\n return editor.getParam('add_form_submit_trigger');\n };\n var shouldAddUnloadTrigger = function (editor) {\n return editor.getParam('add_unload_trigger');\n };\n var hasForcedRootBlock = function (editor) {\n return getForcedRootBlock(editor) !== '';\n };\n var getCustomUndoRedoLevels = function (editor) {\n return editor.getParam('custom_undo_redo_levels', 0, 'number');\n };\n var shouldDisableNodeChange = function (editor) {\n return editor.getParam('disable_nodechange');\n };\n var isReadOnly$1 = function (editor) {\n return editor.getParam('readonly');\n };\n var hasContentCssCors = function (editor) {\n return editor.getParam('content_css_cors');\n };\n var getPlugins = function (editor) {\n return editor.getParam('plugins', '', 'string');\n };\n var getExternalPlugins$1 = function (editor) {\n return editor.getParam('external_plugins');\n };\n var shouldBlockUnsupportedDrop = function (editor) {\n return editor.getParam('block_unsupported_drop', true, 'boolean');\n };\n var isVisualAidsEnabled = function (editor) {\n return editor.getParam('visual', true, 'boolean');\n };\n var getVisualAidsTableClass = function (editor) {\n return editor.getParam('visual_table_class', 'mce-item-table', 'string');\n };\n var getVisualAidsAnchorClass = function (editor) {\n return editor.getParam('visual_anchor_class', 'mce-item-anchor', 'string');\n };\n var getIframeAriaText = function (editor) {\n return editor.getParam('iframe_aria_text', 'Rich Text Area. Press ALT-0 for help.', 'string');\n };\n\n var isElement$2 = isElement$5;\n var isText$2 = isText$7;\n var removeNode$1 = function (node) {\n var parentNode = node.parentNode;\n if (parentNode) {\n parentNode.removeChild(node);\n }\n };\n var trimCount = function (text) {\n var trimmedText = trim$2(text);\n return {\n count: text.length - trimmedText.length,\n text: trimmedText\n };\n };\n var deleteZwspChars = function (caretContainer) {\n var idx;\n while ((idx = caretContainer.data.lastIndexOf(ZWSP$1)) !== -1) {\n caretContainer.deleteData(idx, 1);\n }\n };\n var removeUnchanged = function (caretContainer, pos) {\n remove$2(caretContainer);\n return pos;\n };\n var removeTextAndReposition = function (caretContainer, pos) {\n var before = trimCount(caretContainer.data.substr(0, pos.offset()));\n var after = trimCount(caretContainer.data.substr(pos.offset()));\n var 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 var removeElementAndReposition = function (caretContainer, pos) {\n var parentNode = pos.container();\n var newPosition = indexOf$2(from(parentNode.childNodes), caretContainer).map(function (index) {\n return index < pos.offset() ? CaretPosition(parentNode, pos.offset() - 1) : pos;\n }).getOr(pos);\n remove$2(caretContainer);\n return newPosition;\n };\n var removeTextCaretContainer = function (caretContainer, pos) {\n return isText$2(caretContainer) && pos.container() === caretContainer ? removeTextAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n };\n var removeElementCaretContainer = function (caretContainer, pos) {\n return pos.container() === caretContainer.parentNode ? removeElementAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n };\n var removeAndReposition = function (container, pos) {\n return CaretPosition.isTextPosition(pos) ? removeTextCaretContainer(container, pos) : removeElementCaretContainer(container, pos);\n };\n var remove$2 = function (caretContainerNode) {\n if (isElement$2(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$2(caretContainerNode)) {\n deleteZwspChars(caretContainerNode);\n if (caretContainerNode.data.length === 0) {\n removeNode$1(caretContainerNode);\n }\n }\n };\n\n var browser$2 = detect().browser;\n var isContentEditableFalse$8 = isContentEditableFalse$b;\n var isMedia$1 = isMedia$2;\n var isTableCell$3 = isTableCell$5;\n var inlineFakeCaretSelector = '*[contentEditable=false],video,audio,embed,object';\n var getAbsoluteClientRect = function (root, element, before) {\n var clientRect = collapse(element.getBoundingClientRect(), before);\n var scrollX;\n var scrollY;\n if (root.tagName === 'BODY') {\n var docElm = root.ownerDocument.documentElement;\n scrollX = root.scrollLeft || docElm.scrollLeft;\n scrollY = root.scrollTop || docElm.scrollTop;\n } else {\n var 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 var 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 var trimInlineCaretContainers = function (root) {\n var fakeCaretTargetNodes = descendants(SugarElement.fromDom(root), inlineFakeCaretSelector);\n for (var i = 0; i < fakeCaretTargetNodes.length; i++) {\n var node = fakeCaretTargetNodes[i].dom;\n var sibling = node.previousSibling;\n if (endsWithCaretContainer$1(sibling)) {\n var data = sibling.data;\n if (data.length === 1) {\n sibling.parentNode.removeChild(sibling);\n } else {\n sibling.deleteData(data.length - 1, 1);\n }\n }\n sibling = node.nextSibling;\n if (startsWithCaretContainer$1(sibling)) {\n var data = sibling.data;\n if (data.length === 1) {\n sibling.parentNode.removeChild(sibling);\n } else {\n sibling.deleteData(0, 1);\n }\n }\n }\n };\n var FakeCaret = function (editor, root, isBlock, hasFocus) {\n var lastVisualCaret = value();\n var cursorInterval;\n var caretContainerNode;\n var rootBlock = getForcedRootBlock(editor);\n var caretBlock = rootBlock.length > 0 ? rootBlock : 'p';\n var show = function (before, element) {\n var rng;\n hide();\n if (isTableCell$3(element)) {\n return null;\n }\n if (isBlock(element)) {\n caretContainerNode = insertBlock$1(caretBlock, element, before);\n var clientRect = getAbsoluteClientRect(root, element, before);\n DomQuery(caretContainerNode).css('top', clientRect.top);\n var caret = DomQuery('
').css(__assign({}, clientRect)).appendTo(root)[0];\n lastVisualCaret.set({\n caret: caret,\n element: element,\n before: before\n });\n if (before) {\n DomQuery(caret).addClass('mce-visual-caret-before');\n }\n startBlink();\n rng = element.ownerDocument.createRange();\n rng.setStart(caretContainerNode, 0);\n rng.setEnd(caretContainerNode, 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 var hide = function () {\n trimInlineCaretContainers(root);\n if (caretContainerNode) {\n remove$2(caretContainerNode);\n caretContainerNode = null;\n }\n lastVisualCaret.on(function (caretState) {\n DomQuery(caretState.caret).remove();\n lastVisualCaret.clear();\n });\n if (cursorInterval) {\n Delay.clearInterval(cursorInterval);\n cursorInterval = undefined;\n }\n };\n var startBlink = function () {\n cursorInterval = Delay.setInterval(function () {\n if (hasFocus()) {\n DomQuery('div.mce-visual-caret', root).toggleClass('mce-visual-caret-hidden');\n } else {\n DomQuery('div.mce-visual-caret', root).addClass('mce-visual-caret-hidden');\n }\n }, 500);\n };\n var reposition = function () {\n lastVisualCaret.on(function (caretState) {\n var clientRect = getAbsoluteClientRect(root, caretState.element, caretState.before);\n DomQuery(caretState.caret).css(__assign({}, clientRect));\n });\n };\n var destroy = function () {\n return Delay.clearInterval(cursorInterval);\n };\n var getCss = function () {\n return '.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 };\n return {\n show: show,\n hide: hide,\n getCss: getCss,\n reposition: reposition,\n destroy: destroy\n };\n };\n var isFakeCaretTableBrowser = function () {\n return browser$2.isIE() || browser$2.isEdge() || browser$2.isFirefox();\n };\n var isInlineFakeCaretTarget = function (node) {\n return isContentEditableFalse$8(node) || isMedia$1(node);\n };\n var isFakeCaretTarget = function (node) {\n return isInlineFakeCaretTarget(node) || isTable$3(node) && isFakeCaretTableBrowser();\n };\n\n var isContentEditableFalse$7 = isContentEditableFalse$b;\n var isMedia = isMedia$2;\n var isBlockLike = matchStyleValues('display', 'block table table-cell table-caption list-item');\n var isCaretContainer = isCaretContainer$2;\n var isCaretContainerBlock = isCaretContainerBlock$1;\n var isElement$1 = isElement$5;\n var isCaretCandidate$1 = isCaretCandidate$3;\n var isForwards = function (direction) {\n return direction > 0;\n };\n var isBackwards = function (direction) {\n return direction < 0;\n };\n var skipCaretContainers = function (walk, shallow) {\n var node;\n while (node = walk(shallow)) {\n if (!isCaretContainerBlock(node)) {\n return node;\n }\n }\n return null;\n };\n var findNode$1 = function (node, direction, predicateFn, rootNode, shallow) {\n var walker = new DomTreeWalker(node, rootNode);\n var isCefOrCaretContainer = isContentEditableFalse$7(node) || isCaretContainerBlock(node);\n if (isBackwards(direction)) {\n if (isCefOrCaretContainer) {\n node = skipCaretContainers(walker.prev.bind(walker), true);\n if (predicateFn(node)) {\n return node;\n }\n }\n while (node = skipCaretContainers(walker.prev.bind(walker), shallow)) {\n if (predicateFn(node)) {\n return node;\n }\n }\n }\n if (isForwards(direction)) {\n if (isCefOrCaretContainer) {\n node = skipCaretContainers(walker.next.bind(walker), true);\n if (predicateFn(node)) {\n return node;\n }\n }\n while (node = skipCaretContainers(walker.next.bind(walker), shallow)) {\n if (predicateFn(node)) {\n return node;\n }\n }\n }\n return null;\n };\n var getParentBlock$2 = function (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 var isInSameBlock = function (caretPosition1, caretPosition2, rootNode) {\n return getParentBlock$2(caretPosition1.container(), rootNode) === getParentBlock$2(caretPosition2.container(), rootNode);\n };\n var getChildNodeAtRelativeOffset = function (relativeOffset, caretPosition) {\n if (!caretPosition) {\n return null;\n }\n var container = caretPosition.container();\n var offset = caretPosition.offset();\n if (!isElement$1(container)) {\n return null;\n }\n return container.childNodes[offset + relativeOffset];\n };\n var beforeAfter = function (before, node) {\n var range = node.ownerDocument.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 var isNodesInSameBlock = function (root, node1, node2) {\n return getParentBlock$2(node1, root) === getParentBlock$2(node2, root);\n };\n var lean = function (left, root, node) {\n var siblingName = left ? 'previousSibling' : 'nextSibling';\n while (node && node !== root) {\n var sibling = node[siblingName];\n if (isCaretContainer(sibling)) {\n sibling = sibling[siblingName];\n }\n if (isContentEditableFalse$7(sibling) || isMedia(sibling)) {\n if (isNodesInSameBlock(root, sibling, node)) {\n return sibling;\n }\n break;\n }\n if (isCaretCandidate$1(sibling)) {\n break;\n }\n node = node.parentNode;\n }\n return null;\n };\n var before$2 = curry(beforeAfter, true);\n var after$2 = curry(beforeAfter, false);\n var normalizeRange = function (direction, root, range) {\n var node;\n var leanLeft = curry(lean, true, root);\n var leanRight = curry(lean, false, root);\n var container = range.startContainer;\n var offset = range.startOffset;\n if (isCaretContainerBlock$1(container)) {\n if (!isElement$1(container)) {\n container = container.parentNode;\n }\n var location_1 = container.getAttribute('data-mce-caret');\n if (location_1 === 'before') {\n node = container.nextSibling;\n if (isFakeCaretTarget(node)) {\n return before$2(node);\n }\n }\n if (location_1 === 'after') {\n node = container.previousSibling;\n if (isFakeCaretTarget(node)) {\n return after$2(node);\n }\n }\n }\n if (!range.collapsed) {\n return range;\n }\n if (isText$7(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 var getRelativeCefElm = function (forward, caretPosition) {\n return Optional.from(getChildNodeAtRelativeOffset(forward ? 0 : -1, caretPosition)).filter(isContentEditableFalse$7);\n };\n var getNormalizedRangeEndPoint = function (direction, root, range) {\n var normalizedRange = normalizeRange(direction, root, range);\n if (direction === -1) {\n return CaretPosition.fromRangeStart(normalizedRange);\n }\n return CaretPosition.fromRangeEnd(normalizedRange);\n };\n var getElementFromPosition = function (pos) {\n return Optional.from(pos.getNode()).map(SugarElement.fromDom);\n };\n var getElementFromPrevPosition = function (pos) {\n return Optional.from(pos.getNode(true)).map(SugarElement.fromDom);\n };\n var getVisualCaretPosition = function (walkFn, caretPosition) {\n while (caretPosition = walkFn(caretPosition)) {\n if (caretPosition.isVisible()) {\n return caretPosition;\n }\n }\n return caretPosition;\n };\n var isMoveInsideSameBlock = function (from, to) {\n var inSameBlock = isInSameBlock(from, to);\n if (!inSameBlock && isBr$5(from.getNode())) {\n return true;\n }\n return inSameBlock;\n };\n\n var HDirection;\n (function (HDirection) {\n HDirection[HDirection['Backwards'] = -1] = 'Backwards';\n HDirection[HDirection['Forwards'] = 1] = 'Forwards';\n }(HDirection || (HDirection = {})));\n var isContentEditableFalse$6 = isContentEditableFalse$b;\n var isText$1 = isText$7;\n var isElement = isElement$5;\n var isBr$1 = isBr$5;\n var isCaretCandidate = isCaretCandidate$3;\n var isAtomic = isAtomic$1;\n var isEditableCaretCandidate = isEditableCaretCandidate$1;\n var getParents$3 = function (node, root) {\n var parents = [];\n while (node && node !== root) {\n parents.push(node);\n node = node.parentNode;\n }\n return parents;\n };\n var nodeAtIndex = function (container, offset) {\n if (container.hasChildNodes() && offset < container.childNodes.length) {\n return container.childNodes[offset];\n }\n return null;\n };\n var getCaretCandidatePosition = function (direction, node) {\n if (isForwards(direction)) {\n if (isCaretCandidate(node.previousSibling) && !isText$1(node.previousSibling)) {\n return CaretPosition.before(node);\n }\n if (isText$1(node)) {\n return CaretPosition(node, 0);\n }\n }\n if (isBackwards(direction)) {\n if (isCaretCandidate(node.nextSibling) && !isText$1(node.nextSibling)) {\n return CaretPosition.after(node);\n }\n if (isText$1(node)) {\n return CaretPosition(node, node.data.length);\n }\n }\n if (isBackwards(direction)) {\n if (isBr$1(node)) {\n return CaretPosition.before(node);\n }\n return CaretPosition.after(node);\n }\n return CaretPosition.before(node);\n };\n var moveForwardFromBr = function (root, nextNode) {\n var nextSibling = nextNode.nextSibling;\n if (nextSibling && isCaretCandidate(nextSibling)) {\n if (isText$1(nextSibling)) {\n return CaretPosition(nextSibling, 0);\n } else {\n return CaretPosition.before(nextSibling);\n }\n } else {\n return findCaretPosition$1(HDirection.Forwards, CaretPosition.after(nextNode), root);\n }\n };\n var findCaretPosition$1 = function (direction, startPos, root) {\n var node;\n var nextNode;\n var innerNode;\n var caretPosition;\n if (!isElement(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(root.lastChild)) {\n return isBr$1(root.lastChild) ? CaretPosition.before(root.lastChild) : caretPosition;\n }\n } else {\n caretPosition = startPos;\n }\n var container = caretPosition.container();\n var offset = caretPosition.offset();\n if (isText$1(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$1(nextNode, direction, isEditableCaretCandidate, nextNode);\n if (innerNode) {\n if (isText$1(innerNode)) {\n return CaretPosition(innerNode, innerNode.data.length);\n }\n return CaretPosition.after(innerNode);\n }\n }\n if (isText$1(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$1(nextNode)) {\n return moveForwardFromBr(root, nextNode);\n }\n if (!isAtomic(nextNode)) {\n innerNode = findNode$1(nextNode, direction, isEditableCaretCandidate, nextNode);\n if (innerNode) {\n if (isText$1(innerNode)) {\n return CaretPosition(innerNode, 0);\n }\n return CaretPosition.before(innerNode);\n }\n }\n if (isText$1(nextNode)) {\n return CaretPosition(nextNode, 0);\n }\n return CaretPosition.after(nextNode);\n }\n }\n node = nextNode ? nextNode : caretPosition.getNode();\n }\n if (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart()) {\n node = findNode$1(node, direction, always, root, true);\n if (isEditableCaretCandidate(node, root)) {\n return getCaretCandidatePosition(direction, node);\n }\n }\n nextNode = findNode$1(node, direction, isEditableCaretCandidate, root);\n var rootContentEditableFalseElm = last$1(filter$4(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 var CaretWalker = function (root) {\n return {\n next: function (caretPosition) {\n return findCaretPosition$1(HDirection.Forwards, caretPosition, root);\n },\n prev: function (caretPosition) {\n return findCaretPosition$1(HDirection.Backwards, caretPosition, root);\n }\n };\n };\n\n var walkToPositionIn = function (forward, root, start) {\n var position = forward ? CaretPosition.before(start) : CaretPosition.after(start);\n return fromPosition(forward, root, position);\n };\n var afterElement = function (node) {\n return isBr$5(node) ? CaretPosition.before(node) : CaretPosition.after(node);\n };\n var isBeforeOrStart = function (position) {\n if (CaretPosition.isTextPosition(position)) {\n return position.offset() === 0;\n } else {\n return isCaretCandidate$3(position.getNode());\n }\n };\n var isAfterOrEnd = function (position) {\n if (CaretPosition.isTextPosition(position)) {\n var container = position.container();\n return position.offset() === container.data.length;\n } else {\n return isCaretCandidate$3(position.getNode(true));\n }\n };\n var isBeforeAfterSameElement = function (from, to) {\n return !CaretPosition.isTextPosition(from) && !CaretPosition.isTextPosition(to) && from.getNode() === to.getNode(true);\n };\n var isAtBr = function (position) {\n return !CaretPosition.isTextPosition(position) && isBr$5(position.getNode());\n };\n var shouldSkipPosition = function (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 var fromPosition = function (forward, root, pos) {\n var walker = CaretWalker(root);\n return Optional.from(forward ? walker.next(pos) : walker.prev(pos));\n };\n var navigate = function (forward, root, from) {\n return fromPosition(forward, root, from).bind(function (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 };\n var navigateIgnore = function (forward, root, from, ignoreFilter) {\n return navigate(forward, root, from).bind(function (pos) {\n return ignoreFilter(pos) ? navigateIgnore(forward, root, pos, ignoreFilter) : Optional.some(pos);\n });\n };\n var positionIn = function (forward, element) {\n var startNode = forward ? element.firstChild : element.lastChild;\n if (isText$7(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 var nextPosition = curry(fromPosition, true);\n var prevPosition = curry(fromPosition, false);\n var firstPositionIn = curry(positionIn, true);\n var lastPositionIn = curry(positionIn, false);\n\n var CARET_ID$1 = '_mce_caret';\n var isCaretNode = function (node) {\n return isElement$5(node) && node.id === CARET_ID$1;\n };\n var getParentCaretContainer = function (body, node) {\n while (node && node !== body) {\n if (node.id === CARET_ID$1) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n\n var isStringPathBookmark = function (bookmark) {\n return isString$1(bookmark.start);\n };\n var isRangeBookmark = function (bookmark) {\n return has$2(bookmark, 'rng');\n };\n var isIdBookmark = function (bookmark) {\n return has$2(bookmark, 'id');\n };\n var isIndexBookmark = function (bookmark) {\n return has$2(bookmark, 'name');\n };\n var isPathBookmark = function (bookmark) {\n return Tools.isArray(bookmark.start);\n };\n\n var addBogus = function (dom, node) {\n if (isElement$5(node) && dom.isBlock(node) && !node.innerHTML && !Env.ie) {\n node.innerHTML = '
';\n }\n return node;\n };\n var resolveCaretPositionBookmark = function (dom, bookmark) {\n var pos;\n var rng = dom.createRng();\n pos = resolve$2(dom.getRoot(), bookmark.start);\n rng.setStart(pos.container(), pos.offset());\n pos = resolve$2(dom.getRoot(), bookmark.end);\n rng.setEnd(pos.container(), pos.offset());\n return rng;\n };\n var insertZwsp = function (node, rng) {\n var textNode = node.ownerDocument.createTextNode(ZWSP$1);\n node.appendChild(textNode);\n rng.setStart(textNode, 0);\n rng.setEnd(textNode, 0);\n };\n var isEmpty$1 = function (node) {\n return node.hasChildNodes() === false;\n };\n var tryFindRangePosition = function (node, rng) {\n return lastPositionIn(node).fold(never, function (pos) {\n rng.setStart(pos.container(), pos.offset());\n rng.setEnd(pos.container(), pos.offset());\n return true;\n });\n };\n var padEmptyCaretContainer = function (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 var setEndPoint = function (dom, start, bookmark, rng) {\n var point = bookmark[start ? 'start' : 'end'];\n var i, node, offset, children;\n var root = dom.getRoot();\n if (point) {\n offset = point[0];\n for (node = root, i = point.length - 1; i >= 1; i--) {\n 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 (node.nodeType === 3) {\n offset = Math.min(point[0], node.nodeValue.length);\n }\n if (node.nodeType === 1) {\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 var isValidTextNode = function (node) {\n return isText$7(node) && node.data.length > 0;\n };\n var restoreEndPoint = function (dom, suffix, bookmark) {\n var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev;\n var keep = bookmark.keep;\n var container, offset;\n if (marker) {\n node = marker.parentNode;\n if (suffix === 'start') {\n if (!keep) {\n idx = dom.nodeIndex(marker);\n } else {\n if (marker.hasChildNodes()) {\n node = marker.firstChild;\n idx = 1;\n } else if (isValidTextNode(marker.nextSibling)) {\n node = marker.nextSibling;\n idx = 0;\n } else if (isValidTextNode(marker.previousSibling)) {\n node = marker.previousSibling;\n idx = marker.previousSibling.data.length;\n } else {\n node = marker.parentNode;\n idx = dom.nodeIndex(marker) + 1;\n }\n }\n container = node;\n offset = idx;\n } else {\n if (!keep) {\n idx = dom.nodeIndex(marker);\n } else {\n if (marker.hasChildNodes()) {\n node = marker.firstChild;\n idx = 1;\n } else if (isValidTextNode(marker.previousSibling)) {\n node = marker.previousSibling;\n idx = marker.previousSibling.data.length;\n } else {\n node = marker.parentNode;\n idx = dom.nodeIndex(marker);\n }\n }\n container = node;\n offset = idx;\n }\n if (!keep) {\n prev = marker.previousSibling;\n next = marker.nextSibling;\n Tools.each(Tools.grep(marker.childNodes), function (node) {\n if (isText$7(node)) {\n node.nodeValue = node.nodeValue.replace(/\\uFEFF/g, '');\n }\n });\n while (marker = dom.get(bookmark.id + '_' + suffix)) {\n dom.remove(marker, true);\n }\n if (prev && next && prev.nodeType === next.nodeType && isText$7(prev) && !Env.opera) {\n idx = prev.nodeValue.length;\n prev.appendData(next.nodeValue);\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 var resolvePaths = function (dom, bookmark) {\n var rng = dom.createRng();\n if (setEndPoint(dom, true, bookmark, rng) && setEndPoint(dom, false, bookmark, rng)) {\n return Optional.some(rng);\n } else {\n return Optional.none();\n }\n };\n var resolveId = function (dom, bookmark) {\n var startPos = restoreEndPoint(dom, 'start', bookmark);\n var endPos = restoreEndPoint(dom, 'end', bookmark);\n return lift2(startPos, endPos.or(startPos), function (spos, epos) {\n var rng = dom.createRng();\n rng.setStart(addBogus(dom, spos.container()), spos.offset());\n rng.setEnd(addBogus(dom, epos.container()), epos.offset());\n return rng;\n });\n };\n var resolveIndex = function (dom, bookmark) {\n return Optional.from(dom.select(bookmark.name)[bookmark.index]).map(function (elm) {\n var rng = dom.createRng();\n rng.selectNode(elm);\n return rng;\n });\n };\n var resolve$1 = function (selection, bookmark) {\n var dom = selection.dom;\n if (bookmark) {\n if (isPathBookmark(bookmark)) {\n return resolvePaths(dom, bookmark);\n } else if (isStringPathBookmark(bookmark)) {\n return Optional.some(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(bookmark.rng);\n }\n }\n return Optional.none();\n };\n\n var getBookmark$1 = function (selection, type, normalized) {\n return getBookmark$2(selection, type, normalized);\n };\n var moveToBookmark = function (selection, bookmark) {\n resolve$1(selection, bookmark).each(function (rng) {\n selection.setRng(rng);\n });\n };\n var isBookmarkNode$1 = function (node) {\n return isElement$5(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\n };\n\n var is = function (expected) {\n return function (actual) {\n return expected === actual;\n };\n };\n var isNbsp = is(nbsp);\n var isWhiteSpace = function (chr) {\n return chr !== '' && ' \\f\\n\\r\\t\\x0B'.indexOf(chr) !== -1;\n };\n var isContent = function (chr) {\n return !isWhiteSpace(chr) && !isNbsp(chr);\n };\n\n var isNode = function (node) {\n return !!node.nodeType;\n };\n var isInlineBlock = function (node) {\n return node && /^(IMG)$/.test(node.nodeName);\n };\n var moveStart = function (dom, selection, rng) {\n var offset = rng.startOffset;\n var container = rng.startContainer;\n if (container === rng.endContainer) {\n if (isInlineBlock(container.childNodes[offset])) {\n return;\n }\n }\n if (isElement$5(container)) {\n var nodes = container.childNodes;\n var walker = void 0;\n if (offset < nodes.length) {\n container = nodes[offset];\n walker = new DomTreeWalker(container, dom.getParent(container, dom.isBlock));\n } else {\n container = nodes[nodes.length - 1];\n walker = new DomTreeWalker(container, dom.getParent(container, dom.isBlock));\n walker.next(true);\n }\n for (var node = walker.current(); node; node = walker.next()) {\n if (isText$7(node) && !isWhiteSpaceNode$1(node)) {\n rng.setStart(node, 0);\n selection.setRng(rng);\n return;\n }\n }\n }\n };\n var getNonWhiteSpaceSibling = function (node, next, inc) {\n if (node) {\n var nextName = next ? 'nextSibling' : 'previousSibling';\n for (node = inc ? node : node[nextName]; node; node = node[nextName]) {\n if (isElement$5(node) || !isWhiteSpaceNode$1(node)) {\n return node;\n }\n }\n }\n };\n var isTextBlock$1 = function (editor, name) {\n if (isNode(name)) {\n name = name.nodeName;\n }\n return !!editor.schema.getTextBlockElements()[name.toLowerCase()];\n };\n var isValid = function (ed, parent, child) {\n return ed.schema.isValidChild(parent, child);\n };\n var isWhiteSpaceNode$1 = function (node, allowSpaces) {\n if (allowSpaces === void 0) {\n allowSpaces = false;\n }\n if (isNonNullable(node) && isText$7(node)) {\n var data = allowSpaces ? node.data.replace(/ /g, '\\xA0') : node.data;\n return isWhitespaceText(data);\n } else {\n return false;\n }\n };\n var isEmptyTextNode$1 = function (node) {\n return isNonNullable(node) && isText$7(node) && node.length === 0;\n };\n var replaceVars = function (value, vars) {\n if (isFunction(value)) {\n value = value(vars);\n } else if (isNonNullable(vars)) {\n value = value.replace(/%(\\w+)/g, function (str, name) {\n return vars[name] || str;\n });\n }\n return value;\n };\n var isEq$5 = function (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 var normalizeStyleValue = function (dom, value, name) {\n if (name === 'color' || name === 'backgroundColor') {\n value = dom.toHex(value);\n }\n if (name === 'fontWeight' && value === 700) {\n value = 'bold';\n }\n if (name === 'fontFamily') {\n value = value.replace(/[\\'\\\"]/g, '').replace(/,\\s+/g, ',');\n }\n return '' + value;\n };\n var getStyle = function (dom, node, name) {\n return normalizeStyleValue(dom, dom.getStyle(node, name), name);\n };\n var getTextDecoration = function (dom, node) {\n var decoration;\n dom.getParent(node, function (n) {\n decoration = dom.getStyle(n, 'text-decoration');\n return decoration && decoration !== 'none';\n });\n return decoration;\n };\n var getParents$2 = function (dom, node, selector) {\n return dom.getParents(node, selector, dom.getRoot());\n };\n var isVariableFormatName = function (editor, formatName) {\n var hasVariableValues = function (format) {\n var isVariableValue = function (val) {\n return val.length > 1 && val.charAt(0) === '%';\n };\n return exists([\n 'styles',\n 'attributes'\n ], function (key) {\n return get$9(format, key).exists(function (field) {\n var fieldValues = isArray$1(field) ? field : values(field);\n return exists(fieldValues, isVariableValue);\n });\n });\n };\n return exists(editor.formatter.get(formatName), hasVariableValues);\n };\n var areSimilarFormats = function (editor, formatName, otherFormatName) {\n var validKeys = [\n 'inline',\n 'block',\n 'selector',\n 'attributes',\n 'styles',\n 'classes'\n ];\n var filterObj = function (format) {\n return filter$3(format, function (_, key) {\n return exists(validKeys, function (validKey) {\n return validKey === key;\n });\n });\n };\n return exists(editor.formatter.get(formatName), function (fmt1) {\n var filteredFmt1 = filterObj(fmt1);\n return exists(editor.formatter.get(otherFormatName), function (fmt2) {\n var filteredFmt2 = filterObj(fmt2);\n return equal$1(filteredFmt1, filteredFmt2);\n });\n });\n };\n var isBlockFormat = function (format) {\n return hasNonNullableKey(format, 'block');\n };\n var isSelectorFormat = function (format) {\n return hasNonNullableKey(format, 'selector');\n };\n var isInlineFormat = function (format) {\n return hasNonNullableKey(format, 'inline');\n };\n var isMixedFormat = function (format) {\n return isSelectorFormat(format) && isInlineFormat(format) && is$1(get$9(format, 'mixed'), true);\n };\n var shouldExpandToSelector = function (format) {\n return isSelectorFormat(format) && format.expand !== false && !isInlineFormat(format);\n };\n\n var isBookmarkNode = isBookmarkNode$1;\n var getParents$1 = getParents$2;\n var isWhiteSpaceNode = isWhiteSpaceNode$1;\n var isTextBlock = isTextBlock$1;\n var isBogusBr = function (node) {\n return isBr$5(node) && node.getAttribute('data-mce-bogus') && !node.nextSibling;\n };\n var findParentContentEditable = function (dom, node) {\n var parent = node;\n while (parent) {\n if (isElement$5(parent) && dom.getContentEditable(parent)) {\n return dom.getContentEditable(parent) === 'false' ? parent : node;\n }\n parent = parent.parentNode;\n }\n return node;\n };\n var walkText = function (start, node, offset, predicate) {\n var str = node.data;\n for (var i = offset; start ? i >= 0 : i < str.length; start ? i-- : i++) {\n if (predicate(str.charAt(i))) {\n return start ? i + 1 : i;\n }\n }\n return -1;\n };\n var findSpace = function (start, node, offset) {\n return walkText(start, node, offset, function (c) {\n return isNbsp(c) || isWhiteSpace(c);\n });\n };\n var findContent = function (start, node, offset) {\n return walkText(start, node, offset, isContent);\n };\n var findWordEndPoint = function (dom, body, container, offset, start, includeTrailingSpaces) {\n var lastTextNode;\n var rootNode = dom.getParent(container, dom.isBlock) || body;\n var walk = function (container, offset, pred) {\n var textSeeker = TextSeeker(dom);\n var walker = start ? textSeeker.backwards : textSeeker.forwards;\n return Optional.from(walker(container, offset, function (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 var spaceResult = walk(container, offset, findSpace);\n return spaceResult.bind(function (result) {\n return includeTrailingSpaces ? walk(result.container, result.offset + (start ? -1 : 0), findContent) : Optional.some(result);\n }).orThunk(function () {\n return lastTextNode ? Optional.some({\n container: lastTextNode,\n offset: start ? 0 : lastTextNode.length\n }) : Optional.none();\n });\n };\n var findSelectorEndPoint = function (dom, formatList, rng, container, siblingName) {\n if (isText$7(container) && isEmpty$3(container.data) && container[siblingName]) {\n container = container[siblingName];\n }\n var parents = getParents$1(dom, container);\n for (var i = 0; i < parents.length; i++) {\n for (var y = 0; y < formatList.length; y++) {\n var 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 var findBlockEndPoint = function (editor, formatList, container, siblingName) {\n var node = container;\n var dom = editor.dom;\n var root = dom.getRoot();\n var format = formatList[0];\n if (isBlockFormat(format)) {\n node = format.wrapper ? null : dom.getParent(container, format.block, root);\n }\n if (!node) {\n var scopeRoot = dom.getParent(container, 'LI,TD,TH');\n node = dom.getParent(isText$7(container) ? container.parentNode : container, function (node) {\n return node !== root && isTextBlock(editor, node);\n }, 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[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 var isAtBlockBoundary$1 = function (dom, root, container, siblingName) {\n var 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 var findParentContainer = function (dom, formatList, container, offset, start) {\n var parent = container;\n var siblingName = start ? 'previousSibling' : 'nextSibling';\n var root = dom.getRoot();\n if (isText$7(container) && !isWhiteSpaceNode(container)) {\n if (start ? offset > 0 : offset < container.data.length) {\n return container;\n }\n }\n while (true) {\n if (!formatList[0].block_expand && dom.isBlock(parent)) {\n return parent;\n }\n for (var sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {\n var allowSpaces = isText$7(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 var isSelfOrParentBookmark = function (container) {\n return isBookmarkNode(container.parentNode) || isBookmarkNode(container);\n };\n var expandRng = function (editor, rng, formatList, includeTrailingSpace) {\n if (includeTrailingSpace === void 0) {\n includeTrailingSpace = false;\n }\n var startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n var dom = editor.dom;\n var format = formatList[0];\n if (isElement$5(startContainer) && startContainer.hasChildNodes()) {\n startContainer = getNode$1(startContainer, startOffset);\n if (isText$7(startContainer)) {\n startOffset = 0;\n }\n }\n if (isElement$5(endContainer) && endContainer.hasChildNodes()) {\n endContainer = getNode$1(endContainer, rng.collapsed ? endOffset : endOffset - 1);\n if (isText$7(endContainer)) {\n endOffset = endContainer.nodeValue.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$7(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$7(endContainer)) {\n endOffset = rng.collapsed ? 0 : endContainer.length;\n }\n }\n if (rng.collapsed) {\n var startPoint = findWordEndPoint(dom, editor.getBody(), startContainer, startOffset, true, includeTrailingSpace);\n startPoint.each(function (_a) {\n var container = _a.container, offset = _a.offset;\n startContainer = container;\n startOffset = offset;\n });\n var endPoint = findWordEndPoint(dom, editor.getBody(), endContainer, endOffset, false, includeTrailingSpace);\n endPoint.each(function (_a) {\n var container = _a.container, offset = _a.offset;\n endContainer = container;\n endOffset = offset;\n });\n }\n if (isInlineFormat(format) || format.block_expand) {\n if (!isInlineFormat(format) || (!isText$7(startContainer) || startOffset === 0)) {\n startContainer = findParentContainer(dom, formatList, startContainer, startOffset, true);\n }\n if (!isInlineFormat(format) || (!isText$7(endContainer) || endOffset === endContainer.nodeValue.length)) {\n endContainer = findParentContainer(dom, formatList, endContainer, endOffset, false);\n }\n }\n if (shouldExpandToSelector(format)) {\n startContainer = findSelectorEndPoint(dom, formatList, rng, startContainer, 'previousSibling');\n endContainer = findSelectorEndPoint(dom, formatList, rng, endContainer, 'nextSibling');\n }\n if (isBlockFormat(format) || isSelectorFormat(format)) {\n startContainer = findBlockEndPoint(editor, formatList, startContainer, 'previousSibling');\n endContainer = findBlockEndPoint(editor, formatList, endContainer, 'nextSibling');\n if (isBlockFormat(format)) {\n if (!dom.isBlock(startContainer)) {\n startContainer = findParentContainer(dom, formatList, startContainer, startOffset, true);\n }\n if (!dom.isBlock(endContainer)) {\n endContainer = findParentContainer(dom, formatList, endContainer, endOffset, false);\n }\n }\n }\n if (isElement$5(startContainer)) {\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (isElement$5(endContainer)) {\n endOffset = dom.nodeIndex(endContainer) + 1;\n endContainer = endContainer.parentNode;\n }\n return {\n startContainer: startContainer,\n startOffset: startOffset,\n endContainer: endContainer,\n endOffset: endOffset\n };\n };\n\n var walk$2 = function (dom, rng, callback) {\n var startOffset = rng.startOffset;\n var startContainer = getNode$1(rng.startContainer, startOffset);\n var endOffset = rng.endOffset;\n var endContainer = getNode$1(rng.endContainer, endOffset - 1);\n var exclude = function (nodes) {\n var firstNode = nodes[0];\n if (isText$7(firstNode) && firstNode === startContainer && startOffset >= firstNode.data.length) {\n nodes.splice(0, 1);\n }\n var lastNode = nodes[nodes.length - 1];\n if (endOffset === 0 && nodes.length > 0 && lastNode === endContainer && isText$7(lastNode)) {\n nodes.splice(nodes.length - 1, 1);\n }\n return nodes;\n };\n var collectSiblings = function (node, name, endNode) {\n var siblings = [];\n for (; node && node !== endNode; node = node[name]) {\n siblings.push(node);\n }\n return siblings;\n };\n var findEndPoint = function (node, root) {\n return dom.getParent(node, function (node) {\n return node.parentNode === root;\n }, root);\n };\n var walkBoundary = function (startNode, endNode, next) {\n var siblingName = next ? 'nextSibling' : 'previousSibling';\n for (var node = startNode, parent_1 = node.parentNode; node && node !== endNode; node = parent_1) {\n parent_1 = node.parentNode;\n var siblings_1 = collectSiblings(node === startNode ? node : node[siblingName], siblingName);\n if (siblings_1.length) {\n if (!next) {\n siblings_1.reverse();\n }\n callback(exclude(siblings_1));\n }\n }\n };\n if (startContainer === endContainer) {\n return callback(exclude([startContainer]));\n }\n var ancestor = dom.findCommonAncestor(startContainer, endContainer);\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 var startPoint = findEndPoint(startContainer, ancestor) || startContainer;\n var endPoint = findEndPoint(endContainer, ancestor) || endContainer;\n walkBoundary(startContainer, startPoint, true);\n var 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 var getRanges = function (selection) {\n var ranges = [];\n if (selection) {\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n }\n return ranges;\n };\n var getSelectedNodes = function (ranges) {\n return bind(ranges, function (range) {\n var node = getSelectedNode(range);\n return node ? [SugarElement.fromDom(node)] : [];\n });\n };\n var hasMultipleRanges = function (selection) {\n return getRanges(selection).length > 1;\n };\n\n var getCellsFromRanges = function (ranges) {\n return filter$4(getSelectedNodes(ranges), isTableCell$4);\n };\n var getCellsFromElement = function (elm) {\n return descendants(elm, 'td[data-mce-selected],th[data-mce-selected]');\n };\n var getCellsFromElementOrRanges = function (ranges, element) {\n var selectedCells = getCellsFromElement(element);\n return selectedCells.length > 0 ? selectedCells : getCellsFromRanges(ranges);\n };\n var getCellsFromEditor = function (editor) {\n return getCellsFromElementOrRanges(getRanges(editor.selection.getSel()), SugarElement.fromDom(editor.getBody()));\n };\n var getClosestTable = function (cell, isRoot) {\n return ancestor$2(cell, 'table', isRoot);\n };\n\n var getStartNode = function (rng) {\n var sc = rng.startContainer, so = rng.startOffset;\n if (isText$7(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 var getEndNode = function (rng) {\n var ec = rng.endContainer, eo = rng.endOffset;\n if (isText$7(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 var getFirstChildren = function (node) {\n return firstChild(node).fold(constant([node]), function (child) {\n return [node].concat(getFirstChildren(child));\n });\n };\n var getLastChildren$1 = function (node) {\n return lastChild(node).fold(constant([node]), function (child) {\n if (name(child) === 'br') {\n return prevSibling(child).map(function (sibling) {\n return [node].concat(getLastChildren$1(sibling));\n }).getOr([]);\n } else {\n return [node].concat(getLastChildren$1(child));\n }\n });\n };\n var hasAllContentsSelected = function (elm, rng) {\n return lift2(getStartNode(rng), getEndNode(rng), function (startNode, endNode) {\n var start = find$3(getFirstChildren(elm), curry(eq, startNode));\n var end = find$3(getLastChildren$1(elm), curry(eq, endNode));\n return start.isSome() && end.isSome();\n }).getOr(false);\n };\n var moveEndPoint = function (dom, rng, node, start) {\n var root = node, walker = new DomTreeWalker(node, root);\n var moveCaretBeforeOnEnterElementsMap = filter$3(dom.schema.getMoveCaretBeforeOnEnterElements(), function (_, name) {\n return !contains$3([\n 'td',\n 'th',\n 'table'\n ], name.toLowerCase());\n });\n do {\n if (isText$7(node) && Tools.trim(node.nodeValue).length !== 0) {\n if (start) {\n rng.setStart(node, 0);\n } else {\n rng.setEnd(node, node.nodeValue.length);\n }\n return;\n }\n if (moveCaretBeforeOnEnterElementsMap[node.nodeName]) {\n if (start) {\n rng.setStartBefore(node);\n } else {\n if (node.nodeName === 'BR') {\n rng.setEndBefore(node);\n } else {\n rng.setEndAfter(node);\n }\n }\n return;\n }\n } while (node = 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 var hasAnyRanges = function (editor) {\n var sel = editor.selection.getSel();\n return sel && sel.rangeCount > 0;\n };\n var runOnRanges = function (editor, executor) {\n var fakeSelectionNodes = getCellsFromEditor(editor);\n if (fakeSelectionNodes.length > 0) {\n each$k(fakeSelectionNodes, function (elem) {\n var node = elem.dom;\n var 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 var preserve = function (selection, fillBookmark, executor) {\n var bookmark = getPersistentBookmark(selection, fillBookmark);\n executor(bookmark);\n selection.moveToBookmark(bookmark);\n };\n\n var NodeValue = function (is, name) {\n var get = function (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 var getOption = function (element) {\n return is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n };\n var set = function (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: get,\n getOption: getOption,\n set: set\n };\n };\n\n var api$1 = NodeValue(isText$8, 'text');\n var get$2 = function (element) {\n return api$1.get(element);\n };\n\n var isZeroWidth = function (elem) {\n return isText$8(elem) && get$2(elem) === ZWSP$1;\n };\n var context = function (editor, elem, wrapName, nodeName) {\n return parent(elem).fold(function () {\n return 'skipping';\n }, function (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 (!isValid(editor, wrapName, nodeName) || !isValid(editor, name(parent), wrapName)) {\n return 'invalid-child';\n } else {\n return 'valid';\n }\n });\n };\n\n var applyWordGrab = function (editor, rng) {\n var r = expandRng(editor, rng, [{ inline: 'span' }]);\n rng.setStart(r.startContainer, r.startOffset);\n rng.setEnd(r.endContainer, r.endOffset);\n editor.selection.setRng(rng);\n };\n var makeAnnotation = function (eDoc, _a, annotationName, decorate) {\n var _b = _a.uid, uid = _b === void 0 ? generate('mce-annotation') : _b, data = __rest(_a, ['uid']);\n var master = SugarElement.fromTag('span', eDoc);\n add$1(master, annotation());\n set$1(master, '' + dataAnnotationId(), uid);\n set$1(master, '' + dataAnnotation(), annotationName);\n var _c = decorate(uid, data), _d = _c.attributes, attributes = _d === void 0 ? {} : _d, _e = _c.classes, classes = _e === void 0 ? [] : _e;\n setAll$1(master, attributes);\n add(master, classes);\n return master;\n };\n var annotate = function (editor, rng, annotationName, decorate, data) {\n var newWrappers = [];\n var master = makeAnnotation(editor.getDoc(), data, annotationName, decorate);\n var wrapper = value();\n var finishWrapper = function () {\n wrapper.clear();\n };\n var getOrOpenWrapper = function () {\n return wrapper.get().getOrThunk(function () {\n var nu = shallow(master);\n newWrappers.push(nu);\n wrapper.set(nu);\n return nu;\n });\n };\n var processElements = function (elems) {\n each$k(elems, processElement);\n };\n var processElement = function (elem) {\n var ctx = context(editor, elem, 'span', name(elem));\n switch (ctx) {\n case 'invalid-child': {\n finishWrapper();\n var children$1 = children(elem);\n processElements(children$1);\n finishWrapper();\n break;\n }\n case 'valid': {\n var w = getOrOpenWrapper();\n wrap$3(elem, w);\n break;\n }\n }\n };\n var processNodes = function (nodes) {\n var elems = map$3(nodes, SugarElement.fromDom);\n processElements(elems);\n };\n walk$2(editor.dom, rng, function (nodes) {\n finishWrapper();\n processNodes(nodes);\n });\n return newWrappers;\n };\n var annotateWithBookmark = function (editor, name, settings, data) {\n editor.undoManager.transact(function () {\n var selection = editor.selection;\n var initialRng = selection.getRng();\n var hasFakeSelection = getCellsFromEditor(editor).length > 0;\n if (initialRng.collapsed && !hasFakeSelection) {\n applyWordGrab(editor, initialRng);\n }\n if (selection.getRng().collapsed && !hasFakeSelection) {\n var wrapper = makeAnnotation(editor.getDoc(), data, name, settings.decorate);\n set(wrapper, nbsp);\n selection.getRng().insertNode(wrapper.dom);\n selection.select(wrapper.dom);\n } else {\n preserve(selection, false, function () {\n runOnRanges(editor, function (selectionRng) {\n annotate(editor, selectionRng, name, settings.decorate, data);\n });\n });\n }\n });\n };\n\n var Annotator = function (editor) {\n var registry = create$7();\n setup$m(editor, registry);\n var changes = setup$n(editor);\n return {\n register: function (name, settings) {\n registry.register(name, settings);\n },\n annotate: function (name, data) {\n registry.lookup(name).each(function (settings) {\n annotateWithBookmark(editor, name, settings, data);\n });\n },\n annotationChanged: function (name, callback) {\n changes.addListener(name, callback);\n },\n remove: function (name) {\n identify(editor, Optional.some(name)).each(function (_a) {\n var elements = _a.elements;\n each$k(elements, unwrap);\n });\n },\n getAll: function (name) {\n var directory = findAll(editor, name);\n return map$2(directory, function (elems) {\n return map$3(elems, function (elem) {\n return elem.dom;\n });\n });\n }\n };\n };\n\n var BookmarkManager = function (selection) {\n return {\n getBookmark: curry(getBookmark$1, selection),\n moveToBookmark: curry(moveToBookmark, selection)\n };\n };\n BookmarkManager.isBookmarkNode = isBookmarkNode$1;\n\n var getContentEditableRoot$1 = function (root, node) {\n while (node && node !== root) {\n if (isContentEditableTrue$4(node) || isContentEditableFalse$b(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n\n var isXYWithinRange = function (clientX, clientY, range) {\n if (range.collapsed) {\n return false;\n }\n if (Env.browser.isIE() && range.startOffset === range.endOffset - 1 && range.startContainer === range.endContainer) {\n var elm = range.startContainer.childNodes[range.startOffset];\n if (isElement$5(elm)) {\n return exists(elm.getClientRects(), function (rect) {\n return containsXY(rect, clientX, clientY);\n });\n }\n }\n return exists(range.getClientRects(), function (rect) {\n return containsXY(rect, clientX, clientY);\n });\n };\n\n var firePreProcess = function (editor, args) {\n return editor.fire('PreProcess', args);\n };\n var firePostProcess = function (editor, args) {\n return editor.fire('PostProcess', args);\n };\n var fireRemove = function (editor) {\n return editor.fire('remove');\n };\n var fireDetach = function (editor) {\n return editor.fire('detach');\n };\n var fireSwitchMode = function (editor, mode) {\n return editor.fire('SwitchMode', { mode: mode });\n };\n var fireObjectResizeStart = function (editor, target, width, height, origin) {\n editor.fire('ObjectResizeStart', {\n target: target,\n width: width,\n height: height,\n origin: origin\n });\n };\n var fireObjectResized = function (editor, target, width, height, origin) {\n editor.fire('ObjectResized', {\n target: target,\n width: width,\n height: height,\n origin: origin\n });\n };\n var firePreInit = function (editor) {\n return editor.fire('PreInit');\n };\n var firePostRender = function (editor) {\n return editor.fire('PostRender');\n };\n var fireInit = function (editor) {\n return editor.fire('Init');\n };\n var firePlaceholderToggle = function (editor, state) {\n return editor.fire('PlaceholderToggle', { state: state });\n };\n var fireError = function (editor, errorType, error) {\n return editor.fire(errorType, error);\n };\n var fireFormatApply = function (editor, format, node, vars) {\n return editor.fire('FormatApply', {\n format: format,\n node: node,\n vars: vars\n });\n };\n var fireFormatRemove = function (editor, format, node, vars) {\n return editor.fire('FormatRemove', {\n format: format,\n node: node,\n vars: vars\n });\n };\n\n var 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: function (e) {\n return e.shiftKey || e.ctrlKey || e.altKey || VK.metaKeyPressed(e);\n },\n metaKeyPressed: function (e) {\n return Env.mac ? e.metaKey : e.ctrlKey && !e.altKey;\n }\n };\n\n var isContentEditableFalse$5 = isContentEditableFalse$b;\n var ControlSelection = function (selection, editor) {\n var elementSelectionAttr = 'data-mce-selected';\n var dom = editor.dom, each = Tools.each;\n var selectedElm, selectedElmGhost, resizeHelper, selectedHandle, resizeBackdrop;\n var startX, startY, selectedElmX, selectedElmY, startW, startH, ratio, resizeStarted;\n var width, height;\n var editableDoc = editor.getDoc(), rootDocument = document;\n var abs = Math.abs, round = Math.round, rootElement = editor.getBody();\n var startScrollWidth, startScrollHeight;\n var 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 var isImage = function (elm) {\n return elm && (elm.nodeName === 'IMG' || editor.dom.is(elm, 'figure.image'));\n };\n var isMedia = function (elm) {\n return isMedia$2(elm) || dom.hasClass(elm, 'mce-preview-object');\n };\n var isEventOnImageOutsideRange = function (evt, range) {\n if (evt.type === 'longpress' || evt.type.indexOf('touch') === 0) {\n var 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 var contextMenuSelectImage = function (evt) {\n var target = evt.target;\n if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {\n editor.selection.select(target);\n }\n };\n var getResizeTargets = function (elm) {\n if (dom.is(elm, 'figure.image')) {\n return [elm.querySelector('img')];\n } else if (dom.hasClass(elm, 'mce-preview-object') && isNonNullable(elm.firstElementChild)) {\n return [\n elm,\n elm.firstElementChild\n ];\n } else {\n return [elm];\n }\n };\n var isResizable = function (elm) {\n var selector = getObjectResizing(editor);\n if (!selector) {\n return false;\n }\n if (elm.getAttribute('data-mce-resize') === 'false') {\n return false;\n }\n if (elm === editor.getBody()) {\n return false;\n }\n if (dom.hasClass(elm, 'mce-preview-object')) {\n return is$2(SugarElement.fromDom(elm.firstElementChild), selector);\n } else {\n return is$2(SugarElement.fromDom(elm), selector);\n }\n };\n var createGhostElement = function (elm) {\n if (isMedia(elm)) {\n return dom.create('img', { src: Env.transparentSrc });\n } else {\n return elm.cloneNode(true);\n }\n };\n var setSizeProp = function (element, name, value) {\n if (isNonNullable(value)) {\n var targets = getResizeTargets(element);\n each$k(targets, function (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 var setGhostElmSize = function (ghostElm, width, height) {\n setSizeProp(ghostElm, 'width', width);\n setSizeProp(ghostElm, 'height', height);\n };\n var resizeGhostElement = function (e) {\n var deltaX, deltaY, proportional;\n var 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(width * ratio);\n width = round(height / ratio);\n } else {\n width = round(height / ratio);\n height = round(width * ratio);\n }\n }\n setGhostElmSize(selectedElmGhost, width, height);\n resizeHelperX = selectedHandle.startPos.x + deltaX;\n resizeHelperY = selectedHandle.startPos.y + deltaY;\n resizeHelperX = resizeHelperX > 0 ? resizeHelperX : 0;\n resizeHelperY = resizeHelperY > 0 ? resizeHelperY : 0;\n dom.setStyles(resizeHelper, {\n left: resizeHelperX,\n top: resizeHelperY,\n display: 'block'\n });\n resizeHelper.innerHTML = width + ' × ' + height;\n if (selectedHandle[2] < 0 && selectedElmGhost.clientWidth <= width) {\n dom.setStyle(selectedElmGhost, 'left', selectedElmX + (startW - width));\n }\n if (selectedHandle[3] < 0 && selectedElmGhost.clientHeight <= height) {\n dom.setStyle(selectedElmGhost, 'top', selectedElmY + (startH - height));\n }\n deltaX = rootElement.scrollWidth - startScrollWidth;\n deltaY = rootElement.scrollHeight - startScrollHeight;\n if (deltaX + deltaY !== 0) {\n dom.setStyles(resizeHelper, {\n left: resizeHelperX - deltaX,\n top: resizeHelperY - deltaY\n });\n }\n if (!resizeStarted) {\n fireObjectResizeStart(editor, selectedElm, startW, startH, 'corner-' + selectedHandle.name);\n resizeStarted = true;\n }\n };\n var endGhostResize = function () {\n var 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 var showResizeRect = function (targetElm) {\n unbindResizeHandleEvents();\n var position = dom.getPos(targetElm, rootElement);\n var selectedElmX = position.x;\n var selectedElmY = position.y;\n var rect = targetElm.getBoundingClientRect();\n var targetWidth = rect.width || rect.right - rect.left;\n var targetHeight = rect.height || rect.bottom - rect.top;\n if (selectedElm !== targetElm) {\n hideResizeRect();\n selectedElm = targetElm;\n width = height = 0;\n }\n var e = editor.fire('ObjectSelected', { target: targetElm });\n var selectedValue = dom.getAttrib(selectedElm, elementSelectionAttr, '1');\n if (isResizable(targetElm) && !e.isDefaultPrevented()) {\n each(resizeHandles, function (handle, name) {\n var handleElm;\n var startDrag = function (e) {\n var target = getResizeTargets(selectedElm)[0];\n startX = e.screenX;\n startY = e.screenY;\n startW = target.clientWidth;\n startH = target.clientHeight;\n ratio = startH / startW;\n selectedHandle = handle;\n selectedHandle.name = name;\n selectedHandle.startPos = {\n x: targetWidth * handle[0] + selectedElmX,\n y: targetHeight * handle[1] + selectedElmY\n };\n startScrollWidth = rootElement.scrollWidth;\n startScrollHeight = rootElement.scrollHeight;\n resizeBackdrop = dom.add(rootElement, 'div', {\n 'class': 'mce-resize-backdrop',\n 'data-mce-bogus': 'all'\n });\n dom.setStyles(resizeBackdrop, {\n position: 'fixed',\n left: '0',\n top: '0',\n width: '100%',\n height: '100%'\n });\n selectedElmGhost = createGhostElement(selectedElm);\n dom.addClass(selectedElmGhost, 'mce-clonedresizable');\n dom.setAttrib(selectedElmGhost, 'data-mce-bogus', 'all');\n selectedElmGhost.contentEditable = 'false';\n dom.setStyles(selectedElmGhost, {\n left: selectedElmX,\n top: selectedElmY,\n margin: 0\n });\n setGhostElmSize(selectedElmGhost, targetWidth, targetHeight);\n selectedElmGhost.removeAttribute(elementSelectionAttr);\n rootElement.appendChild(selectedElmGhost);\n dom.bind(editableDoc, 'mousemove', resizeGhostElement);\n dom.bind(editableDoc, 'mouseup', endGhostResize);\n if (rootDocument !== editableDoc) {\n dom.bind(rootDocument, 'mousemove', resizeGhostElement);\n dom.bind(rootDocument, 'mouseup', endGhostResize);\n }\n resizeHelper = dom.add(rootElement, 'div', {\n 'class': 'mce-resize-helper',\n 'data-mce-bogus': 'all'\n }, startW + ' × ' + startH);\n };\n 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 if (Env.ie === 11) {\n handleElm.contentEditable = false;\n }\n dom.bind(handleElm, 'mousedown', function (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();\n }\n if (!dom.getAttrib(selectedElm, elementSelectionAttr)) {\n selectedElm.setAttribute(elementSelectionAttr, selectedValue);\n }\n };\n var hideResizeRect = function () {\n unbindResizeHandleEvents();\n if (selectedElm) {\n selectedElm.removeAttribute(elementSelectionAttr);\n }\n each$j(resizeHandles, function (value, name) {\n var handleElm = dom.get('mceResizeHandle' + name);\n if (handleElm) {\n dom.unbind(handleElm);\n dom.remove(handleElm);\n }\n });\n };\n var updateResizeRect = function (e) {\n var startElm, controlElm;\n var isChildOrEqual = function (node, parent) {\n if (node) {\n do {\n if (node === parent) {\n return true;\n }\n } while (node = node.parentNode);\n }\n };\n if (resizeStarted || editor.removed) {\n return;\n }\n each(dom.select('img[data-mce-selected],hr[data-mce-selected]'), function (img) {\n img.removeAttribute(elementSelectionAttr);\n });\n controlElm = e.type === 'mousedown' ? e.target : selection.getNode();\n controlElm = dom.$(controlElm).closest('table,img,figure.image,hr,video,span.mce-preview-object')[0];\n if (isChildOrEqual(controlElm, rootElement)) {\n disableGeckoResize();\n startElm = selection.getStart(true);\n if (isChildOrEqual(startElm, controlElm) && isChildOrEqual(selection.getEnd(true), controlElm)) {\n showResizeRect(controlElm);\n return;\n }\n }\n hideResizeRect();\n };\n var isWithinContentEditableFalse = function (elm) {\n return isContentEditableFalse$5(getContentEditableRoot$1(editor.getBody(), elm));\n };\n var unbindResizeHandleEvents = function () {\n each$j(resizeHandles, function (handle) {\n if (handle.elm) {\n dom.unbind(handle.elm);\n delete handle.elm;\n }\n });\n };\n var disableGeckoResize = function () {\n try {\n editor.getDoc().execCommand('enableObjectResizing', false, 'false');\n } catch (ex) {\n }\n };\n editor.on('init', function () {\n disableGeckoResize();\n if (Env.browser.isIE() || Env.browser.isEdge()) {\n editor.on('mousedown click', function (e) {\n var target = e.target, nodeName = target.nodeName;\n if (!resizeStarted && /^(TABLE|IMG|HR)$/.test(nodeName) && !isWithinContentEditableFalse(target)) {\n if (e.button !== 2) {\n editor.selection.select(target, nodeName === 'TABLE');\n }\n if (e.type === 'mousedown') {\n editor.nodeChanged();\n }\n }\n });\n var handleMSControlSelect_1 = function (e) {\n var delayedSelect = function (node) {\n Delay.setEditorTimeout(editor, function () {\n return editor.selection.select(node);\n });\n };\n if (isWithinContentEditableFalse(e.target) || isMedia$2(e.target)) {\n e.preventDefault();\n delayedSelect(e.target);\n return;\n }\n if (/^(TABLE|IMG|HR)$/.test(e.target.nodeName)) {\n e.preventDefault();\n if (e.target.tagName === 'IMG') {\n delayedSelect(e.target);\n }\n }\n };\n dom.bind(rootElement, 'mscontrolselect', handleMSControlSelect_1);\n editor.on('remove', function () {\n return dom.unbind(rootElement, 'mscontrolselect', handleMSControlSelect_1);\n });\n }\n var throttledUpdateResizeRect = Delay.throttle(function (e) {\n if (!editor.composing) {\n updateResizeRect(e);\n }\n });\n editor.on('NodeChange ResizeEditor ResizeWindow ResizeContent drop', throttledUpdateResizeRect);\n editor.on('keyup compositionend', function (e) {\n if (selectedElm && selectedElm.nodeName === 'TABLE') {\n throttledUpdateResizeRect(e);\n }\n });\n editor.on('hide blur', hideResizeRect);\n editor.on('contextmenu longpress', contextMenuSelectImage, true);\n });\n editor.on('remove', unbindResizeHandleEvents);\n var destroy = function () {\n selectedElm = selectedElmGhost = resizeBackdrop = null;\n };\n return {\n isResizable: isResizable,\n showResizeRect: showResizeRect,\n hideResizeRect: hideResizeRect,\n updateResizeRect: updateResizeRect,\n destroy: destroy\n };\n };\n\n var hasCeProperty = function (node) {\n return isContentEditableTrue$4(node) || isContentEditableFalse$b(node);\n };\n var findParent$1 = function (node, rootNode, predicate) {\n while (node && node !== rootNode) {\n if (predicate(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var findClosestIeRange = function (clientX, clientY, doc) {\n var rects;\n var element = doc.elementFromPoint(clientX, clientY);\n var rng = doc.body.createTextRange();\n if (!element || element.tagName === 'HTML') {\n element = doc.body;\n }\n rng.moveToElementText(element);\n rects = Tools.toArray(rng.getClientRects());\n rects = rects.sort(function (a, b) {\n a = Math.abs(Math.max(a.top - clientY, a.bottom - clientY));\n b = Math.abs(Math.max(b.top - clientY, b.bottom - clientY));\n return a - b;\n });\n if (rects.length > 0) {\n clientY = (rects[0].bottom + rects[0].top) / 2;\n try {\n rng.moveToPoint(clientX, clientY);\n rng.collapse(true);\n return rng;\n } catch (ex) {\n }\n }\n return null;\n };\n var moveOutOfContentEditableFalse = function (rng, rootNode) {\n var parentElement = rng && rng.parentElement ? rng.parentElement() : null;\n return isContentEditableFalse$b(findParent$1(parentElement, rootNode, hasCeProperty)) ? null : rng;\n };\n var fromPoint = function (clientX, clientY, doc) {\n var rng, point;\n var pointDoc = doc;\n if (pointDoc.caretPositionFromPoint) {\n point = pointDoc.caretPositionFromPoint(clientX, clientY);\n if (point) {\n rng = doc.createRange();\n rng.setStart(point.offsetNode, point.offset);\n rng.collapse(true);\n }\n } else if (pointDoc.caretRangeFromPoint) {\n rng = pointDoc.caretRangeFromPoint(clientX, clientY);\n } else if (pointDoc.body.createTextRange) {\n rng = pointDoc.body.createTextRange();\n try {\n rng.moveToPoint(clientX, clientY);\n rng.collapse(true);\n } catch (ex) {\n rng = findClosestIeRange(clientX, clientY, doc);\n }\n return moveOutOfContentEditableFalse(rng, doc.body);\n }\n return rng;\n };\n\n var isEq$4 = function (rng1, rng2) {\n return rng1 && rng2 && (rng1.startContainer === rng2.startContainer && rng1.startOffset === rng2.startOffset) && (rng1.endContainer === rng2.endContainer && rng1.endOffset === rng2.endOffset);\n };\n\n var findParent = function (node, rootNode, predicate) {\n while (node && node !== rootNode) {\n if (predicate(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var hasParent$1 = function (node, rootNode, predicate) {\n return findParent(node, rootNode, predicate) !== null;\n };\n var hasParentWithName = function (node, rootNode, name) {\n return hasParent$1(node, rootNode, function (node) {\n return node.nodeName === name;\n });\n };\n var isTable = function (node) {\n return node && node.nodeName === 'TABLE';\n };\n var isTableCell$2 = function (node) {\n return node && /^(TD|TH|CAPTION)$/.test(node.nodeName);\n };\n var isCeFalseCaretContainer = function (node, rootNode) {\n return isCaretContainer$2(node) && hasParent$1(node, rootNode, isCaretNode) === false;\n };\n var hasBrBeforeAfter = function (dom, node, left) {\n var walker = new DomTreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || dom.getRoot());\n while (node = walker[left ? 'prev' : 'next']()) {\n if (isBr$5(node)) {\n return true;\n }\n }\n };\n var isPrevNode = function (node, name) {\n return node.previousSibling && node.previousSibling.nodeName === name;\n };\n var hasContentEditableFalseParent = function (body, node) {\n while (node && node !== body) {\n if (isContentEditableFalse$b(node)) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n };\n var findTextNodeRelative = function (dom, isAfterNode, collapsed, left, startNode) {\n var lastInlineElement;\n var body = dom.getRoot();\n var node;\n var nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n var parentBlockContainer = dom.getParent(startNode.parentNode, dom.isBlock) || body;\n if (left && isBr$5(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) {\n return Optional.some(CaretPosition(startNode.parentNode, dom.nodeIndex(startNode)));\n }\n var 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$7(node) && node.nodeValue.length > 0) {\n if (hasParentWithName(node, body, 'A') === false) {\n return Optional.some(CaretPosition(node, left ? node.nodeValue.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 (collapsed && lastInlineElement) {\n return Optional.some(CaretPosition(lastInlineElement, 0));\n }\n return Optional.none();\n };\n var normalizeEndPoint = function (dom, collapsed, start, rng) {\n var container, offset;\n var body = dom.getRoot();\n var node;\n var directionLeft, normalized = false;\n container = rng[(start ? 'start' : 'end') + 'Container'];\n offset = rng[(start ? 'start' : 'end') + 'Offset'];\n var isAfterNode = isElement$5(container) && offset === container.childNodes.length;\n var nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n directionLeft = start;\n if (isCaretContainer$2(container)) {\n return Optional.none();\n }\n if (isElement$5(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(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$7(container) && isAfterNode ? container.data.length : 0;\n if (!collapsed && container === body.lastChild && isTable(container)) {\n return Optional.none();\n }\n if (hasContentEditableFalseParent(body, container) || isCaretContainer$2(container)) {\n return Optional.none();\n }\n if (container.hasChildNodes() && isTable(container) === false) {\n node = container;\n var walker = new DomTreeWalker(container, body);\n do {\n if (isContentEditableFalse$b(node) || isCaretContainer$2(node)) {\n normalized = false;\n break;\n }\n if (isText$7(node) && node.nodeValue.length > 0) {\n offset = directionLeft ? 0 : node.nodeValue.length;\n container = node;\n normalized = true;\n break;\n }\n if (nonEmptyElementsMap[node.nodeName.toLowerCase()] && !isTableCell$2(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$7(container) && offset === 0) {\n findTextNodeRelative(dom, isAfterNode, collapsed, true, container).each(function (pos) {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n if (isElement$5(container)) {\n node = container.childNodes[offset];\n if (!node) {\n node = container.childNodes[offset - 1];\n }\n if (node && isBr$5(node) && !isPrevNode(node, 'A') && !hasBrBeforeAfter(dom, node, false) && !hasBrBeforeAfter(dom, node, true)) {\n findTextNodeRelative(dom, isAfterNode, collapsed, true, node).each(function (pos) {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n }\n }\n if (directionLeft && !collapsed && isText$7(container) && offset === container.nodeValue.length) {\n findTextNodeRelative(dom, isAfterNode, collapsed, false, container).each(function (pos) {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n return normalized ? Optional.some(CaretPosition(container, offset)) : Optional.none();\n };\n var normalize$2 = function (dom, rng) {\n var collapsed = rng.collapsed, normRng = rng.cloneRange();\n var startPos = CaretPosition.fromRangeStart(rng);\n normalizeEndPoint(dom, collapsed, true, normRng).each(function (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(function (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 var splitText = function (node, offset) {\n return node.splitText(offset);\n };\n var split = function (rng) {\n var startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n if (startContainer === endContainer && isText$7(startContainer)) {\n if (startOffset > 0 && startOffset < startContainer.nodeValue.length) {\n endContainer = splitText(startContainer, startOffset);\n startContainer = endContainer.previousSibling;\n if (endOffset > startOffset) {\n endOffset = endOffset - startOffset;\n startContainer = endContainer = splitText(endContainer, endOffset).previousSibling;\n endOffset = endContainer.nodeValue.length;\n startOffset = 0;\n } else {\n endOffset = 0;\n }\n }\n } else {\n if (isText$7(startContainer) && startOffset > 0 && startOffset < startContainer.nodeValue.length) {\n startContainer = splitText(startContainer, startOffset);\n startOffset = 0;\n }\n if (isText$7(endContainer) && endOffset > 0 && endOffset < endContainer.nodeValue.length) {\n endContainer = splitText(endContainer, endOffset).previousSibling;\n endOffset = endContainer.nodeValue.length;\n }\n }\n return {\n startContainer: startContainer,\n startOffset: startOffset,\n endContainer: endContainer,\n endOffset: endOffset\n };\n };\n\n var RangeUtils = function (dom) {\n var walk = function (rng, callback) {\n return walk$2(dom, rng, callback);\n };\n var split$1 = split;\n var normalize = function (rng) {\n return normalize$2(dom, rng).fold(never, function (normalizedRng) {\n rng.setStart(normalizedRng.startContainer, normalizedRng.startOffset);\n rng.setEnd(normalizedRng.endContainer, normalizedRng.endOffset);\n return true;\n });\n };\n return {\n walk: walk,\n split: split$1,\n normalize: normalize\n };\n };\n RangeUtils.compareRanges = isEq$4;\n RangeUtils.getCaretRangeFromPoint = fromPoint;\n RangeUtils.getSelectedNode = getSelectedNode;\n RangeUtils.getNode = getNode$1;\n\n var Dimension = function (name, getOffset) {\n var set = function (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 var dom = element.dom;\n if (isSupported(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n var get = function (element) {\n var r = getOffset(element);\n if (r <= 0 || r === null) {\n var css = get$5(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n var getOuter = get;\n var aggregate = function (element, properties) {\n return foldl(properties, function (acc, property) {\n var val = get$5(element, property);\n var value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n };\n var max = function (element, value, properties) {\n var cumulativeInclusions = aggregate(element, properties);\n var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set: set,\n get: get,\n getOuter: getOuter,\n aggregate: aggregate,\n max: max\n };\n };\n\n var api = Dimension('height', function (element) {\n var dom = element.dom;\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n var get$1 = function (element) {\n return api.get(element);\n };\n\n var walkUp = function (navigation, doc) {\n var frame = navigation.view(doc);\n return frame.fold(constant([]), function (f) {\n var parent = navigation.owner(f);\n var rest = walkUp(navigation, parent);\n return [f].concat(rest);\n });\n };\n var pathTo = function (element, navigation) {\n var d = navigation.owner(element);\n return walkUp(navigation, d);\n };\n\n var view = function (doc) {\n var _a;\n var 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 var owner = function (element) {\n return documentOrOwner(element);\n };\n\n var Navigation = /*#__PURE__*/Object.freeze({\n __proto__: null,\n view: view,\n owner: owner\n });\n\n var find$1 = function (element) {\n var doc = SugarElement.fromDom(document);\n var scroll = get$8(doc);\n var frames = pathTo(element, Navigation);\n var offset = viewport(element);\n var r = foldr(frames, function (b, a) {\n var 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 var excludeFromDescend = function (element) {\n return name(element) === 'textarea';\n };\n var fireScrollIntoViewEvent = function (editor, data) {\n var scrollEvent = editor.fire('ScrollIntoView', data);\n return scrollEvent.isDefaultPrevented();\n };\n var fireAfterScrollIntoViewEvent = function (editor, data) {\n editor.fire('AfterScrollIntoView', data);\n };\n var descend = function (element, offset) {\n var children$1 = children(element);\n if (children$1.length === 0 || excludeFromDescend(element)) {\n return {\n element: element,\n offset: offset\n };\n } else if (offset < children$1.length && !excludeFromDescend(children$1[offset])) {\n return {\n element: children$1[offset],\n offset: 0\n };\n } else {\n var last = children$1[children$1.length - 1];\n if (excludeFromDescend(last)) {\n return {\n element: element,\n offset: offset\n };\n } else {\n if (name(last) === 'img') {\n return {\n element: last,\n offset: 1\n };\n } else if (isText$8(last)) {\n return {\n element: last,\n offset: get$2(last).length\n };\n } else {\n return {\n element: last,\n offset: children(last).length\n };\n }\n }\n }\n };\n var markerInfo = function (element, cleanupFun) {\n var pos = absolute(element);\n var height = get$1(element);\n return {\n element: element,\n bottom: pos.top + height,\n height: height,\n pos: pos,\n cleanup: cleanupFun\n };\n };\n var createMarker = function (element, offset) {\n var startPoint = descend(element, offset);\n var span = SugarElement.fromHtml('' + ZWSP$1 + '');\n before$4(startPoint.element, span);\n return markerInfo(span, function () {\n return remove$7(span);\n });\n };\n var elementMarker = function (element) {\n return markerInfo(SugarElement.fromDom(element), noop);\n };\n var withMarker = function (editor, f, rng, alignToTop) {\n preserveWith(editor, function (_s, _e) {\n return applyWithMarker(editor, f, rng, alignToTop);\n }, rng);\n };\n var withScrollEvents = function (editor, doc, f, marker, alignToTop) {\n var data = {\n elm: marker.element.dom,\n alignToTop: alignToTop\n };\n if (fireScrollIntoViewEvent(editor, data)) {\n return;\n }\n var scrollTop = get$8(doc).top;\n f(doc, scrollTop, marker, alignToTop);\n fireAfterScrollIntoViewEvent(editor, data);\n };\n var applyWithMarker = function (editor, f, rng, alignToTop) {\n var body = SugarElement.fromDom(editor.getBody());\n var doc = SugarElement.fromDom(editor.getDoc());\n reflow(body);\n var marker = createMarker(SugarElement.fromDom(rng.startContainer), rng.startOffset);\n withScrollEvents(editor, doc, f, marker, alignToTop);\n marker.cleanup();\n };\n var withElement = function (editor, element, f, alignToTop) {\n var doc = SugarElement.fromDom(editor.getDoc());\n withScrollEvents(editor, doc, f, elementMarker(element), alignToTop);\n };\n var preserveWith = function (editor, f, rng) {\n var startElement = rng.startContainer;\n var startOffset = rng.startOffset;\n var endElement = rng.endContainer;\n var endOffset = rng.endOffset;\n f(SugarElement.fromDom(startElement), SugarElement.fromDom(endElement));\n var newRng = editor.dom.createRng();\n newRng.setStart(startElement, startOffset);\n newRng.setEnd(endElement, endOffset);\n editor.selection.setRng(rng);\n };\n var scrollToMarker = function (marker, viewHeight, alignToTop, doc) {\n var pos = marker.pos;\n if (alignToTop) {\n to(pos.left, pos.top, doc);\n } else {\n var y = pos.top - viewHeight + marker.height;\n to(pos.left, y, doc);\n }\n };\n var intoWindowIfNeeded = function (doc, scrollTop, viewHeight, marker, alignToTop) {\n var viewportBottom = viewHeight + scrollTop;\n var markerTop = marker.pos.top;\n var markerBottom = marker.bottom;\n var largerThanViewport = markerBottom - markerTop >= viewHeight;\n if (markerTop < scrollTop) {\n scrollToMarker(marker, viewHeight, alignToTop !== false, doc);\n } else if (markerTop > viewportBottom) {\n var align = largerThanViewport ? alignToTop !== false : alignToTop === true;\n scrollToMarker(marker, viewHeight, align, doc);\n } else if (markerBottom > viewportBottom && !largerThanViewport) {\n scrollToMarker(marker, viewHeight, alignToTop === true, doc);\n }\n };\n var intoWindow = function (doc, scrollTop, marker, alignToTop) {\n var viewHeight = doc.dom.defaultView.innerHeight;\n intoWindowIfNeeded(doc, scrollTop, viewHeight, marker, alignToTop);\n };\n var intoFrame = function (doc, scrollTop, marker, alignToTop) {\n var frameViewHeight = doc.dom.defaultView.innerHeight;\n intoWindowIfNeeded(doc, scrollTop, frameViewHeight, marker, alignToTop);\n var op = find$1(marker.element);\n var 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 var rangeIntoWindow = function (editor, rng, alignToTop) {\n return withMarker(editor, intoWindow, rng, alignToTop);\n };\n var elementIntoWindow = function (editor, element, alignToTop) {\n return withElement(editor, element, intoWindow, alignToTop);\n };\n var rangeIntoFrame = function (editor, rng, alignToTop) {\n return withMarker(editor, intoFrame, rng, alignToTop);\n };\n var elementIntoFrame = function (editor, element, alignToTop) {\n return withElement(editor, element, intoFrame, alignToTop);\n };\n var scrollElementIntoView = function (editor, element, alignToTop) {\n var scroller = editor.inline ? elementIntoWindow : elementIntoFrame;\n scroller(editor, element, alignToTop);\n };\n var scrollRangeIntoView = function (editor, rng, alignToTop) {\n var scroller = editor.inline ? rangeIntoWindow : rangeIntoFrame;\n scroller(editor, rng, alignToTop);\n };\n\n var getDocument = function () {\n return SugarElement.fromDom(document);\n };\n\n var focus$1 = function (element) {\n return element.dom.focus();\n };\n var hasFocus$1 = function (element) {\n var root = getRootNode(element).dom;\n return element.dom === root.activeElement;\n };\n var active = function (root) {\n if (root === void 0) {\n root = getDocument();\n }\n return Optional.from(root.dom.activeElement).map(SugarElement.fromDom);\n };\n var search = function (element) {\n return active(getRootNode(element)).filter(function (e) {\n return element.dom.contains(e.dom);\n });\n };\n\n var create$5 = function (start, soffset, finish, foffset) {\n return {\n start: start,\n soffset: soffset,\n finish: finish,\n foffset: foffset\n };\n };\n var SimRange = { create: create$5 };\n\n var adt$1 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n var cata = function (subject, onBefore, onOn, onAfter) {\n return subject.fold(onBefore, onOn, onAfter);\n };\n var getStart$2 = function (situ) {\n return situ.fold(identity, identity, identity);\n };\n var before$1 = adt$1.before;\n var on = adt$1.on;\n var after$1 = adt$1.after;\n var Situ = {\n before: before$1,\n on: on,\n after: after$1,\n cata: cata,\n getStart: getStart$2\n };\n\n var 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 var exactFromRange = function (simRange) {\n return adt.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n };\n var getStart$1 = function (selection) {\n return selection.match({\n domRange: function (rng) {\n return SugarElement.fromDom(rng.startContainer);\n },\n relative: function (startSitu, _finishSitu) {\n return Situ.getStart(startSitu);\n },\n exact: function (start, _soffset, _finish, _foffset) {\n return start;\n }\n });\n };\n var domRange = adt.domRange;\n var relative = adt.relative;\n var exact = adt.exact;\n var getWin = function (selection) {\n var start = getStart$1(selection);\n return defaultView(start);\n };\n var range = SimRange.create;\n var SimSelection = {\n domRange: domRange,\n relative: relative,\n exact: exact,\n exactFromRange: exactFromRange,\n getWin: getWin,\n range: range\n };\n\n var browser$1 = detect().browser;\n var clamp$1 = function (offset, element) {\n var max = isText$8(element) ? get$2(element).length : children(element).length + 1;\n if (offset > max) {\n return max;\n } else if (offset < 0) {\n return 0;\n }\n return offset;\n };\n var normalizeRng = function (rng) {\n return SimSelection.range(rng.start, clamp$1(rng.soffset, rng.start), rng.finish, clamp$1(rng.foffset, rng.finish));\n };\n var isOrContains = function (root, elm) {\n return !isRestrictedNode(elm.dom) && (contains$1(root, elm) || eq(root, elm));\n };\n var isRngInRoot = function (root) {\n return function (rng) {\n return isOrContains(root, rng.start) && isOrContains(root, rng.finish);\n };\n };\n var shouldStore = function (editor) {\n return editor.inline === true || browser$1.isIE();\n };\n var nativeRangeToSelectionRange = function (r) {\n return SimSelection.range(SugarElement.fromDom(r.startContainer), r.startOffset, SugarElement.fromDom(r.endContainer), r.endOffset);\n };\n var readRange = function (win) {\n var selection = win.getSelection();\n var rng = !selection || selection.rangeCount === 0 ? Optional.none() : Optional.from(selection.getRangeAt(0));\n return rng.map(nativeRangeToSelectionRange);\n };\n var getBookmark = function (root) {\n var win = defaultView(root);\n return readRange(win.dom).filter(isRngInRoot(root));\n };\n var validate = function (root, bookmark) {\n return Optional.from(bookmark).filter(isRngInRoot(root)).map(normalizeRng);\n };\n var bookmarkToNativeRng = function (bookmark) {\n var rng = document.createRange();\n try {\n rng.setStart(bookmark.start.dom, bookmark.soffset);\n rng.setEnd(bookmark.finish.dom, bookmark.foffset);\n return Optional.some(rng);\n } catch (_) {\n return Optional.none();\n }\n };\n var store = function (editor) {\n var newBookmark = shouldStore(editor) ? getBookmark(SugarElement.fromDom(editor.getBody())) : Optional.none();\n editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n };\n var storeNative = function (editor, rng) {\n var root = SugarElement.fromDom(editor.getBody());\n var range = shouldStore(editor) ? Optional.from(rng) : Optional.none();\n var newBookmark = range.map(nativeRangeToSelectionRange).filter(isRngInRoot(root));\n editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n };\n var getRng = function (editor) {\n var bookmark = editor.bookmark ? editor.bookmark : Optional.none();\n return bookmark.bind(function (x) {\n return validate(SugarElement.fromDom(editor.getBody()), x);\n }).bind(bookmarkToNativeRng);\n };\n var restore = function (editor) {\n getRng(editor).each(function (rng) {\n return editor.selection.setRng(rng);\n });\n };\n\n var isEditorUIElement$1 = function (elm) {\n var className = elm.className.toString();\n return className.indexOf('tox-') !== -1 || className.indexOf('mce-') !== -1;\n };\n var FocusManager = { isEditorUIElement: isEditorUIElement$1 };\n\n var isManualNodeChange = function (e) {\n return e.type === 'nodechange' && e.selectionChange;\n };\n var registerPageMouseUp = function (editor, throttledStore) {\n var mouseUpPage = function () {\n throttledStore.throttle();\n };\n DOMUtils.DOM.bind(document, 'mouseup', mouseUpPage);\n editor.on('remove', function () {\n DOMUtils.DOM.unbind(document, 'mouseup', mouseUpPage);\n });\n };\n var registerFocusOut = function (editor) {\n editor.on('focusout', function () {\n store(editor);\n });\n };\n var registerMouseUp = function (editor, throttledStore) {\n editor.on('mouseup touchend', function (_e) {\n throttledStore.throttle();\n });\n };\n var registerEditorEvents = function (editor, throttledStore) {\n var browser = detect().browser;\n if (browser.isIE()) {\n registerFocusOut(editor);\n } else {\n registerMouseUp(editor, throttledStore);\n }\n editor.on('keyup NodeChange', function (e) {\n if (!isManualNodeChange(e)) {\n store(editor);\n }\n });\n };\n var register$3 = function (editor) {\n var throttledStore = first(function () {\n store(editor);\n }, 0);\n editor.on('init', function () {\n if (editor.inline) {\n registerPageMouseUp(editor, throttledStore);\n }\n registerEditorEvents(editor, throttledStore);\n });\n editor.on('remove', function () {\n throttledStore.cancel();\n });\n };\n\n var documentFocusInHandler;\n var DOM$8 = DOMUtils.DOM;\n var isEditorUIElement = function (elm) {\n return FocusManager.isEditorUIElement(elm);\n };\n var isEditorContentAreaElement = function (elm) {\n var 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 var isUIElement = function (editor, elm) {\n var customSelector = getCustomUiSelector(editor);\n var parent = DOM$8.getParent(elm, function (elm) {\n return isEditorUIElement(elm) || (customSelector ? editor.dom.is(elm, customSelector) : false);\n });\n return parent !== null;\n };\n var getActiveElement = function (editor) {\n try {\n var root = getRootNode(SugarElement.fromDom(editor.getElement()));\n return active(root).fold(function () {\n return document.body;\n }, function (x) {\n return x.dom;\n });\n } catch (ex) {\n return document.body;\n }\n };\n var registerEvents$1 = function (editorManager, e) {\n var editor = e.editor;\n register$3(editor);\n editor.on('focusin', function () {\n var focusedEditor = editorManager.focusedEditor;\n if (focusedEditor !== editor) {\n if (focusedEditor) {\n focusedEditor.fire('blur', { focusedEditor: editor });\n }\n editorManager.setActive(editor);\n editorManager.focusedEditor = editor;\n editor.fire('focus', { blurredEditor: focusedEditor });\n editor.focus(true);\n }\n });\n editor.on('focusout', function () {\n Delay.setEditorTimeout(editor, function () {\n var focusedEditor = editorManager.focusedEditor;\n if (!isUIElement(editor, getActiveElement(editor)) && focusedEditor === editor) {\n editor.fire('blur', { focusedEditor: null });\n editorManager.focusedEditor = null;\n }\n });\n });\n if (!documentFocusInHandler) {\n documentFocusInHandler = function (e) {\n var activeEditor = editorManager.activeEditor;\n if (activeEditor) {\n getOriginalEventTarget(e).each(function (target) {\n if (target.ownerDocument === document) {\n if (target !== document.body && !isUIElement(activeEditor, target) && editorManager.focusedEditor === activeEditor) {\n activeEditor.fire('blur', { focusedEditor: null });\n editorManager.focusedEditor = null;\n }\n }\n });\n }\n };\n DOM$8.bind(document, 'focusin', documentFocusInHandler);\n }\n };\n var unregisterDocumentEvents = function (editorManager, e) {\n if (editorManager.focusedEditor === e.editor) {\n editorManager.focusedEditor = null;\n }\n if (!editorManager.activeEditor) {\n DOM$8.unbind(document, 'focusin', documentFocusInHandler);\n documentFocusInHandler = null;\n }\n };\n var setup$l = function (editorManager) {\n editorManager.on('AddEditor', curry(registerEvents$1, editorManager));\n editorManager.on('RemoveEditor', curry(unregisterDocumentEvents, editorManager));\n };\n\n var getContentEditableHost = function (editor, node) {\n return editor.dom.getParent(node, function (node) {\n return editor.dom.getContentEditable(node) === 'true';\n });\n };\n var getCollapsedNode = function (rng) {\n return rng.collapsed ? Optional.from(getNode$1(rng.startContainer, rng.startOffset)).map(SugarElement.fromDom) : Optional.none();\n };\n var getFocusInElement = function (root, rng) {\n return getCollapsedNode(rng).bind(function (node) {\n if (isTableSection(node)) {\n return Optional.some(node);\n } else if (contains$1(root, node) === false) {\n return Optional.some(root);\n } else {\n return Optional.none();\n }\n });\n };\n var normalizeSelection$1 = function (editor, rng) {\n getFocusInElement(SugarElement.fromDom(editor.getBody()), rng).bind(function (elm) {\n return firstPositionIn(elm.dom);\n }).fold(function () {\n editor.selection.normalize();\n return;\n }, function (caretPos) {\n return editor.selection.setRng(caretPos.toRange());\n });\n };\n var focusBody = function (body) {\n if (body.setActive) {\n try {\n body.setActive();\n } catch (ex) {\n body.focus();\n }\n } else {\n body.focus();\n }\n };\n var hasElementFocus = function (elm) {\n return hasFocus$1(elm) || search(elm).isSome();\n };\n var hasIframeFocus = function (editor) {\n return editor.iframeElement && hasFocus$1(SugarElement.fromDom(editor.iframeElement));\n };\n var hasInlineFocus = function (editor) {\n var rawBody = editor.getBody();\n return rawBody && hasElementFocus(SugarElement.fromDom(rawBody));\n };\n var hasUiFocus = function (editor) {\n var dos = getRootNode(SugarElement.fromDom(editor.getElement()));\n return active(dos).filter(function (elem) {\n return !isEditorContentAreaElement(elem.dom) && isUIElement(editor, elem.dom);\n }).isSome();\n };\n var hasFocus = function (editor) {\n return editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);\n };\n var hasEditorOrUiFocus = function (editor) {\n return hasFocus(editor) || hasUiFocus(editor);\n };\n var focusEditor = function (editor) {\n var selection = editor.selection;\n var body = editor.getBody();\n var rng = selection.getRng();\n editor.quirks.refreshContentEditable();\n if (editor.bookmark !== undefined && hasFocus(editor) === false) {\n getRng(editor).each(function (bookmarkRng) {\n editor.selection.setRng(bookmarkRng);\n rng = bookmarkRng;\n });\n }\n var contentEditableHost = getContentEditableHost(editor, selection.getNode());\n if (editor.$.contains(body, contentEditableHost)) {\n focusBody(contentEditableHost);\n normalizeSelection$1(editor, rng);\n activateEditor(editor);\n return;\n }\n if (!editor.inline) {\n if (!Env.opera) {\n focusBody(body);\n }\n editor.getWin().focus();\n }\n if (Env.gecko || editor.inline) {\n focusBody(body);\n normalizeSelection$1(editor, rng);\n }\n activateEditor(editor);\n };\n var activateEditor = function (editor) {\n return editor.editorManager.setActive(editor);\n };\n var focus = function (editor, skipFocus) {\n if (editor.removed) {\n return;\n }\n if (skipFocus) {\n activateEditor(editor);\n } else {\n focusEditor(editor);\n }\n };\n\n var getEndpointElement = function (root, rng, start, real, resolve) {\n var container = start ? rng.startContainer : rng.endContainer;\n var offset = start ? rng.startOffset : rng.endOffset;\n return Optional.from(container).map(SugarElement.fromDom).map(function (elm) {\n return !real || !rng.collapsed ? child$1(elm, resolve(elm, offset)).getOr(elm) : elm;\n }).bind(function (elm) {\n return isElement$6(elm) ? Optional.some(elm) : parent(elm).filter(isElement$6);\n }).map(function (elm) {\n return elm.dom;\n }).getOr(root);\n };\n var getStart = function (root, rng, real) {\n return getEndpointElement(root, rng, true, real, function (elm, offset) {\n return Math.min(childNodesCount(elm), offset);\n });\n };\n var getEnd = function (root, rng, real) {\n return getEndpointElement(root, rng, false, real, function (elm, offset) {\n return offset > 0 ? offset - 1 : offset;\n });\n };\n var skipEmptyTextNodes = function (node, forwards) {\n var orig = node;\n while (node && isText$7(node) && node.length === 0) {\n node = forwards ? node.nextSibling : node.previousSibling;\n }\n return node || orig;\n };\n var getNode = function (root, rng) {\n var elm, startContainer, endContainer;\n if (!rng) {\n return root;\n }\n startContainer = rng.startContainer;\n endContainer = rng.endContainer;\n var startOffset = rng.startOffset;\n var endOffset = rng.endOffset;\n elm = rng.commonAncestorContainer;\n if (!rng.collapsed) {\n if (startContainer === endContainer) {\n if (endOffset - startOffset < 2) {\n if (startContainer.hasChildNodes()) {\n elm = startContainer.childNodes[startOffset];\n }\n }\n }\n if (startContainer.nodeType === 3 && endContainer.nodeType === 3) {\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 return startContainer;\n }\n }\n }\n if (elm && elm.nodeType === 3) {\n return elm.parentNode;\n }\n return elm;\n };\n var getSelectedBlocks = function (dom, rng, startElm, endElm) {\n var node;\n var selectedBlocks = [];\n var root = dom.getRoot();\n startElm = dom.getParent(startElm || getStart(root, rng, rng.collapsed), dom.isBlock);\n endElm = dom.getParent(endElm || getEnd(root, rng, rng.collapsed), dom.isBlock);\n if (startElm && startElm !== root) {\n selectedBlocks.push(startElm);\n }\n if (startElm && endElm && startElm !== endElm) {\n node = startElm;\n var walker = new DomTreeWalker(startElm, root);\n while ((node = walker.next()) && node !== endElm) {\n if (dom.isBlock(node)) {\n selectedBlocks.push(node);\n }\n }\n }\n if (endElm && startElm !== endElm && endElm !== root) {\n selectedBlocks.push(endElm);\n }\n return selectedBlocks;\n };\n var select = function (dom, node, content) {\n return Optional.from(node).map(function (node) {\n var idx = dom.nodeIndex(node);\n var rng = dom.createRng();\n rng.setStart(node.parentNode, idx);\n rng.setEnd(node.parentNode, idx + 1);\n if (content) {\n moveEndPoint(dom, rng, node, true);\n moveEndPoint(dom, rng, node, false);\n }\n return rng;\n });\n };\n\n var processRanges = function (editor, ranges) {\n return map$3(ranges, function (range) {\n var evt = editor.fire('GetSelectionRange', { range: range });\n return evt.range !== range ? evt.range : range;\n });\n };\n\n var typeLookup = {\n '#text': 3,\n '#comment': 8,\n '#cdata': 4,\n '#pi': 7,\n '#doctype': 10,\n '#document-fragment': 11\n };\n var walk$1 = function (node, root, prev) {\n var startName = prev ? 'lastChild' : 'firstChild';\n var siblingName = prev ? 'prev' : 'next';\n if (node[startName]) {\n return node[startName];\n }\n if (node !== root) {\n var sibling = node[siblingName];\n if (sibling) {\n return sibling;\n }\n for (var parent_1 = node.parent; parent_1 && parent_1 !== root; parent_1 = parent_1.parent) {\n sibling = parent_1[siblingName];\n if (sibling) {\n return sibling;\n }\n }\n }\n };\n var isEmptyTextNode = function (node) {\n if (!isWhitespaceText(node.value)) {\n return false;\n }\n var parentNode = node.parent;\n if (parentNode && (parentNode.name !== 'span' || parentNode.attr('style')) && /^[ ]+$/.test(node.value)) {\n return false;\n }\n return true;\n };\n var isNonEmptyElement = function (node) {\n var 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 var AstNode = function () {\n function AstNode(name, type) {\n this.name = name;\n this.type = type;\n if (type === 1) {\n this.attributes = [];\n this.attributes.map = {};\n }\n }\n AstNode.create = function (name, attrs) {\n var node = new AstNode(name, typeLookup[name] || 1);\n if (attrs) {\n each$j(attrs, function (value, attrName) {\n node.attr(attrName, value);\n });\n }\n return node;\n };\n AstNode.prototype.replace = function (node) {\n var self = this;\n if (node.parent) {\n node.remove();\n }\n self.insert(node, self);\n self.remove();\n return self;\n };\n AstNode.prototype.attr = function (name, value) {\n var self = this;\n var attrs;\n if (typeof name !== 'string') {\n if (name !== undefined && name !== null) {\n each$j(name, function (value, key) {\n self.attr(key, value);\n });\n }\n return self;\n }\n if (attrs = self.attributes) {\n if (value !== undefined) {\n if (value === null) {\n if (name in attrs.map) {\n delete attrs.map[name];\n var 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 var 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: name,\n value: value\n });\n }\n attrs.map[name] = value;\n return self;\n }\n return attrs.map[name];\n }\n };\n AstNode.prototype.clone = function () {\n var self = this;\n var clone = new AstNode(self.name, self.type);\n var selfAttrs;\n if (selfAttrs = self.attributes) {\n var cloneAttrs = [];\n cloneAttrs.map = {};\n for (var i = 0, l = selfAttrs.length; i < l; i++) {\n var 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 clone.shortEnded = self.shortEnded;\n return clone;\n };\n AstNode.prototype.wrap = function (wrapper) {\n var self = this;\n self.parent.insert(wrapper, self);\n wrapper.append(self);\n return self;\n };\n AstNode.prototype.unwrap = function () {\n var self = this;\n for (var node = self.firstChild; node;) {\n var next = node.next;\n self.insert(node, self, true);\n node = next;\n }\n self.remove();\n };\n AstNode.prototype.remove = function () {\n var 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 {\n prev.next = next;\n }\n if (parent.lastChild === self) {\n parent.lastChild = prev;\n if (prev) {\n prev.next = null;\n }\n } else {\n next.prev = prev;\n }\n self.parent = self.next = self.prev = null;\n }\n return self;\n };\n AstNode.prototype.append = function (node) {\n var self = this;\n if (node.parent) {\n node.remove();\n }\n var 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 AstNode.prototype.insert = function (node, refNode, before) {\n if (node.parent) {\n node.remove();\n }\n var parent = refNode.parent || this;\n if (before) {\n if (refNode === parent.firstChild) {\n parent.firstChild = node;\n } else {\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 {\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 AstNode.prototype.getAll = function (name) {\n var self = this;\n var collection = [];\n for (var node = self.firstChild; node; node = walk$1(node, self)) {\n if (node.name === name) {\n collection.push(node);\n }\n }\n return collection;\n };\n AstNode.prototype.children = function () {\n var self = this;\n var collection = [];\n for (var node = self.firstChild; node; node = node.next) {\n collection.push(node);\n }\n return collection;\n };\n AstNode.prototype.empty = function () {\n var self = this;\n if (self.firstChild) {\n var nodes = [];\n for (var node = self.firstChild; node; node = walk$1(node, self)) {\n nodes.push(node);\n }\n var i = nodes.length;\n while (i--) {\n var 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 AstNode.prototype.isEmpty = function (elements, whitespace, predicate) {\n if (whitespace === void 0) {\n whitespace = {};\n }\n var self = this;\n var 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(node.value)) {\n return false;\n }\n if (predicate && predicate(node)) {\n return false;\n }\n } while (node = walk$1(node, self));\n }\n return true;\n };\n AstNode.prototype.walk = function (prev) {\n return walk$1(this, null, prev);\n };\n return AstNode;\n }();\n\n var extractBase64DataUris = function (html) {\n var dataImageUri = /data:[^;<\"'\\s]+;base64,([a-z0-9\\+\\/=\\s]+)/gi;\n var chunks = [];\n var uris = {};\n var prefix = generate('img');\n var matches;\n var index = 0;\n var count = 0;\n while (matches = dataImageUri.exec(html)) {\n var uri = matches[0];\n var imageId = prefix + '_' + count++;\n uris[imageId] = uri;\n if (index < matches.index) {\n chunks.push(html.substr(index, matches.index - index));\n }\n chunks.push(imageId);\n index = matches.index + uri.length;\n }\n var re = new RegExp(prefix + '_[0-9]+', 'g');\n if (index === 0) {\n return {\n prefix: prefix,\n uris: uris,\n html: html,\n re: re\n };\n } else {\n if (index < html.length) {\n chunks.push(html.substr(index));\n }\n return {\n prefix: prefix,\n uris: uris,\n html: chunks.join(''),\n re: re\n };\n }\n };\n var restoreDataUris = function (html, result) {\n return html.replace(result.re, function (imageId) {\n return get$9(result.uris, imageId).getOr(imageId);\n });\n };\n var parseDataUri$1 = function (uri) {\n var matches = /data:([^;]+);base64,([a-z0-9\\+\\/=\\s]+)/i.exec(uri);\n if (matches) {\n return Optional.some({\n type: matches[1],\n data: decodeURIComponent(matches[2])\n });\n } else {\n return Optional.none();\n }\n };\n\n var each$d = Tools.each, trim = Tools.trim;\n var queryParts = 'source protocol authority userInfo user password host port relative path directory file query anchor'.split(' ');\n var DEFAULT_PORTS = {\n ftp: 21,\n http: 80,\n https: 443,\n mailto: 25\n };\n var safeSvgDataUrlElements = [\n 'img',\n 'video'\n ];\n var blockSvgDataUris = function (allowSvgDataUrls, tagName) {\n if (isNonNullable(allowSvgDataUrls)) {\n return !allowSvgDataUrls;\n } else {\n return isNonNullable(tagName) ? !contains$3(safeSvgDataUrlElements, tagName) : true;\n }\n };\n var isInvalidUri = function (settings, uri, tagName) {\n if (settings.allow_html_data_urls) {\n return false;\n } else if (/^data:image\\//i.test(uri)) {\n return blockSvgDataUris(settings.allow_svg_data_urls, tagName) && /^data:image\\/svg\\+xml/i.test(uri);\n } else {\n return /^data:/i.test(uri);\n }\n };\n var URI = function () {\n function URI(url, settings) {\n url = trim(url);\n this.settings = settings || {};\n var baseUri = this.settings.base_uri;\n var self = this;\n if (/^([\\w\\-]+):([^\\/]{2})/i.test(url) || /^\\s*#/.test(url)) {\n self.source = url;\n return;\n }\n var 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 var baseUrl = this.settings.base_uri ? this.settings.base_uri.path : new URI(document.location.href).directory;\n if (this.settings.base_uri && this.settings.base_uri.protocol == '') {\n url = '//mce_host' + self.toAbsPath(baseUrl, url);\n } else {\n var match = /([^#?]*)([#?]?.*)/.exec(url);\n url = (baseUri && baseUri.protocol || 'http') + '://mce_host' + self.toAbsPath(baseUrl, match[1]) + match[2];\n }\n }\n url = url.replace(/@@/g, '(mce_at)');\n var urlMatch = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@\\/]*):?([^:@\\/]*))?@)?(\\[[a-zA-Z0-9:.%]+\\]|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/.exec(url);\n each$d(queryParts, function (v, i) {\n var part = urlMatch[i];\n if (part) {\n part = part.replace(/\\(mce_at\\)/g, '@@');\n }\n self[v] = part;\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 URI.parseDataUri = function (uri) {\n var type;\n var uriComponents = decodeURIComponent(uri).split(',');\n var matches = /data:([^;]+)/.exec(uriComponents[0]);\n if (matches) {\n type = matches[1];\n }\n return {\n type: type,\n data: uriComponents[1]\n };\n };\n URI.isDomSafe = function (uri, context, options) {\n if (options === void 0) {\n options = {};\n }\n if (options.allow_script_urls) {\n return true;\n } else {\n var decodedUri = Entities.decode(uri).replace(/[\\s\\u0000-\\u001F]+/g, '');\n try {\n decodedUri = decodeURIComponent(decodedUri);\n } catch (ex) {\n decodedUri = unescape(decodedUri);\n }\n if (/((java|vb)script|mhtml):/i.test(decodedUri)) {\n return false;\n }\n return !isInvalidUri(options, decodedUri, context);\n }\n };\n URI.getDocumentBaseUrl = function (loc) {\n var baseUrl;\n if (loc.protocol.indexOf('http') !== 0 && loc.protocol !== 'file:') {\n baseUrl = loc.href;\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 URI.prototype.setPath = function (path) {\n var pathMatch = /^(.*?)\\/?(\\w+)?$/.exec(path);\n this.path = pathMatch[0];\n this.directory = pathMatch[1];\n this.file = pathMatch[2];\n this.source = '';\n this.getURI();\n };\n URI.prototype.toRelative = function (uri) {\n var output;\n if (uri === './') {\n return uri;\n }\n var 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 var 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 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 URI.prototype.toAbsolute = function (uri, noHost) {\n var absoluteUri = new URI(uri, { base_uri: this });\n return absoluteUri.getURI(noHost && this.isSameOrigin(absoluteUri));\n };\n URI.prototype.isSameOrigin = function (uri) {\n if (this.host == uri.host && this.protocol == uri.protocol) {\n if (this.port == uri.port) {\n return true;\n }\n var defaultPort = DEFAULT_PORTS[this.protocol];\n if (defaultPort && (this.port || defaultPort) == (uri.port || defaultPort)) {\n return true;\n }\n }\n return false;\n };\n URI.prototype.toRelPath = function (base, path) {\n var breakPoint = 0, out = '', i, l;\n var normalizedBase = base.substring(0, base.lastIndexOf('/')).split('/');\n var 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 URI.prototype.toAbsPath = function (base, path) {\n var i, nb = 0, o = [], outPath;\n var tr = /\\/$/.test(path) ? '/' : '';\n var normalizedBase = base.split('/');\n var normalizedPath = path.split('/');\n each$d(normalizedBase, function (k) {\n if (k) {\n o.push(k);\n }\n });\n normalizedBase = o;\n for (i = normalizedPath.length - 1, o = []; 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 o.push(normalizedPath[i]);\n }\n i = normalizedBase.length - nb;\n if (i <= 0) {\n outPath = reverse(o).join('/');\n } else {\n outPath = normalizedBase.slice(0, i).join('/') + '/' + reverse(o).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 URI.prototype.getURI = function (noProtoHost) {\n if (noProtoHost === void 0) {\n noProtoHost = false;\n }\n var 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 return URI;\n }();\n\n var filteredClobberElements = Tools.makeMap('button,fieldset,form,iframe,img,image,input,object,output,select,textarea');\n var isValidPrefixAttrName = function (name) {\n return name.indexOf('data-') === 0 || name.indexOf('aria-') === 0;\n };\n var lazyTempDocument$1 = cached(function () {\n return document.implementation.createHTMLDocument('parser');\n });\n var findMatchingEndTagIndex = function (schema, html, startIndex) {\n var startTagRegExp = /<([!?\\/])?([A-Za-z0-9\\-_:.]+)/g;\n var endTagRegExp = /(?:\\s(?:[^'\">]+(?:\"[^\"]*\"|'[^']*'))*[^\"'>]*(?:\"[^\">]*|'[^'>]*)?|\\s*|\\/)>/g;\n var shortEndedElements = schema.getShortEndedElements();\n var count = 1, index = startIndex;\n while (count !== 0) {\n startTagRegExp.lastIndex = index;\n while (true) {\n var startMatch = startTagRegExp.exec(html);\n if (startMatch === null) {\n return index;\n } else if (startMatch[1] === '!') {\n if (startsWith(startMatch[2], '--')) {\n index = findCommentEndIndex(html, false, startMatch.index + '!--'.length);\n } else {\n index = findCommentEndIndex(html, true, startMatch.index + 1);\n }\n break;\n } else {\n endTagRegExp.lastIndex = startTagRegExp.lastIndex;\n var endMatch = endTagRegExp.exec(html);\n if (isNull(endMatch) || endMatch.index !== startTagRegExp.lastIndex) {\n continue;\n }\n if (startMatch[1] === '/') {\n count -= 1;\n } else if (!has$2(shortEndedElements, startMatch[2])) {\n count += 1;\n }\n index = startTagRegExp.lastIndex + endMatch[0].length;\n break;\n }\n }\n }\n return index;\n };\n var isConditionalComment = function (html, startIndex) {\n return /^\\s*\\[if [\\w\\W]+\\]>.*/.test(html.substr(startIndex));\n };\n var findCommentEndIndex = function (html, isBogus, startIndex) {\n if (startIndex === void 0) {\n startIndex = 0;\n }\n var lcHtml = html.toLowerCase();\n if (lcHtml.indexOf('[if ', startIndex) !== -1 && isConditionalComment(lcHtml, startIndex)) {\n var endIfIndex = lcHtml.indexOf('[endif]', startIndex);\n return lcHtml.indexOf('>', endIfIndex);\n } else {\n if (isBogus) {\n var endIndex = lcHtml.indexOf('>', startIndex);\n return endIndex !== -1 ? endIndex : lcHtml.length;\n } else {\n var endCommentRegexp = /--!?>/g;\n endCommentRegexp.lastIndex = startIndex;\n var match = endCommentRegexp.exec(html);\n return match ? match.index + match[0].length : lcHtml.length;\n }\n }\n };\n var checkBogusAttribute = function (regExp, attrString) {\n var matches = regExp.exec(attrString);\n if (matches) {\n var name_1 = matches[1];\n var value = matches[2];\n return typeof name_1 === 'string' && name_1.toLowerCase() === 'data-mce-bogus' ? value : null;\n } else {\n return null;\n }\n };\n var SaxParser = function (settings, schema) {\n if (schema === void 0) {\n schema = Schema();\n }\n settings = settings || {};\n var doc = lazyTempDocument$1();\n var form = doc.createElement('form');\n if (settings.fix_self_closing !== false) {\n settings.fix_self_closing = true;\n }\n var comment = settings.comment ? settings.comment : noop;\n var cdata = settings.cdata ? settings.cdata : noop;\n var text = settings.text ? settings.text : noop;\n var start = settings.start ? settings.start : noop;\n var end = settings.end ? settings.end : noop;\n var pi = settings.pi ? settings.pi : noop;\n var doctype = settings.doctype ? settings.doctype : noop;\n var parseInternal = function (base64Extract, format) {\n if (format === void 0) {\n format = 'html';\n }\n var html = base64Extract.html;\n var matches, index = 0, value, endRegExp;\n var stack = [];\n var attrList, i, textData, name;\n var isInternalElement, isShortEnded;\n var elementRule, isValidElement, attr, attribsValue, validAttributesMap, validAttributePatterns;\n var attributesRequired, attributesDefault, attributesForced;\n var anyAttributesRequired, attrValue, idCount = 0;\n var decode = Entities.decode;\n var filteredUrlAttrs = Tools.makeMap('src,href,data,background,action,formaction,poster,xlink:href');\n var parsingMode = format === 'html' ? 0 : 1;\n var processEndTag = function (name) {\n var pos, i;\n pos = stack.length;\n while (pos--) {\n if (stack[pos].name === name) {\n break;\n }\n }\n if (pos >= 0) {\n for (i = stack.length - 1; i >= pos; i--) {\n name = stack[i];\n if (name.valid) {\n end(name.name);\n }\n }\n stack.length = pos;\n }\n };\n var processText = function (value, raw) {\n return text(restoreDataUris(value, base64Extract), raw);\n };\n var processComment = function (value) {\n if (value === '') {\n return;\n }\n if (value.charAt(0) === '>') {\n value = ' ' + value;\n }\n if (!settings.allow_conditional_comments && value.substr(0, 3).toLowerCase() === '[if') {\n value = ' ' + value;\n }\n comment(restoreDataUris(value, base64Extract));\n };\n var processAttr = function (value) {\n return restoreDataUris(value, base64Extract);\n };\n var processMalformedComment = function (value, startIndex) {\n var startTag = value || '';\n var isBogus = !startsWith(startTag, '--');\n var endIndex = findCommentEndIndex(html, isBogus, startIndex);\n value = html.substr(startIndex, endIndex - startIndex);\n processComment(isBogus ? startTag + value : value);\n return endIndex + 1;\n };\n var parseAttribute = function (tagName, name, value, val2, val3) {\n name = name.toLowerCase();\n value = processAttr(name in fillAttrsMap ? name : decode(value || val2 || val3 || ''));\n if (validate && !isInternalElement && isValidPrefixAttrName(name) === false) {\n var attrRule = validAttributesMap[name];\n if (!attrRule && validAttributePatterns) {\n var i_1 = validAttributePatterns.length;\n while (i_1--) {\n attrRule = validAttributePatterns[i_1];\n if (attrRule.pattern.test(name)) {\n break;\n }\n }\n if (i_1 === -1) {\n attrRule = null;\n }\n }\n if (!attrRule) {\n return;\n }\n if (attrRule.validValues && !(value in attrRule.validValues)) {\n return;\n }\n }\n var isNameOrId = name === 'name' || name === 'id';\n if (isNameOrId && tagName in filteredClobberElements && (value in doc || value in form)) {\n return;\n }\n if (filteredUrlAttrs[name] && !URI.isDomSafe(value, tagName, settings)) {\n return;\n }\n if (isInternalElement && (name in filteredUrlAttrs || name.indexOf('on') === 0)) {\n return;\n }\n attrList.map[name] = value;\n attrList.push({\n name: name,\n value: value\n });\n };\n var tokenRegExp = new RegExp('<(?:' + '(?:!--([\\\\w\\\\W]*?)--!?>)|' + '(?:!\\\\[CDATA\\\\[([\\\\w\\\\W]*?)\\\\]\\\\]>)|' + '(?:![Dd][Oo][Cc][Tt][Yy][Pp][Ee]([\\\\w\\\\W]*?)>)|' + '(?:!(--)?)|' + '(?:\\\\?([^\\\\s\\\\/<>]+) ?([\\\\w\\\\W]*?)[?/]>)|' + '(?:\\\\/([A-Za-z][A-Za-z0-9\\\\-_\\\\:\\\\.]*)>)|' + '(?:([A-Za-z][A-Za-z0-9\\\\-_:.]*)(\\\\s(?:[^\\'\">]+(?:\"[^\"]*\"|\\'[^\\']*\\'))*[^\"\\'>]*(?:\"[^\">]*|\\'[^\\'>]*)?|\\\\s*|\\\\/)>)' + ')', 'g');\n var attrRegExp = /([\\w:\\-]+)(?:\\s*=\\s*(?:(?:\\\"((?:[^\\\"])*)\\\")|(?:\\'((?:[^\\'])*)\\')|([^>\\s]+)))?/g;\n var shortEndedElements = schema.getShortEndedElements();\n var selfClosing = settings.self_closing_elements || schema.getSelfClosingElements();\n var fillAttrsMap = schema.getBoolAttrs();\n var validate = settings.validate;\n var removeInternalElements = settings.remove_internals;\n var fixSelfClosing = settings.fix_self_closing;\n var specialElements = schema.getSpecialElements();\n var processHtml = html + '>';\n while (matches = tokenRegExp.exec(processHtml)) {\n var matchText = matches[0];\n if (index < matches.index) {\n processText(decode(html.substr(index, matches.index - index)));\n }\n if (value = matches[7]) {\n value = value.toLowerCase();\n if (value.charAt(0) === ':') {\n value = value.substr(1);\n }\n processEndTag(value);\n } else if (value = matches[8]) {\n if (matches.index + matchText.length > html.length) {\n processText(decode(html.substr(matches.index)));\n index = matches.index + matchText.length;\n continue;\n }\n value = value.toLowerCase();\n if (value.charAt(0) === ':') {\n value = value.substr(1);\n }\n isShortEnded = value in shortEndedElements;\n if (fixSelfClosing && selfClosing[value] && stack.length > 0 && stack[stack.length - 1].name === value) {\n processEndTag(value);\n }\n var bogusValue = checkBogusAttribute(attrRegExp, matches[9]);\n if (bogusValue !== null) {\n if (bogusValue === 'all') {\n index = findMatchingEndTagIndex(schema, html, tokenRegExp.lastIndex);\n tokenRegExp.lastIndex = index;\n continue;\n }\n isValidElement = false;\n }\n if (!validate || (elementRule = schema.getElementRule(value))) {\n isValidElement = true;\n if (validate) {\n validAttributesMap = elementRule.attributes;\n validAttributePatterns = elementRule.attributePatterns;\n }\n if (attribsValue = matches[9]) {\n isInternalElement = attribsValue.indexOf('data-mce-type') !== -1;\n if (isInternalElement && removeInternalElements) {\n isValidElement = false;\n }\n attrList = [];\n attrList.map = {};\n attribsValue.replace(attrRegExp, function (match, name, val, val2, val3) {\n parseAttribute(value, name, val, val2, val3);\n return '';\n });\n } else {\n attrList = [];\n attrList.map = {};\n }\n if (validate && !isInternalElement) {\n attributesRequired = elementRule.attributesRequired;\n attributesDefault = elementRule.attributesDefault;\n attributesForced = elementRule.attributesForced;\n anyAttributesRequired = elementRule.removeEmptyAttrs;\n if (anyAttributesRequired && !attrList.length) {\n isValidElement = false;\n }\n if (attributesForced) {\n i = attributesForced.length;\n while (i--) {\n attr = attributesForced[i];\n name = attr.name;\n attrValue = attr.value;\n if (attrValue === '{$uid}') {\n attrValue = 'mce_' + idCount++;\n }\n attrList.map[name] = attrValue;\n attrList.push({\n name: name,\n value: attrValue\n });\n }\n }\n if (attributesDefault) {\n i = attributesDefault.length;\n while (i--) {\n attr = attributesDefault[i];\n name = attr.name;\n if (!(name in attrList.map)) {\n attrValue = attr.value;\n if (attrValue === '{$uid}') {\n attrValue = 'mce_' + idCount++;\n }\n attrList.map[name] = attrValue;\n attrList.push({\n name: name,\n value: attrValue\n });\n }\n }\n }\n if (attributesRequired) {\n i = attributesRequired.length;\n while (i--) {\n if (attributesRequired[i] in attrList.map) {\n break;\n }\n }\n if (i === -1) {\n isValidElement = false;\n }\n }\n if (attr = attrList.map['data-mce-bogus']) {\n if (attr === 'all') {\n index = findMatchingEndTagIndex(schema, html, tokenRegExp.lastIndex);\n tokenRegExp.lastIndex = index;\n continue;\n }\n isValidElement = false;\n }\n }\n if (isValidElement) {\n start(value, attrList, isShortEnded);\n }\n } else {\n isValidElement = false;\n }\n if (endRegExp = specialElements[value]) {\n endRegExp.lastIndex = index = matches.index + matchText.length;\n if (matches = endRegExp.exec(html)) {\n if (isValidElement) {\n textData = html.substr(index, matches.index - index);\n }\n index = matches.index + matches[0].length;\n } else {\n textData = html.substr(index);\n index = html.length;\n }\n if (isValidElement) {\n if (textData.length > 0) {\n processText(textData, true);\n }\n end(value);\n }\n tokenRegExp.lastIndex = index;\n continue;\n }\n if (!isShortEnded) {\n if (!attribsValue || attribsValue.indexOf('/') !== attribsValue.length - 1) {\n stack.push({\n name: value,\n valid: isValidElement\n });\n } else if (isValidElement) {\n end(value);\n }\n }\n } else if (value = matches[1]) {\n processComment(value);\n } else if (value = matches[2]) {\n var isValidCdataSection = parsingMode === 1 || settings.preserve_cdata || stack.length > 0 && schema.isValidChild(stack[stack.length - 1].name, '#cdata');\n if (isValidCdataSection) {\n cdata(value);\n } else {\n index = processMalformedComment('', matches.index + 2);\n tokenRegExp.lastIndex = index;\n continue;\n }\n } else if (value = matches[3]) {\n doctype(value);\n } else if ((value = matches[4]) || matchText === '= 0; i--) {\n value = stack[i];\n if (value.valid) {\n end(value.name);\n }\n }\n };\n var parse = function (html, format) {\n if (format === void 0) {\n format = 'html';\n }\n parseInternal(extractBase64DataUris(html), format);\n };\n return { parse: parse };\n };\n SaxParser.findEndTag = findMatchingEndTagIndex;\n\n var trimHtml = function (tempAttrs, html) {\n var trimContentRegExp = new RegExp(['\\\\s?(' + tempAttrs.join('|') + ')=\"[^\"]+\"'].join('|'), 'gi');\n return html.replace(trimContentRegExp, '');\n };\n var trimInternal = function (serializer, html) {\n var bogusAllRegExp = /<(\\w+) [^>]*data-mce-bogus=\"all\"[^>]*>/g;\n var schema = serializer.schema;\n var content = trimHtml(serializer.getTempAttrs(), html);\n var shortEndedElements = schema.getShortEndedElements();\n var matches;\n while (matches = bogusAllRegExp.exec(content)) {\n var index = bogusAllRegExp.lastIndex;\n var matchLength = matches[0].length;\n var endTagIndex = void 0;\n if (shortEndedElements[matches[1]]) {\n endTagIndex = index;\n } else {\n endTagIndex = SaxParser.findEndTag(schema, content, index);\n }\n content = content.substring(0, index - matchLength) + content.substring(endTagIndex);\n bogusAllRegExp.lastIndex = index - matchLength;\n }\n return trim$2(content);\n };\n var trimExternal = trimInternal;\n\n var trimEmptyContents = function (editor, html) {\n var blockName = getForcedRootBlock(editor);\n var emptyRegExp = new RegExp('^(<' + blockName + '[^>]*>( | |\\\\s|\\xA0|
|)<\\\\/' + blockName + '>[\\r\\n]*|
[\\r\\n]*)$');\n return html.replace(emptyRegExp, '');\n };\n var setupArgs$3 = function (args, format) {\n return __assign(__assign({}, args), {\n format: format,\n get: true,\n getInner: true\n });\n };\n var getContentFromBody = function (editor, args, format, body) {\n var defaultedArgs = setupArgs$3(args, format);\n var updatedArgs = args.no_events ? defaultedArgs : editor.fire('BeforeGetContent', defaultedArgs);\n var content;\n if (updatedArgs.format === 'raw') {\n content = Tools.trim(trimExternal(editor.serializer, body.innerHTML));\n } else if (updatedArgs.format === 'text') {\n content = editor.dom.isEmpty(body) ? '' : trim$2(body.innerText || body.textContent);\n } else if (updatedArgs.format === 'tree') {\n content = editor.serializer.serialize(body, updatedArgs);\n } else {\n content = trimEmptyContents(editor, editor.serializer.serialize(body, updatedArgs));\n }\n if (!contains$3([\n 'text',\n 'tree'\n ], updatedArgs.format) && !isWsPreserveElement(SugarElement.fromDom(body))) {\n updatedArgs.content = Tools.trim(content);\n } else {\n updatedArgs.content = content;\n }\n if (updatedArgs.no_events) {\n return updatedArgs.content;\n } else {\n return editor.fire('GetContent', updatedArgs).content;\n }\n };\n var getContentInternal = function (editor, args, format) {\n return Optional.from(editor.getBody()).fold(constant(args.format === 'tree' ? new AstNode('body', 11) : ''), function (body) {\n return getContentFromBody(editor, args, format, body);\n });\n };\n\n var each$c = Tools.each;\n var ElementUtils = function (dom) {\n var compare = function (node1, node2) {\n if (node1.nodeName !== node2.nodeName) {\n return false;\n }\n var getAttribs = function (node) {\n var attribs = {};\n each$c(dom.getAttribs(node), function (attr) {\n var name = attr.nodeName.toLowerCase();\n if (name.indexOf('_') !== 0 && name !== 'style' && name.indexOf('data-') !== 0) {\n attribs[name] = dom.getAttrib(node, name);\n }\n });\n return attribs;\n };\n var compareObjects = function (obj1, obj2) {\n var value, name;\n for (name in obj1) {\n if (has$2(obj1, name)) {\n value = obj2[name];\n if (typeof value === 'undefined') {\n return false;\n }\n if (obj1[name] !== value) {\n return false;\n }\n delete obj2[name];\n }\n }\n for (name in obj2) {\n if (has$2(obj2, name)) {\n return false;\n }\n }\n return true;\n };\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 return !isBookmarkNode$1(node1) && !isBookmarkNode$1(node2);\n };\n return { compare: compare };\n };\n\n var makeMap$1 = Tools.makeMap;\n var Writer = function (settings) {\n var html = [];\n settings = settings || {};\n var indent = settings.indent;\n var indentBefore = makeMap$1(settings.indent_before || '');\n var indentAfter = makeMap$1(settings.indent_after || '');\n var encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);\n var htmlOutput = settings.element_format === 'html';\n return {\n start: function (name, attrs, empty) {\n var i, l, attr, value;\n if (indent && indentBefore[name] && html.length > 0) {\n 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 (i = 0, l = attrs.length; i < l; i++) {\n 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 value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n },\n end: function (name) {\n var 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: function (text, raw) {\n if (text.length > 0) {\n html[html.length] = raw ? text : encode(text);\n }\n },\n cdata: function (text) {\n html.push('');\n },\n comment: function (text) {\n html.push('');\n },\n pi: function (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: function (text) {\n html.push('', indent ? '\\n' : '');\n },\n reset: function () {\n html.length = 0;\n },\n getContent: function () {\n return html.join('').replace(/\\n$/, '');\n }\n };\n };\n\n var HtmlSerializer = function (settings, schema) {\n if (schema === void 0) {\n schema = Schema();\n }\n var writer = Writer(settings);\n settings = settings || {};\n settings.validate = 'validate' in settings ? settings.validate : true;\n var serialize = function (node) {\n var validate = settings.validate;\n var handlers = {\n 3: function (node) {\n writer.text(node.value, node.raw);\n },\n 8: function (node) {\n writer.comment(node.value);\n },\n 7: function (node) {\n writer.pi(node.name, node.value);\n },\n 10: function (node) {\n writer.doctype(node.value);\n },\n 4: function (node) {\n writer.cdata(node.value);\n },\n 11: function (node) {\n if (node = node.firstChild) {\n do {\n walk(node);\n } while (node = node.next);\n }\n }\n };\n writer.reset();\n var walk = function (node) {\n var handler = handlers[node.type];\n if (!handler) {\n var name_1 = node.name;\n var isEmpty = node.shortEnded;\n var attrs = node.attributes;\n if (validate && attrs && attrs.length > 1) {\n var sortedAttrs = [];\n sortedAttrs.map = {};\n var elementRule = schema.getElementRule(node.name);\n if (elementRule) {\n for (var i = 0, l = elementRule.attributesOrder.length; i < l; i++) {\n var attrName = elementRule.attributesOrder[i];\n if (attrName in attrs.map) {\n var attrValue = attrs.map[attrName];\n sortedAttrs.map[attrName] = attrValue;\n sortedAttrs.push({\n name: attrName,\n value: attrValue\n });\n }\n }\n for (var i = 0, l = attrs.length; i < l; i++) {\n var attrName = attrs[i].name;\n if (!(attrName in sortedAttrs.map)) {\n var 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(node.name, attrs, isEmpty);\n if (!isEmpty) {\n if (node = node.firstChild) {\n do {\n walk(node);\n } while (node = node.next);\n }\n writer.end(name_1);\n }\n } else {\n handler(node);\n }\n };\n if (node.type === 1 && !settings.inner) {\n walk(node);\n } else {\n handlers[11](node);\n }\n return writer.getContent();\n };\n return { serialize: serialize };\n };\n\n var nonInheritableStyles = new Set();\n (function () {\n var nonInheritableStylesArr = [\n 'margin',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'margin-bottom',\n 'padding',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'padding-bottom',\n 'border',\n 'border-width',\n 'border-style',\n 'border-color',\n 'background',\n 'background-attachment',\n 'background-clip',\n 'background-color',\n 'background-image',\n 'background-origin',\n 'background-position',\n 'background-repeat',\n 'background-size',\n 'float',\n 'position',\n 'left',\n 'right',\n 'top',\n 'bottom',\n 'z-index',\n 'display',\n 'transform',\n 'width',\n 'max-width',\n 'min-width',\n 'height',\n 'max-height',\n 'min-height',\n 'overflow',\n 'overflow-x',\n 'overflow-y',\n 'text-overflow',\n 'vertical-align',\n 'transition',\n 'transition-delay',\n 'transition-duration',\n 'transition-property',\n 'transition-timing-function'\n ];\n each$k(nonInheritableStylesArr, function (style) {\n nonInheritableStyles.add(style);\n });\n }());\n var shorthandStyleProps = [\n 'font',\n 'text-decoration',\n 'text-emphasis'\n ];\n var getStyleProps = function (dom, node) {\n return keys(dom.parseStyle(dom.getAttrib(node, 'style')));\n };\n var isNonInheritableStyle = function (style) {\n return nonInheritableStyles.has(style);\n };\n var hasInheritableStyles = function (dom, node) {\n return forall(getStyleProps(dom, node), function (style) {\n return !isNonInheritableStyle(style);\n });\n };\n var getLonghandStyleProps = function (styles) {\n return filter$4(styles, function (style) {\n return exists(shorthandStyleProps, function (prop) {\n return startsWith(style, prop);\n });\n });\n };\n var hasStyleConflict = function (dom, node, parentNode) {\n var nodeStyleProps = getStyleProps(dom, node);\n var parentNodeStyleProps = getStyleProps(dom, parentNode);\n var valueMismatch = function (prop) {\n var nodeValue = dom.getStyle(node, prop);\n var parentValue = dom.getStyle(parentNode, prop);\n return isNotEmpty(nodeValue) && isNotEmpty(parentValue) && nodeValue !== parentValue;\n };\n return exists(nodeStyleProps, function (nodeStyleProp) {\n var propExists = function (props) {\n return exists(props, function (prop) {\n return prop === nodeStyleProp;\n });\n };\n if (!propExists(parentNodeStyleProps) && propExists(shorthandStyleProps)) {\n var longhandProps = getLonghandStyleProps(parentNodeStyleProps);\n return exists(longhandProps, valueMismatch);\n } else {\n return valueMismatch(nodeStyleProp);\n }\n });\n };\n\n var isChar = function (forward, predicate, pos) {\n return Optional.from(pos.container()).filter(isText$7).exists(function (text) {\n var delta = forward ? 0 : -1;\n return predicate(text.data.charAt(pos.offset() + delta));\n });\n };\n var isBeforeSpace = curry(isChar, true, isWhiteSpace);\n var isAfterSpace = curry(isChar, false, isWhiteSpace);\n var isEmptyText = function (pos) {\n var container = pos.container();\n return isText$7(container) && (container.data.length === 0 || isZwsp(container.data) && BookmarkManager.isBookmarkNode(container.parentNode));\n };\n var matchesElementPosition = function (before, predicate) {\n return function (pos) {\n return Optional.from(getChildNodeAtRelativeOffset(before ? 0 : -1, pos)).filter(predicate).isSome();\n };\n };\n var isImageBlock = function (node) {\n return isImg(node) && get$5(SugarElement.fromDom(node), 'display') === 'block';\n };\n var isCefNode = function (node) {\n return isContentEditableFalse$b(node) && !isBogusAll$1(node);\n };\n var isBeforeImageBlock = matchesElementPosition(true, isImageBlock);\n var isAfterImageBlock = matchesElementPosition(false, isImageBlock);\n var isBeforeMedia = matchesElementPosition(true, isMedia$2);\n var isAfterMedia = matchesElementPosition(false, isMedia$2);\n var isBeforeTable = matchesElementPosition(true, isTable$3);\n var isAfterTable = matchesElementPosition(false, isTable$3);\n var isBeforeContentEditableFalse = matchesElementPosition(true, isCefNode);\n var isAfterContentEditableFalse = matchesElementPosition(false, isCefNode);\n\n var getLastChildren = function (elm) {\n var children = [];\n var rawNode = elm.dom;\n while (rawNode) {\n children.push(SugarElement.fromDom(rawNode));\n rawNode = rawNode.lastChild;\n }\n return children;\n };\n var removeTrailingBr = function (elm) {\n var allBrs = descendants(elm, 'br');\n var brs = filter$4(getLastChildren(elm).slice(-1), isBr$4);\n if (allBrs.length === brs.length) {\n each$k(brs, remove$7);\n }\n };\n var fillWithPaddingBr = function (elm) {\n empty(elm);\n append$1(elm, SugarElement.fromHtml('
'));\n };\n var trimBlockTrailingBr = function (elm) {\n lastChild(elm).each(function (lastChild) {\n prevSibling(lastChild).each(function (lastChildPrevSibling) {\n if (isBlock$2(elm) && isBr$4(lastChild) && isBlock$2(lastChildPrevSibling)) {\n remove$7(lastChild);\n }\n });\n });\n };\n\n var dropLast = function (xs) {\n return xs.slice(0, -1);\n };\n var parentsUntil = function (start, root, predicate) {\n if (contains$1(root, start)) {\n return dropLast(parents$1(start, function (elm) {\n return predicate(elm) || eq(elm, root);\n }));\n } else {\n return [];\n }\n };\n var parents = function (start, root) {\n return parentsUntil(start, root, never);\n };\n var parentsAndSelf = function (start, root) {\n return [start].concat(parents(start, root));\n };\n\n var navigateIgnoreEmptyTextNodes = function (forward, root, from) {\n return navigateIgnore(forward, root, from, isEmptyText);\n };\n var getClosestBlock$1 = function (root, pos) {\n return find$3(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock$2);\n };\n var isAtBeforeAfterBlockBoundary = function (forward, root, pos) {\n return navigateIgnoreEmptyTextNodes(forward, root.dom, pos).forall(function (newPos) {\n return getClosestBlock$1(root, pos).fold(function () {\n return isInSameBlock(newPos, pos, root.dom) === false;\n }, function (fromBlock) {\n return isInSameBlock(newPos, pos, root.dom) === false && contains$1(fromBlock, SugarElement.fromDom(newPos.container()));\n });\n });\n };\n var isAtBlockBoundary = function (forward, root, pos) {\n return getClosestBlock$1(root, pos).fold(function () {\n return navigateIgnoreEmptyTextNodes(forward, root.dom, pos).forall(function (newPos) {\n return isInSameBlock(newPos, pos, root.dom) === false;\n });\n }, function (parent) {\n return navigateIgnoreEmptyTextNodes(forward, parent.dom, pos).isNone();\n });\n };\n var isAtStartOfBlock = curry(isAtBlockBoundary, false);\n var isAtEndOfBlock = curry(isAtBlockBoundary, true);\n var isBeforeBlock = curry(isAtBeforeAfterBlockBoundary, false);\n var isAfterBlock = curry(isAtBeforeAfterBlockBoundary, true);\n\n var isBr = function (pos) {\n return getElementFromPosition(pos).exists(isBr$4);\n };\n var findBr = function (forward, root, pos) {\n var parentBlocks = filter$4(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock$2);\n var scope = head(parentBlocks).getOr(root);\n return fromPosition(forward, scope.dom, pos).filter(isBr);\n };\n var isBeforeBr$1 = function (root, pos) {\n return getElementFromPosition(pos).exists(isBr$4) || findBr(true, root, pos).isSome();\n };\n var isAfterBr = function (root, pos) {\n return getElementFromPrevPosition(pos).exists(isBr$4) || findBr(false, root, pos).isSome();\n };\n var findPreviousBr = curry(findBr, false);\n var findNextBr = curry(findBr, true);\n\n var isInMiddleOfText = function (pos) {\n return CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd();\n };\n var getClosestBlock = function (root, pos) {\n var parentBlocks = filter$4(parentsAndSelf(SugarElement.fromDom(pos.container()), root), isBlock$2);\n return head(parentBlocks).getOr(root);\n };\n var hasSpaceBefore = function (root, pos) {\n if (isInMiddleOfText(pos)) {\n return isAfterSpace(pos);\n } else {\n return isAfterSpace(pos) || prevPosition(getClosestBlock(root, pos).dom, pos).exists(isAfterSpace);\n }\n };\n var hasSpaceAfter = function (root, pos) {\n if (isInMiddleOfText(pos)) {\n return isBeforeSpace(pos);\n } else {\n return isBeforeSpace(pos) || nextPosition(getClosestBlock(root, pos).dom, pos).exists(isBeforeSpace);\n }\n };\n var isPreValue = function (value) {\n return contains$3([\n 'pre',\n 'pre-wrap'\n ], value);\n };\n var isInPre = function (pos) {\n return getElementFromPosition(pos).bind(function (elm) {\n return closest$3(elm, isElement$6);\n }).exists(function (elm) {\n return isPreValue(get$5(elm, 'white-space'));\n });\n };\n var isAtBeginningOfBody = function (root, pos) {\n return prevPosition(root.dom, pos).isNone();\n };\n var isAtEndOfBody = function (root, pos) {\n return nextPosition(root.dom, pos).isNone();\n };\n var isAtLineBoundary = function (root, pos) {\n return isAtBeginningOfBody(root, pos) || isAtEndOfBody(root, pos) || isAtStartOfBlock(root, pos) || isAtEndOfBlock(root, pos) || isAfterBr(root, pos) || isBeforeBr$1(root, pos);\n };\n var needsToHaveNbsp = function (root, pos) {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtLineBoundary(root, pos) || hasSpaceBefore(root, pos) || hasSpaceAfter(root, pos);\n }\n };\n var needsToBeNbspLeft = function (root, pos) {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtStartOfBlock(root, pos) || isBeforeBlock(root, pos) || isAfterBr(root, pos) || hasSpaceBefore(root, pos);\n }\n };\n var leanRight = function (pos) {\n var container = pos.container();\n var offset = pos.offset();\n if (isText$7(container) && offset < container.data.length) {\n return CaretPosition(container, offset + 1);\n } else {\n return pos;\n }\n };\n var needsToBeNbspRight = function (root, pos) {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtEndOfBlock(root, pos) || isAfterBlock(root, pos) || isBeforeBr$1(root, pos) || hasSpaceAfter(root, pos);\n }\n };\n var needsToBeNbsp = function (root, pos) {\n return needsToBeNbspLeft(root, pos) || needsToBeNbspRight(root, leanRight(pos));\n };\n var isNbspAt = function (text, offset) {\n return isNbsp(text.charAt(offset));\n };\n var hasNbsp = function (pos) {\n var container = pos.container();\n return isText$7(container) && contains$2(container.data, nbsp);\n };\n var normalizeNbspMiddle = function (text) {\n var chars = text.split('');\n return map$3(chars, function (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 var normalizeNbspAtStart = function (root, node) {\n var text = node.data;\n var firstPos = CaretPosition(node, 0);\n if (isNbspAt(text, 0) && !needsToBeNbsp(root, firstPos)) {\n node.data = ' ' + text.slice(1);\n return true;\n } else {\n return false;\n }\n };\n var normalizeNbspInMiddleOfTextNode = function (node) {\n var text = node.data;\n var newText = normalizeNbspMiddle(text);\n if (newText !== text) {\n node.data = newText;\n return true;\n } else {\n return false;\n }\n };\n var normalizeNbspAtEnd = function (root, node) {\n var text = node.data;\n var lastPos = CaretPosition(node, text.length - 1);\n if (isNbspAt(text, text.length - 1) && !needsToBeNbsp(root, lastPos)) {\n node.data = text.slice(0, -1) + ' ';\n return true;\n } else {\n return false;\n }\n };\n var normalizeNbsps = function (root, pos) {\n return Optional.some(pos).filter(hasNbsp).bind(function (pos) {\n var container = pos.container();\n var normalized = normalizeNbspAtStart(root, container) || normalizeNbspInMiddleOfTextNode(container) || normalizeNbspAtEnd(root, container);\n return normalized ? Optional.some(pos) : Optional.none();\n });\n };\n var normalizeNbspsInEditor = function (editor) {\n var root = SugarElement.fromDom(editor.getBody());\n if (editor.selection.isCollapsed()) {\n normalizeNbsps(root, CaretPosition.fromRangeStart(editor.selection.getRng())).each(function (pos) {\n editor.selection.setRng(pos.toRange());\n });\n }\n };\n\n var normalizeContent = function (content, isStartOfContent, isEndOfContent) {\n var result = foldl(content, function (acc, c) {\n if (isWhiteSpace(c) || isNbsp(c)) {\n if (acc.previousCharIsSpace || acc.str === '' && isStartOfContent || acc.str.length === content.length - 1 && isEndOfContent) {\n return {\n previousCharIsSpace: false,\n str: acc.str + nbsp\n };\n } else {\n return {\n previousCharIsSpace: true,\n str: acc.str + ' '\n };\n }\n } else {\n return {\n previousCharIsSpace: false,\n str: acc.str + c\n };\n }\n }, {\n previousCharIsSpace: false,\n str: ''\n });\n return result.str;\n };\n var normalize$1 = function (node, offset, count) {\n if (count === 0) {\n return;\n }\n var elm = SugarElement.fromDom(node);\n var root = ancestor$3(elm, isBlock$2).getOr(elm);\n var whitespace = node.data.slice(offset, offset + count);\n var isEndOfContent = offset + count >= node.data.length && needsToBeNbspRight(root, CaretPosition(node, node.data.length));\n var isStartOfContent = offset === 0 && needsToBeNbspLeft(root, CaretPosition(node, 0));\n node.replaceData(offset, count, normalizeContent(whitespace, isStartOfContent, isEndOfContent));\n };\n var normalizeWhitespaceAfter = function (node, offset) {\n var content = node.data.slice(offset);\n var whitespaceCount = content.length - lTrim(content).length;\n normalize$1(node, offset, whitespaceCount);\n };\n var normalizeWhitespaceBefore = function (node, offset) {\n var content = node.data.slice(0, offset);\n var whitespaceCount = content.length - rTrim(content).length;\n normalize$1(node, offset - whitespaceCount, whitespaceCount);\n };\n var mergeTextNodes = function (prevNode, nextNode, normalizeWhitespace, mergeToPrev) {\n if (mergeToPrev === void 0) {\n mergeToPrev = true;\n }\n var whitespaceOffset = rTrim(prevNode.data).length;\n var newNode = mergeToPrev ? prevNode : nextNode;\n var removeNode = mergeToPrev ? nextNode : prevNode;\n if (mergeToPrev) {\n newNode.appendData(removeNode.data);\n } else {\n newNode.insertData(0, removeNode.data);\n }\n remove$7(SugarElement.fromDom(removeNode));\n if (normalizeWhitespace) {\n normalizeWhitespaceAfter(newNode, whitespaceOffset);\n }\n return newNode;\n };\n\n var needsReposition = function (pos, elm) {\n var container = pos.container();\n var offset = pos.offset();\n return CaretPosition.isTextPosition(pos) === false && container === elm.parentNode && offset > CaretPosition.before(elm).offset();\n };\n var reposition = function (elm, pos) {\n return needsReposition(pos, elm) ? CaretPosition(pos.container(), pos.offset() - 1) : pos;\n };\n var beforeOrStartOf = function (node) {\n return isText$7(node) ? CaretPosition(node, 0) : CaretPosition.before(node);\n };\n var afterOrEndOf = function (node) {\n return isText$7(node) ? CaretPosition(node, node.data.length) : CaretPosition.after(node);\n };\n var getPreviousSiblingCaretPosition = function (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 var getNextSiblingCaretPosition = function (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 var findCaretPositionBackwardsFromElm = function (rootElement, elm) {\n var startPosition = CaretPosition.before(elm.previousSibling ? elm.previousSibling : elm.parentNode);\n return prevPosition(rootElement, startPosition).fold(function () {\n return nextPosition(rootElement, CaretPosition.after(elm));\n }, Optional.some);\n };\n var findCaretPositionForwardsFromElm = function (rootElement, elm) {\n return nextPosition(rootElement, CaretPosition.after(elm)).fold(function () {\n return prevPosition(rootElement, CaretPosition.before(elm));\n }, Optional.some);\n };\n var findCaretPositionBackwards = function (rootElement, elm) {\n return getPreviousSiblingCaretPosition(elm).orThunk(function () {\n return getNextSiblingCaretPosition(elm);\n }).orThunk(function () {\n return findCaretPositionBackwardsFromElm(rootElement, elm);\n });\n };\n var findCaretPositionForward = function (rootElement, elm) {\n return getNextSiblingCaretPosition(elm).orThunk(function () {\n return getPreviousSiblingCaretPosition(elm);\n }).orThunk(function () {\n return findCaretPositionForwardsFromElm(rootElement, elm);\n });\n };\n var findCaretPosition = function (forward, rootElement, elm) {\n return forward ? findCaretPositionForward(rootElement, elm) : findCaretPositionBackwards(rootElement, elm);\n };\n var findCaretPosOutsideElmAfterDelete = function (forward, rootElement, elm) {\n return findCaretPosition(forward, rootElement, elm).map(curry(reposition, elm));\n };\n var setSelection$1 = function (editor, forward, pos) {\n pos.fold(function () {\n editor.focus();\n }, function (pos) {\n editor.selection.setRng(pos.toRange(), forward);\n });\n };\n var eqRawNode = function (rawNode) {\n return function (elm) {\n return elm.dom === rawNode;\n };\n };\n var isBlock = function (editor, elm) {\n return elm && has$2(editor.schema.getBlockElements(), name(elm));\n };\n var paddEmptyBlock = function (elm) {\n if (isEmpty$2(elm)) {\n var br = SugarElement.fromHtml('
');\n empty(elm);\n append$1(elm, br);\n return Optional.some(CaretPosition.before(br.dom));\n } else {\n return Optional.none();\n }\n };\n var deleteNormalized = function (elm, afterDeletePosOpt, normalizeWhitespace) {\n var prevTextOpt = prevSibling(elm).filter(isText$8);\n var nextTextOpt = nextSibling(elm).filter(isText$8);\n remove$7(elm);\n return lift3(prevTextOpt, nextTextOpt, afterDeletePosOpt, function (prev, next, pos) {\n var prevNode = prev.dom, nextNode = next.dom;\n var offset = prevNode.data.length;\n mergeTextNodes(prevNode, nextNode, normalizeWhitespace);\n return pos.container() === nextNode ? CaretPosition(prevNode, offset) : pos;\n }).orThunk(function () {\n if (normalizeWhitespace) {\n prevTextOpt.each(function (elm) {\n return normalizeWhitespaceBefore(elm.dom, elm.dom.length);\n });\n nextTextOpt.each(function (elm) {\n return normalizeWhitespaceAfter(elm.dom, 0);\n });\n }\n return afterDeletePosOpt;\n });\n };\n var isInlineElement = function (editor, element) {\n return has$2(editor.schema.getTextInlineElements(), name(element));\n };\n var deleteElement$2 = function (editor, forward, elm, moveCaret) {\n if (moveCaret === void 0) {\n moveCaret = true;\n }\n var afterDeletePos = findCaretPosOutsideElmAfterDelete(forward, editor.getBody(), elm.dom);\n var parentBlock = ancestor$3(elm, curry(isBlock, editor), eqRawNode(editor.getBody()));\n var normalizedAfterDeletePos = deleteNormalized(elm, afterDeletePos, isInlineElement(editor, elm));\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n } else {\n parentBlock.bind(paddEmptyBlock).fold(function () {\n if (moveCaret) {\n setSelection$1(editor, forward, normalizedAfterDeletePos);\n }\n }, function (paddPos) {\n if (moveCaret) {\n setSelection$1(editor, forward, Optional.some(paddPos));\n }\n });\n }\n };\n\n var isRootFromElement = function (root) {\n return function (cur) {\n return eq(root, cur);\n };\n };\n var getTableCells = function (table) {\n return descendants(table, 'td,th');\n };\n var getTableDetailsFromRange = function (rng, isRoot) {\n var getTable = function (node) {\n return getClosestTable(SugarElement.fromDom(node), isRoot);\n };\n var startTable = getTable(rng.startContainer);\n var endTable = getTable(rng.endContainer);\n var isStartInTable = startTable.isSome();\n var isEndInTable = endTable.isSome();\n var isSameTable = lift2(startTable, endTable, eq).getOr(false);\n var isMultiTable = !isSameTable && isStartInTable && isEndInTable;\n return {\n startTable: startTable,\n endTable: endTable,\n isStartInTable: isStartInTable,\n isEndInTable: isEndInTable,\n isSameTable: isSameTable,\n isMultiTable: isMultiTable\n };\n };\n\n var tableCellRng = function (start, end) {\n return {\n start: start,\n end: end\n };\n };\n var tableSelection = function (rng, table, cells) {\n return {\n rng: rng,\n table: table,\n cells: cells\n };\n };\n var 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 var getClosestCell$1 = function (container, isRoot) {\n return closest$2(SugarElement.fromDom(container), 'td,th', isRoot);\n };\n var isExpandedCellRng = function (cellRng) {\n return !eq(cellRng.start, cellRng.end);\n };\n var getTableFromCellRng = function (cellRng, isRoot) {\n return getClosestTable(cellRng.start, isRoot).bind(function (startParentTable) {\n return getClosestTable(cellRng.end, isRoot).bind(function (endParentTable) {\n return someIf(eq(startParentTable, endParentTable), startParentTable);\n });\n });\n };\n var isSingleCellTable = function (cellRng, isRoot) {\n return !isExpandedCellRng(cellRng) && getTableFromCellRng(cellRng, isRoot).exists(function (table) {\n var rows = table.dom.rows;\n return rows.length === 1 && rows[0].cells.length === 1;\n });\n };\n var getCellRng = function (rng, isRoot) {\n var startCell = getClosestCell$1(rng.startContainer, isRoot);\n var endCell = getClosestCell$1(rng.endContainer, isRoot);\n return lift2(startCell, endCell, tableCellRng);\n };\n var getCellRangeFromStartTable = function (isRoot) {\n return function (startCell) {\n return getClosestTable(startCell, isRoot).bind(function (table) {\n return last$2(getTableCells(table)).map(function (endCell) {\n return tableCellRng(startCell, endCell);\n });\n });\n };\n };\n var getCellRangeFromEndTable = function (isRoot) {\n return function (endCell) {\n return getClosestTable(endCell, isRoot).bind(function (table) {\n return head(getTableCells(table)).map(function (startCell) {\n return tableCellRng(startCell, endCell);\n });\n });\n };\n };\n var getTableSelectionFromCellRng = function (isRoot) {\n return function (cellRng) {\n return getTableFromCellRng(cellRng, isRoot).map(function (table) {\n return tableSelection(cellRng, table, getTableCells(table));\n });\n };\n };\n var getTableSelections = function (cellRng, selectionDetails, rng, isRoot) {\n if (rng.collapsed || !cellRng.forall(isExpandedCellRng)) {\n return Optional.none();\n } else if (selectionDetails.isSameTable) {\n var sameTableSelection = cellRng.bind(getTableSelectionFromCellRng(isRoot));\n return Optional.some({\n start: sameTableSelection,\n end: sameTableSelection\n });\n } else {\n var startCell = getClosestCell$1(rng.startContainer, isRoot);\n var endCell = getClosestCell$1(rng.endContainer, isRoot);\n var startTableSelection = startCell.bind(getCellRangeFromStartTable(isRoot)).bind(getTableSelectionFromCellRng(isRoot));\n var endTableSelection = endCell.bind(getCellRangeFromEndTable(isRoot)).bind(getTableSelectionFromCellRng(isRoot));\n return Optional.some({\n start: startTableSelection,\n end: endTableSelection\n });\n }\n };\n var getCellIndex = function (cells, cell) {\n return findIndex$2(cells, function (x) {\n return eq(x, cell);\n });\n };\n var getSelectedCells = function (tableSelection) {\n return lift2(getCellIndex(tableSelection.cells, tableSelection.rng.start), getCellIndex(tableSelection.cells, tableSelection.rng.end), function (startIndex, endIndex) {\n return tableSelection.cells.slice(startIndex, endIndex + 1);\n });\n };\n var isSingleCellTableContentSelected = function (optCellRng, rng, isRoot) {\n return optCellRng.exists(function (cellRng) {\n return isSingleCellTable(cellRng, isRoot) && hasAllContentsSelected(cellRng.start, rng);\n });\n };\n var unselectCells = function (rng, selectionDetails) {\n var startTable = selectionDetails.startTable, endTable = selectionDetails.endTable;\n var otherContentRng = rng.cloneRange();\n startTable.each(function (table) {\n return otherContentRng.setStartAfter(table.dom);\n });\n endTable.each(function (table) {\n return otherContentRng.setEndBefore(table.dom);\n });\n return otherContentRng;\n };\n var handleSingleTable = function (cellRng, selectionDetails, rng, isRoot) {\n return getTableSelections(cellRng, selectionDetails, rng, isRoot).bind(function (_a) {\n var start = _a.start, end = _a.end;\n return start.or(end);\n }).bind(function (tableSelection) {\n var isSameTable = selectionDetails.isSameTable;\n var 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 var otherContentRng = unselectCells(rng, selectionDetails);\n return Optional.some(deleteAction.partialTable(selectedCells, Optional.some(__assign(__assign({}, selectionDetails), { rng: otherContentRng }))));\n }\n } else {\n return Optional.none();\n }\n });\n };\n var handleMultiTable = function (cellRng, selectionDetails, rng, isRoot) {\n return getTableSelections(cellRng, selectionDetails, rng, isRoot).bind(function (_a) {\n var start = _a.start, end = _a.end;\n var startTableSelectedCells = start.bind(getSelectedCells).getOr([]);\n var endTableSelectedCells = end.bind(getSelectedCells).getOr([]);\n if (startTableSelectedCells.length > 0 && endTableSelectedCells.length > 0) {\n var otherContentRng = unselectCells(rng, selectionDetails);\n return Optional.some(deleteAction.multiTable(startTableSelectedCells, endTableSelectedCells, otherContentRng));\n } else {\n return Optional.none();\n }\n });\n };\n var getActionFromRange = function (root, rng) {\n var isRoot = isRootFromElement(root);\n var optCellRng = getCellRng(rng, isRoot);\n var selectionDetails = getTableDetailsFromRange(rng, isRoot);\n if (isSingleCellTableContentSelected(optCellRng, rng, isRoot)) {\n return optCellRng.map(function (cellRng) {\n return deleteAction.singleCellTable(rng, cellRng.start);\n });\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 var freefallRtl = function (root) {\n var child = isComment$1(root) ? prevSibling(root) : lastChild(root);\n return child.bind(freefallRtl).orThunk(function () {\n return Optional.some(root);\n });\n };\n var cleanCells = function (cells) {\n return each$k(cells, function (cell) {\n remove$6(cell, 'contenteditable');\n fillWithPaddingBr(cell);\n });\n };\n var getOutsideBlock = function (editor, container) {\n return Optional.from(editor.dom.getParent(container, editor.dom.isBlock)).map(SugarElement.fromDom);\n };\n var handleEmptyBlock = function (editor, startInTable, emptyBlock) {\n emptyBlock.each(function (block) {\n if (startInTable) {\n remove$7(block);\n } else {\n fillWithPaddingBr(block);\n editor.selection.setCursorLocation(block.dom, 0);\n }\n });\n };\n var deleteContentInsideCell = function (editor, cell, rng, isFirstCellInSelection) {\n var 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);\n };\n var collapseAndRestoreCellSelection = function (editor) {\n var selectedCells = getCellsFromEditor(editor);\n var selectedNode = SugarElement.fromDom(editor.selection.getNode());\n if (isTableCell$5(selectedNode.dom) && isEmpty$2(selectedNode)) {\n editor.selection.setCursorLocation(selectedNode.dom, 0);\n } else {\n editor.selection.collapse(true);\n }\n if (selectedCells.length > 1 && exists(selectedCells, function (cell) {\n return eq(cell, selectedNode);\n })) {\n set$1(selectedNode, 'data-mce-selected', '1');\n }\n };\n var emptySingleTableCells = function (editor, cells, outsideDetails) {\n var editorRng = editor.selection.getRng();\n var cellsToClean = outsideDetails.bind(function (_a) {\n var rng = _a.rng, isStartInTable = _a.isStartInTable;\n var outsideBlock = getOutsideBlock(editor, isStartInTable ? rng.endContainer : rng.startContainer);\n rng.deleteContents();\n handleEmptyBlock(editor, isStartInTable, outsideBlock.filter(isEmpty$2));\n var endPointCell = isStartInTable ? cells[0] : cells[cells.length - 1];\n deleteContentInsideCell(editor, endPointCell, editorRng, isStartInTable);\n if (!isEmpty$2(endPointCell)) {\n return Optional.some(isStartInTable ? cells.slice(1) : cells.slice(0, -1));\n } else {\n return Optional.none();\n }\n }).getOr(cells);\n cleanCells(cellsToClean);\n collapseAndRestoreCellSelection(editor);\n return true;\n };\n var emptyMultiTableCells = function (editor, startTableCells, endTableCells, betweenRng) {\n var rng = editor.selection.getRng();\n var startCell = startTableCells[0];\n var endCell = endTableCells[endTableCells.length - 1];\n deleteContentInsideCell(editor, startCell, rng, true);\n deleteContentInsideCell(editor, endCell, rng, false);\n var startTableCellsToClean = isEmpty$2(startCell) ? startTableCells : startTableCells.slice(1);\n var endTableCellsToClean = isEmpty$2(endCell) ? endTableCells : endTableCells.slice(0, -1);\n cleanCells(startTableCellsToClean.concat(endTableCellsToClean));\n betweenRng.deleteContents();\n collapseAndRestoreCellSelection(editor);\n return true;\n };\n var deleteCellContents = function (editor, rng, cell, moveSelection) {\n if (moveSelection === void 0) {\n moveSelection = true;\n }\n rng.deleteContents();\n var lastNode = freefallRtl(cell).getOr(cell);\n var lastBlock = SugarElement.fromDom(editor.dom.getParent(lastNode.dom, editor.dom.isBlock));\n if (isEmpty$2(lastBlock)) {\n fillWithPaddingBr(lastBlock);\n if (moveSelection) {\n editor.selection.setCursorLocation(lastBlock.dom, 0);\n }\n }\n if (!eq(cell, lastBlock)) {\n var additionalCleanupNodes = is$1(parent(lastBlock), cell) ? [] : siblings(lastBlock);\n each$k(additionalCleanupNodes.concat(children(cell)), function (node) {\n if (!eq(node, lastBlock) && !contains$1(node, lastBlock) && isEmpty$2(node)) {\n remove$7(node);\n }\n });\n }\n return true;\n };\n var deleteTableElement = function (editor, table) {\n deleteElement$2(editor, false, table);\n return true;\n };\n var deleteCellRange = function (editor, rootElm, rng) {\n return getActionFromRange(rootElm, rng).map(function (action) {\n return action.fold(curry(deleteCellContents, editor), curry(deleteTableElement, editor), curry(emptySingleTableCells, editor), curry(emptyMultiTableCells, editor));\n });\n };\n var deleteCaptionRange = function (editor, caption) {\n return emptyElement(editor, caption);\n };\n var deleteTableRange = function (editor, rootElm, rng, startElm) {\n return getParentCaption(rootElm, startElm).fold(function () {\n return deleteCellRange(editor, rootElm, rng);\n }, function (caption) {\n return deleteCaptionRange(editor, caption);\n }).getOr(false);\n };\n var deleteRange$2 = function (editor, startElm, selectedCells) {\n var rootNode = SugarElement.fromDom(editor.getBody());\n var rng = editor.selection.getRng();\n return selectedCells.length !== 0 ? emptySingleTableCells(editor, selectedCells, Optional.none()) : deleteTableRange(editor, rootNode, rng, startElm);\n };\n var getParentCell = function (rootElm, elm) {\n return find$3(parentsAndSelf(elm, rootElm), isTableCell$4);\n };\n var getParentCaption = function (rootElm, elm) {\n return find$3(parentsAndSelf(elm, rootElm), isTag('caption'));\n };\n var deleteBetweenCells = function (editor, rootElm, forward, fromCell, from) {\n return navigate(forward, editor.getBody(), from).bind(function (to) {\n return getParentCell(rootElm, SugarElement.fromDom(to.getNode())).map(function (toCell) {\n return eq(toCell, fromCell) === false;\n });\n });\n };\n var emptyElement = function (editor, elm) {\n fillWithPaddingBr(elm);\n editor.selection.setCursorLocation(elm.dom, 0);\n return Optional.some(true);\n };\n var isDeleteOfLastCharPos = function (fromCaption, forward, from, to) {\n return firstPositionIn(fromCaption.dom).bind(function (first) {\n return lastPositionIn(fromCaption.dom).map(function (last) {\n return forward ? from.isEqual(first) && to.isEqual(last) : from.isEqual(last) && to.isEqual(first);\n });\n }).getOr(true);\n };\n var emptyCaretCaption = function (editor, elm) {\n return emptyElement(editor, elm);\n };\n var validateCaretCaption = function (rootElm, fromCaption, to) {\n return getParentCaption(rootElm, SugarElement.fromDom(to.getNode())).map(function (toCaption) {\n return eq(toCaption, fromCaption) === false;\n });\n };\n var deleteCaretInsideCaption = function (editor, rootElm, forward, fromCaption, from) {\n return navigate(forward, editor.getBody(), from).bind(function (to) {\n return isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to);\n }).or(Optional.some(true));\n };\n var deleteCaretCells = function (editor, forward, rootElm, startElm) {\n var from = CaretPosition.fromRangeStart(editor.selection.getRng());\n return getParentCell(rootElm, startElm).bind(function (fromCell) {\n return isEmpty$2(fromCell) ? emptyElement(editor, fromCell) : deleteBetweenCells(editor, rootElm, forward, fromCell, from);\n }).getOr(false);\n };\n var deleteCaretCaption = function (editor, forward, rootElm, fromCaption) {\n var from = CaretPosition.fromRangeStart(editor.selection.getRng());\n return isEmpty$2(fromCaption) ? emptyElement(editor, fromCaption) : deleteCaretInsideCaption(editor, rootElm, forward, fromCaption, from);\n };\n var isNearTable = function (forward, pos) {\n return forward ? isBeforeTable(pos) : isAfterTable(pos);\n };\n var isBeforeOrAfterTable = function (editor, forward) {\n var fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n return isNearTable(forward, fromPos) || fromPosition(forward, editor.getBody(), fromPos).exists(function (pos) {\n return isNearTable(forward, pos);\n });\n };\n var deleteCaret$3 = function (editor, forward, startElm) {\n var rootElm = SugarElement.fromDom(editor.getBody());\n return getParentCaption(rootElm, startElm).fold(function () {\n return deleteCaretCells(editor, forward, rootElm, startElm) || isBeforeOrAfterTable(editor, forward);\n }, function (fromCaption) {\n return deleteCaretCaption(editor, forward, rootElm, fromCaption).getOr(false);\n });\n };\n var backspaceDelete$9 = function (editor, forward) {\n var startElm = SugarElement.fromDom(editor.selection.getStart(true));\n var cells = getCellsFromEditor(editor);\n return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret$3(editor, forward, startElm) : deleteRange$2(editor, startElm, cells);\n };\n\n var createRange = function (sc, so, ec, eo) {\n var rng = document.createRange();\n rng.setStart(sc, so);\n rng.setEnd(ec, eo);\n return rng;\n };\n var normalizeBlockSelectionRange = function (rng) {\n var startPos = CaretPosition.fromRangeStart(rng);\n var endPos = CaretPosition.fromRangeEnd(rng);\n var rootNode = rng.commonAncestorContainer;\n return fromPosition(false, rootNode, endPos).map(function (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 var normalize = function (rng) {\n return rng.collapsed ? rng : normalizeBlockSelectionRange(rng);\n };\n\n var hasOnlyOneChild$1 = function (node) {\n return node.firstChild && node.firstChild === node.lastChild;\n };\n var isPaddingNode = function (node) {\n return node.name === 'br' || node.value === nbsp;\n };\n var isPaddedEmptyBlock = function (schema, node) {\n var blockElements = schema.getBlockElements();\n return blockElements[node.name] && hasOnlyOneChild$1(node) && isPaddingNode(node.firstChild);\n };\n var isEmptyFragmentElement = function (schema, node) {\n var nonEmptyElements = schema.getNonEmptyElements();\n return node && (node.isEmpty(nonEmptyElements) || isPaddedEmptyBlock(schema, node));\n };\n var isListFragment = function (schema, fragment) {\n var firstChild = fragment.firstChild;\n var 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.prev;\n }\n if (!firstChild || firstChild !== lastChild) {\n return false;\n }\n return firstChild.name === 'ul' || firstChild.name === 'ol';\n };\n var cleanupDomFragment = function (domFragment) {\n var firstChild = domFragment.firstChild;\n var lastChild = domFragment.lastChild;\n if (firstChild && firstChild.nodeName === 'META') {\n firstChild.parentNode.removeChild(firstChild);\n }\n if (lastChild && lastChild.id === 'mce_marker') {\n lastChild.parentNode.removeChild(lastChild);\n }\n return domFragment;\n };\n var toDomFragment = function (dom, serializer, fragment) {\n var html = serializer.serialize(fragment);\n var domFragment = dom.createFragment(html);\n return cleanupDomFragment(domFragment);\n };\n var listItems = function (elm) {\n return filter$4(elm.childNodes, function (child) {\n return child.nodeName === 'LI';\n });\n };\n var isPadding = function (node) {\n return node.data === nbsp || isBr$5(node);\n };\n var isListItemPadded = function (node) {\n return node && node.firstChild && node.firstChild === node.lastChild && isPadding(node.firstChild);\n };\n var isEmptyOrPadded = function (elm) {\n return !elm.firstChild || isListItemPadded(elm);\n };\n var trimListItems = function (elms) {\n return elms.length > 0 && isEmptyOrPadded(elms[elms.length - 1]) ? elms.slice(0, -1) : elms;\n };\n var getParentLi = function (dom, node) {\n var parentBlock = dom.getParent(node, dom.isBlock);\n return parentBlock && parentBlock.nodeName === 'LI' ? parentBlock : null;\n };\n var isParentBlockLi = function (dom, node) {\n return !!getParentLi(dom, node);\n };\n var getSplit = function (parentNode, rng) {\n var beforeRng = rng.cloneRange();\n var afterRng = rng.cloneRange();\n beforeRng.setStartBefore(parentNode);\n afterRng.setEndAfter(parentNode);\n return [\n beforeRng.cloneContents(),\n afterRng.cloneContents()\n ];\n };\n var findFirstIn = function (node, rootNode) {\n var caretPos = CaretPosition.before(node);\n var caretWalker = CaretWalker(rootNode);\n var newCaretPos = caretWalker.next(caretPos);\n return newCaretPos ? newCaretPos.toRange() : null;\n };\n var findLastOf = function (node, rootNode) {\n var caretPos = CaretPosition.after(node);\n var caretWalker = CaretWalker(rootNode);\n var newCaretPos = caretWalker.prev(caretPos);\n return newCaretPos ? newCaretPos.toRange() : null;\n };\n var insertMiddle = function (target, elms, rootNode, rng) {\n var parts = getSplit(target, rng);\n var parentElm = target.parentNode;\n parentElm.insertBefore(parts[0], target);\n Tools.each(elms, function (li) {\n parentElm.insertBefore(li, target);\n });\n parentElm.insertBefore(parts[1], target);\n parentElm.removeChild(target);\n return findLastOf(elms[elms.length - 1], rootNode);\n };\n var insertBefore$1 = function (target, elms, rootNode) {\n var parentElm = target.parentNode;\n Tools.each(elms, function (elm) {\n parentElm.insertBefore(elm, target);\n });\n return findFirstIn(target, rootNode);\n };\n var insertAfter$1 = function (target, elms, rootNode, dom) {\n dom.insertAfter(elms.reverse(), target);\n return findLastOf(elms[0], rootNode);\n };\n var insertAtCaret$1 = function (serializer, dom, rng, fragment) {\n var domFragment = toDomFragment(dom, serializer, fragment);\n var liTarget = getParentLi(dom, rng.startContainer);\n var liElms = trimListItems(listItems(domFragment.firstChild));\n var BEGINNING = 1, END = 2;\n var rootNode = dom.getRoot();\n var isAt = function (location) {\n var caretPos = CaretPosition.fromRangeStart(rng);\n var caretWalker = CaretWalker(dom.getRoot());\n var newPos = location === BEGINNING ? caretWalker.prev(caretPos) : caretWalker.next(caretPos);\n return newPos ? getParentLi(dom, newPos.getNode()) !== liTarget : true;\n };\n if (isAt(BEGINNING)) {\n return insertBefore$1(liTarget, liElms, rootNode);\n } else if (isAt(END)) {\n return insertAfter$1(liTarget, liElms, rootNode, dom);\n }\n return insertMiddle(liTarget, liElms, rootNode, rng);\n };\n\n var trimOrPadLeftRight = function (dom, rng, html) {\n var root = SugarElement.fromDom(dom.getRoot());\n if (needsToBeNbspLeft(root, CaretPosition.fromRangeStart(rng))) {\n html = html.replace(/^ /, ' ');\n } else {\n html = html.replace(/^ /, ' ');\n }\n if (needsToBeNbspRight(root, CaretPosition.fromRangeEnd(rng))) {\n html = html.replace(/( | )()?$/, ' ');\n } else {\n html = html.replace(/ ()?$/, ' ');\n }\n return html;\n };\n\n var isTableCell$1 = isTableCell$5;\n var isTableCellContentSelected = function (dom, rng, cell) {\n if (cell !== null) {\n var endCell = dom.getParent(rng.endContainer, isTableCell$1);\n return cell === endCell && hasAllContentsSelected(SugarElement.fromDom(cell), rng);\n } else {\n return false;\n }\n };\n var validInsertion = function (editor, value, parentNode) {\n if (parentNode.getAttribute('data-mce-bogus') === 'all') {\n parentNode.parentNode.insertBefore(editor.dom.createFragment(value), parentNode);\n } else {\n var node = parentNode.firstChild;\n var node2 = parentNode.lastChild;\n if (!node || node === node2 && node.nodeName === 'BR') {\n editor.dom.setHTML(parentNode, value);\n } else {\n editor.selection.setContent(value);\n }\n }\n };\n var trimBrsFromTableCell = function (dom, elm) {\n Optional.from(dom.getParent(elm, 'td,th')).map(SugarElement.fromDom).each(trimBlockTrailingBr);\n };\n var reduceInlineTextElements = function (editor, merge) {\n var textInlineElements = editor.schema.getTextInlineElements();\n var dom = editor.dom;\n if (merge) {\n var root_1 = editor.getBody();\n var elementUtils_1 = ElementUtils(dom);\n Tools.each(dom.select('*[data-mce-fragment]'), function (node) {\n var isInline = isNonNullable(textInlineElements[node.nodeName.toLowerCase()]);\n if (isInline && hasInheritableStyles(dom, node)) {\n for (var parentNode = node.parentNode; isNonNullable(parentNode) && parentNode !== root_1; parentNode = parentNode.parentNode) {\n var styleConflict = hasStyleConflict(dom, node, parentNode);\n if (styleConflict) {\n break;\n }\n if (elementUtils_1.compare(parentNode, node)) {\n dom.remove(node, true);\n break;\n }\n }\n }\n });\n }\n };\n var markFragmentElements = function (fragment) {\n var node = fragment;\n while (node = node.walk()) {\n if (node.type === 1) {\n node.attr('data-mce-fragment', '1');\n }\n }\n };\n var unmarkFragmentElements = function (elm) {\n Tools.each(elm.getElementsByTagName('*'), function (elm) {\n elm.removeAttribute('data-mce-fragment');\n });\n };\n var isPartOfFragment = function (node) {\n return !!node.getAttribute('data-mce-fragment');\n };\n var canHaveChildren = function (editor, node) {\n return node && !editor.schema.getShortEndedElements()[node.nodeName];\n };\n var moveSelectionToMarker = function (editor, marker) {\n var nextRng;\n var dom = editor.dom;\n var selection = editor.selection;\n if (!marker) {\n return;\n }\n selection.scrollIntoView(marker);\n var parentEditableElm = getContentEditableRoot$1(editor.getBody(), marker);\n if (dom.getContentEditable(parentEditableElm) === 'false') {\n dom.remove(marker);\n selection.select(parentEditableElm);\n return;\n }\n var rng = dom.createRng();\n var node = marker.previousSibling;\n if (isText$7(node)) {\n rng.setStart(node, node.nodeValue.length);\n if (!Env.ie) {\n var node2 = marker.nextSibling;\n if (isText$7(node2)) {\n node.appendData(node2.data);\n node2.parentNode.removeChild(node2);\n }\n }\n } else {\n rng.setStartBefore(marker);\n rng.setEndBefore(marker);\n }\n var findNextCaretRng = function (rng) {\n var caretPos = CaretPosition.fromRangeStart(rng);\n var caretWalker = CaretWalker(editor.getBody());\n caretPos = caretWalker.next(caretPos);\n if (caretPos) {\n return caretPos.toRange();\n }\n };\n var parentBlock = dom.getParent(marker, dom.isBlock);\n dom.remove(marker);\n if (parentBlock && dom.isEmpty(parentBlock)) {\n editor.$(parentBlock).empty();\n rng.setStart(parentBlock, 0);\n rng.setEnd(parentBlock, 0);\n if (!isTableCell$1(parentBlock) && !isPartOfFragment(parentBlock) && (nextRng = findNextCaretRng(rng))) {\n rng = nextRng;\n dom.remove(parentBlock);\n } else {\n dom.add(parentBlock, dom.create('br', { 'data-mce-bogus': '1' }));\n }\n }\n selection.setRng(rng);\n };\n var deleteSelectedContent = function (editor) {\n var dom = editor.dom;\n var rng = normalize(editor.selection.getRng());\n editor.selection.setRng(rng);\n var startCell = dom.getParent(rng.startContainer, isTableCell$1);\n if (isTableCellContentSelected(dom, rng, startCell)) {\n deleteCellContents(editor, rng, SugarElement.fromDom(startCell));\n } else {\n editor.getDoc().execCommand('Delete', false, null);\n }\n };\n var insertHtmlAtCaret = function (editor, value, details) {\n var parentNode;\n var rng, node;\n var selection = editor.selection;\n var dom = editor.dom;\n if (/^ | $/.test(value)) {\n value = trimOrPadLeftRight(dom, selection.getRng(), value);\n }\n var parser = editor.parser;\n var merge = details.merge;\n var serializer = HtmlSerializer({ validate: shouldValidate(editor) }, editor.schema);\n var bookmarkHtml = '';\n var args = editor.fire('BeforeSetContent', {\n content: value,\n format: 'html',\n selection: true,\n paste: details.paste\n });\n if (args.isDefaultPrevented()) {\n editor.fire('SetContent', {\n content: args.content,\n format: 'html',\n selection: true,\n paste: details.paste\n });\n return;\n }\n value = args.content;\n if (value.indexOf('{$caret}') === -1) {\n value += '{$caret}';\n }\n value = value.replace(/\\{\\$caret\\}/, bookmarkHtml);\n rng = selection.getRng();\n var caretElement = rng.startContainer || (rng.parentElement ? rng.parentElement() : null);\n var 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 parentNode = selection.getNode();\n var parserArgs = {\n context: parentNode.nodeName.toLowerCase(),\n data: details.data,\n insert: true\n };\n var 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 selection.setRng(rng);\n editor.fire('SetContent', args);\n return;\n }\n markFragmentElements(fragment);\n node = fragment.lastChild;\n if (node.attr('id') === 'mce_marker') {\n var marker = node;\n for (node = node.prev; node; node = node.walk(true)) {\n if (node.type === 3 || !dom.isBlock(node.name)) {\n if (editor.schema.isValidChild(node.parent.name, 'span')) {\n node.parent.insert(marker, node, node.name === 'br');\n }\n break;\n }\n }\n }\n editor._selectionOverrides.showBlockCaretContainer(parentNode);\n if (!parserArgs.invalid) {\n value = serializer.serialize(fragment);\n validInsertion(editor, value, parentNode);\n } else {\n editor.selection.setContent(bookmarkHtml);\n parentNode = selection.getNode();\n var rootNode = editor.getBody();\n if (parentNode.nodeType === 9) {\n parentNode = node = rootNode;\n } else {\n node = parentNode;\n }\n while (node !== rootNode) {\n parentNode = node;\n node = node.parentNode;\n }\n value = parentNode === rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode);\n value = serializer.serialize(parser.parse(value.replace(//i, function () {\n return serializer.serialize(fragment);\n })));\n if (parentNode === rootNode) {\n dom.setHTML(rootNode, value);\n } else {\n dom.setOuterHTML(parentNode, value);\n }\n }\n reduceInlineTextElements(editor, merge);\n moveSelectionToMarker(editor, dom.get('mce_marker'));\n unmarkFragmentElements(editor.getBody());\n trimBrsFromTableCell(dom, selection.getStart());\n editor.fire('SetContent', args);\n editor.addVisual();\n };\n\n var traverse = function (node, fn) {\n fn(node);\n if (node.firstChild) {\n traverse(node.firstChild, fn);\n }\n if (node.next) {\n traverse(node.next, fn);\n }\n };\n var findMatchingNodes = function (nodeFilters, attributeFilters, node) {\n var nodeMatches = {};\n var attrMatches = {};\n var matches = [];\n if (node.firstChild) {\n traverse(node.firstChild, function (node) {\n each$k(nodeFilters, function (filter) {\n if (filter.name === node.name) {\n if (nodeMatches[filter.name]) {\n nodeMatches[filter.name].nodes.push(node);\n } else {\n nodeMatches[filter.name] = {\n filter: filter,\n nodes: [node]\n };\n }\n }\n });\n each$k(attributeFilters, function (filter) {\n if (typeof node.attr(filter.name) === 'string') {\n if (attrMatches[filter.name]) {\n attrMatches[filter.name].nodes.push(node);\n } else {\n attrMatches[filter.name] = {\n filter: filter,\n nodes: [node]\n };\n }\n }\n });\n });\n }\n for (var name_1 in nodeMatches) {\n if (has$2(nodeMatches, name_1)) {\n matches.push(nodeMatches[name_1]);\n }\n }\n for (var name_2 in attrMatches) {\n if (has$2(attrMatches, name_2)) {\n matches.push(attrMatches[name_2]);\n }\n }\n return matches;\n };\n var filter$1 = function (nodeFilters, attributeFilters, node) {\n var matches = findMatchingNodes(nodeFilters, attributeFilters, node);\n each$k(matches, function (match) {\n each$k(match.filter.callbacks, function (callback) {\n callback(match.nodes, match.filter.name, {});\n });\n });\n };\n\n var defaultFormat$1 = 'html';\n var isTreeNode = function (content) {\n return content instanceof AstNode;\n };\n var moveSelection = function (editor) {\n if (hasFocus(editor)) {\n firstPositionIn(editor.getBody()).each(function (pos) {\n var node = pos.getNode();\n var caretPos = isTable$3(node) ? firstPositionIn(node).getOr(pos) : pos;\n editor.selection.setRng(caretPos.toRange());\n });\n }\n };\n var setEditorHtml = function (editor, html, noSelection) {\n editor.dom.setHTML(editor.getBody(), html);\n if (noSelection !== true) {\n moveSelection(editor);\n }\n };\n var setContentString = function (editor, body, content, args) {\n if (content.length === 0 || /^\\s+$/.test(content)) {\n var padd = '
';\n if (body.nodeName === 'TABLE') {\n content = '' + padd + '';\n } else if (/^(UL|OL)$/.test(body.nodeName)) {\n content = '
  • ' + padd + '
  • ';\n }\n var forcedRootBlockName = getForcedRootBlock(editor);\n if (forcedRootBlockName && 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 = '
    ';\n }\n setEditorHtml(editor, content, args.no_selection);\n editor.fire('SetContent', args);\n } else {\n if (args.format !== 'raw') {\n content = HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(editor.parser.parse(content, {\n isRootContent: true,\n insert: true\n }));\n }\n args.content = isWsPreserveElement(SugarElement.fromDom(body)) ? content : Tools.trim(content);\n setEditorHtml(editor, args.content, args.no_selection);\n if (!args.no_events) {\n editor.fire('SetContent', args);\n }\n }\n return args.content;\n };\n var setContentTree = function (editor, body, content, args) {\n filter$1(editor.parser.getNodeFilters(), editor.parser.getAttributeFilters(), content);\n var html = HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(content);\n args.content = isWsPreserveElement(SugarElement.fromDom(body)) ? html : Tools.trim(html);\n setEditorHtml(editor, args.content, args.no_selection);\n if (!args.no_events) {\n editor.fire('SetContent', args);\n }\n return content;\n };\n var setupArgs$2 = function (args, content) {\n return __assign(__assign({ format: defaultFormat$1 }, args), {\n set: true,\n content: isTreeNode(content) ? '' : content\n });\n };\n var setContentInternal = function (editor, content, args) {\n var defaultedArgs = setupArgs$2(args, content);\n var updatedArgs = args.no_events ? defaultedArgs : editor.fire('BeforeSetContent', defaultedArgs);\n if (!isTreeNode(content)) {\n content = updatedArgs.content;\n }\n return Optional.from(editor.getBody()).fold(constant(content), function (body) {\n return isTreeNode(content) ? setContentTree(editor, body, content, updatedArgs) : setContentString(editor, body, content, updatedArgs);\n });\n };\n\n var sibling = function (scope, predicate) {\n return sibling$2(scope, predicate).isSome();\n };\n\n var ensureIsRoot = function (isRoot) {\n return isFunction(isRoot) ? isRoot : never;\n };\n var ancestor = function (scope, transform, isRoot) {\n var element = scope.dom;\n var stop = ensureIsRoot(isRoot);\n while (element.parentNode) {\n element = element.parentNode;\n var el = SugarElement.fromDom(element);\n var 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 var closest$1 = function (scope, transform, isRoot) {\n var current = transform(scope);\n var stop = ensureIsRoot(isRoot);\n return current.orThunk(function () {\n return stop(scope) ? Optional.none() : ancestor(scope, transform, stop);\n });\n };\n\n var isEq$3 = isEq$5;\n var matchesUnInheritedFormatSelector = function (ed, node, name) {\n var formatList = ed.formatter.get(name);\n if (formatList) {\n for (var i = 0; i < formatList.length; i++) {\n var 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 var matchParents = function (editor, node, name, vars, similar) {\n var root = editor.dom.getRoot();\n if (node === root) {\n return false;\n }\n node = editor.dom.getParent(node, function (node) {\n if (matchesUnInheritedFormatSelector(editor, node, name)) {\n return true;\n }\n return node.parentNode === root || !!matchNode(editor, node, name, vars, true);\n });\n return !!matchNode(editor, node, name, vars, similar);\n };\n var matchName$1 = function (dom, node, format) {\n if (isEq$3(node, format.inline)) {\n return true;\n }\n if (isEq$3(node, format.block)) {\n return true;\n }\n if (format.selector) {\n return node.nodeType === 1 && dom.is(node, format.selector);\n }\n };\n var matchItems = function (dom, node, format, itemName, similar, vars) {\n var items = format[itemName];\n if (isFunction(format.onmatch)) {\n return format.onmatch(node, format, itemName);\n }\n if (items) {\n if (isUndefined(items.length)) {\n for (var key in items) {\n if (has$2(items, key)) {\n var value = itemName === 'attributes' ? dom.getAttrib(node, key) : getStyle(dom, node, key);\n var expectedValue = replaceVars(items[key], vars);\n var 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(dom, expectedValue, key))) {\n return false;\n }\n }\n }\n } else {\n for (var i = 0; i < items.length; i++) {\n if (itemName === 'attributes' ? dom.getAttrib(node, items[i]) : getStyle(dom, node, items[i])) {\n return true;\n }\n }\n }\n }\n return true;\n };\n var matchNode = function (ed, node, name, vars, similar) {\n var formatList = ed.formatter.get(name);\n var dom = ed.dom;\n if (formatList && node) {\n for (var i = 0; i < formatList.length; i++) {\n var format = formatList[i];\n if (matchName$1(ed.dom, node, format) && matchItems(dom, node, format, 'attributes', similar, vars) && matchItems(dom, node, format, 'styles', similar, vars)) {\n var classes = format.classes;\n if (classes) {\n for (var 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 };\n var match$2 = function (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 var 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 var matchAll = function (editor, names, vars) {\n var matchedFormatNames = [];\n var checkedMap = {};\n var startElement = editor.selection.getStart();\n editor.dom.getParent(startElement, function (node) {\n for (var i = 0; i < names.length; i++) {\n var name_1 = names[i];\n if (!checkedMap[name_1] && matchNode(editor, node, name_1, vars)) {\n checkedMap[name_1] = true;\n matchedFormatNames.push(name_1);\n }\n }\n }, editor.dom.getRoot());\n return matchedFormatNames;\n };\n var closest = function (editor, names) {\n var isRoot = function (elm) {\n return eq(elm, SugarElement.fromDom(editor.getBody()));\n };\n var match = function (elm, name) {\n return matchNode(editor, elm.dom, name) ? Optional.some(name) : Optional.none();\n };\n return Optional.from(editor.selection.getStart(true)).bind(function (rawElm) {\n return closest$1(SugarElement.fromDom(rawElm), function (elm) {\n return findMap(names, function (name) {\n return match(elm, name);\n });\n }, isRoot);\n }).getOrNull();\n };\n var canApply = function (editor, name) {\n var formatList = editor.formatter.get(name);\n var dom = editor.dom;\n if (formatList) {\n var startNode = editor.selection.getStart();\n var parents = getParents$2(dom, startNode);\n for (var x = formatList.length - 1; x >= 0; x--) {\n var format = formatList[x];\n if (!isSelectorFormat(format) || isNonNullable(format.defaultBlock)) {\n return true;\n }\n for (var 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 var matchAllOnNode = function (editor, node, formatNames) {\n return foldl(formatNames, function (acc, name) {\n var 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\n var ZWSP = ZWSP$1, CARET_ID = '_mce_caret';\n var importNode = function (ownerDocument, node) {\n return ownerDocument.importNode(node, true);\n };\n var getEmptyCaretContainers = function (node) {\n var nodes = [];\n while (node) {\n if (node.nodeType === 3 && node.nodeValue !== ZWSP || node.childNodes.length > 1) {\n return [];\n }\n if (node.nodeType === 1) {\n nodes.push(node);\n }\n node = node.firstChild;\n }\n return nodes;\n };\n var isCaretContainerEmpty = function (node) {\n return getEmptyCaretContainers(node).length > 0;\n };\n var findFirstTextNode = function (node) {\n if (node) {\n var walker = new DomTreeWalker(node, node);\n for (node = walker.current(); node; node = walker.next()) {\n if (isText$7(node)) {\n return node;\n }\n }\n }\n return null;\n };\n var createCaretContainer = function (fill) {\n var 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 var trimZwspFromCaretContainer = function (caretContainerNode) {\n var textNode = findFirstTextNode(caretContainerNode);\n if (textNode && textNode.nodeValue.charAt(0) === ZWSP) {\n textNode.deleteData(0, 1);\n }\n return textNode;\n };\n var removeCaretContainerNode = function (editor, node, moveCaret) {\n if (moveCaret === void 0) {\n moveCaret = true;\n }\n var dom = editor.dom, selection = editor.selection;\n if (isCaretContainerEmpty(node)) {\n deleteElement$2(editor, false, SugarElement.fromDom(node), moveCaret);\n } else {\n var rng = selection.getRng();\n var block = dom.getParent(node, dom.isBlock);\n var startContainer = rng.startContainer;\n var startOffset = rng.startOffset;\n var endContainer = rng.endContainer;\n var endOffset = rng.endOffset;\n var 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 var removeCaretContainer = function (editor, node, moveCaret) {\n if (moveCaret === void 0) {\n moveCaret = true;\n }\n var dom = editor.dom, selection = editor.selection;\n if (!node) {\n node = getParentCaretContainer(editor.getBody(), selection.getStart());\n if (!node) {\n while (node = dom.get(CARET_ID)) {\n removeCaretContainerNode(editor, node, false);\n }\n }\n } else {\n removeCaretContainerNode(editor, node, moveCaret);\n }\n };\n var insertCaretContainerNode = function (editor, caretContainer, formatNode) {\n var dom = editor.dom, block = dom.getParent(formatNode, curry(isTextBlock$1, editor));\n if (block && dom.isEmpty(block)) {\n formatNode.parentNode.replaceChild(caretContainer, formatNode);\n } else {\n removeTrailingBr(SugarElement.fromDom(formatNode));\n if (dom.isEmpty(formatNode)) {\n formatNode.parentNode.replaceChild(caretContainer, formatNode);\n } else {\n dom.insertAfter(caretContainer, formatNode);\n }\n }\n };\n var appendNode = function (parentNode, node) {\n parentNode.appendChild(node);\n return node;\n };\n var insertFormatNodesIntoCaretContainer = function (formatNodes, caretContainer) {\n var innerMostFormatNode = foldr(formatNodes, function (parentNode, formatNode) {\n return appendNode(parentNode, formatNode.cloneNode(false));\n }, caretContainer);\n return appendNode(innerMostFormatNode, innerMostFormatNode.ownerDocument.createTextNode(ZWSP));\n };\n var cleanFormatNode = function (editor, caretContainer, formatNode, name, vars, similar) {\n var formatter = editor.formatter;\n var dom = editor.dom;\n var validFormats = filter$4(keys(formatter.get()), function (formatName) {\n return formatName !== name && !contains$2(formatName, 'removeformat');\n });\n var matchedFormats = matchAllOnNode(editor, formatNode, validFormats);\n var uniqueFormats = filter$4(matchedFormats, function (fmtName) {\n return !areSimilarFormats(editor, fmtName, name);\n });\n if (uniqueFormats.length > 0) {\n var 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 var applyCaretFormat = function (editor, name, vars) {\n var caretContainer, textNode;\n var selection = editor.selection;\n var selectionRng = selection.getRng();\n var offset = selectionRng.startOffset;\n var container = selectionRng.startContainer;\n var text = container.nodeValue;\n caretContainer = getParentCaretContainer(editor.getBody(), selection.getStart());\n if (caretContainer) {\n textNode = findFirstTextNode(caretContainer);\n }\n var 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 var bookmark = selection.getBookmark();\n selectionRng.collapse(true);\n var rng = expandRng(editor, selectionRng, editor.formatter.get(name));\n rng = split(rng);\n editor.formatter.apply(name, vars, rng);\n selection.moveToBookmark(bookmark);\n } else {\n if (!caretContainer || textNode.nodeValue !== ZWSP) {\n caretContainer = importNode(editor.getDoc(), createCaretContainer(true).dom);\n textNode = caretContainer.firstChild;\n selectionRng.insertNode(caretContainer);\n offset = 1;\n editor.formatter.apply(name, vars, caretContainer);\n } else {\n editor.formatter.apply(name, vars, caretContainer);\n }\n selection.setCursorLocation(textNode, offset);\n }\n };\n var removeCaretFormat = function (editor, name, vars, similar) {\n var dom = editor.dom;\n var selection = editor.selection;\n var hasContentAfter, node, formatNode;\n var parents = [];\n var rng = selection.getRng();\n var container = rng.startContainer;\n var offset = rng.startOffset;\n node = container;\n if (container.nodeType === 3) {\n if (offset !== container.nodeValue.length) {\n hasContentAfter = true;\n }\n node = node.parentNode;\n }\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 var bookmark = selection.getBookmark();\n rng.collapse(true);\n var expandedRng = expandRng(editor, rng, editor.formatter.get(name), true);\n expandedRng = split(expandedRng);\n editor.formatter.remove(name, vars, expandedRng, similar);\n selection.moveToBookmark(bookmark);\n } else {\n var caretContainer = getParentCaretContainer(editor.getBody(), formatNode);\n var newCaretContainer = createCaretContainer(false).dom;\n insertCaretContainerNode(editor, newCaretContainer, caretContainer !== null ? caretContainer : formatNode);\n var cleanedFormatNode = cleanFormatNode(editor, newCaretContainer, formatNode, name, vars, similar);\n var caretTextNode = insertFormatNodesIntoCaretContainer(parents.concat(cleanedFormatNode.toArray()), newCaretContainer);\n removeCaretContainerNode(editor, caretContainer, false);\n selection.setCursorLocation(caretTextNode, 1);\n if (dom.isEmpty(formatNode)) {\n dom.remove(formatNode);\n }\n }\n };\n var disableCaretContainer = function (editor, keyCode) {\n var selection = editor.selection, body = editor.getBody();\n removeCaretContainer(editor, null, false);\n if ((keyCode === 8 || keyCode === 46) && selection.isCollapsed() && selection.getStart().innerHTML === ZWSP) {\n removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\n }\n if (keyCode === 37 || keyCode === 39) {\n removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\n }\n };\n var setup$k = function (editor) {\n editor.on('mouseup keydown', function (e) {\n disableCaretContainer(editor, e.keyCode);\n });\n };\n var replaceWithCaretFormat = function (targetNode, formatNodes) {\n var caretContainer = createCaretContainer(false);\n var innerMost = insertFormatNodesIntoCaretContainer(formatNodes, caretContainer.dom);\n before$4(SugarElement.fromDom(targetNode), caretContainer);\n remove$7(SugarElement.fromDom(targetNode));\n return CaretPosition(innerMost, 0);\n };\n var isFormatElement = function (editor, element) {\n var inlineElements = editor.schema.getTextInlineElements();\n return has$2(inlineElements, name(element)) && !isCaretNode(element.dom) && !isBogus$2(element.dom);\n };\n var isEmptyCaretFormatElement = function (element) {\n return isCaretNode(element.dom) && isCaretContainerEmpty(element.dom);\n };\n\n var postProcessHooks = {};\n var filter = filter$2;\n var each$b = each$i;\n var addPostProcessHook = function (name, hook) {\n var hooks = postProcessHooks[name];\n if (!hooks) {\n postProcessHooks[name] = [];\n }\n postProcessHooks[name].push(hook);\n };\n var postProcess$1 = function (name, editor) {\n each$b(postProcessHooks[name], function (hook) {\n hook(editor);\n });\n };\n addPostProcessHook('pre', function (editor) {\n var rng = editor.selection.getRng();\n var blocks;\n var hasPreSibling = function (pre) {\n return isPre(pre.previousSibling) && indexOf$1(blocks, pre.previousSibling) !== -1;\n };\n var joinPre = function (pre1, pre2) {\n DomQuery(pre2).remove();\n DomQuery(pre1).append('

    ').append(pre2.childNodes);\n };\n var isPre = matchNodeNames(['pre']);\n if (!rng.collapsed) {\n blocks = editor.selection.getSelectedBlocks();\n each$b(filter(filter(blocks, isPre), hasPreSibling), function (pre) {\n joinPre(pre.previousSibling, pre);\n });\n }\n });\n\n var each$a = Tools.each;\n var isElementNode$1 = function (node) {\n return isElement$5(node) && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus$2(node);\n };\n var findElementSibling = function (node, siblingName) {\n for (var sibling = node; sibling; sibling = sibling[siblingName]) {\n if (isText$7(sibling) && isNotEmpty(sibling.data)) {\n return node;\n }\n if (isElement$5(sibling) && !isBookmarkNode$1(sibling)) {\n return sibling;\n }\n }\n return node;\n };\n var mergeSiblingsNodes = function (dom, prev, next) {\n var elementUtils = ElementUtils(dom);\n if (prev && next) {\n prev = findElementSibling(prev, 'previousSibling');\n next = findElementSibling(next, 'nextSibling');\n if (elementUtils.compare(prev, next)) {\n for (var sibling = prev.nextSibling; sibling && sibling !== next;) {\n var tmpSibling = sibling;\n sibling = sibling.nextSibling;\n prev.appendChild(tmpSibling);\n }\n dom.remove(next);\n Tools.each(Tools.grep(next.childNodes), function (node) {\n prev.appendChild(node);\n });\n return prev;\n }\n }\n return next;\n };\n var mergeSiblings = function (dom, format, vars, node) {\n if (node && format.merge_siblings !== false) {\n var newNode = mergeSiblingsNodes(dom, getNonWhiteSpaceSibling(node), node);\n mergeSiblingsNodes(dom, newNode, getNonWhiteSpaceSibling(newNode, true));\n }\n };\n var clearChildStyles = function (dom, format, node) {\n if (format.clear_child_styles) {\n var selector = format.links ? '*:not(a)' : '*';\n each$a(dom.select(selector, node), function (node) {\n if (isElementNode$1(node)) {\n each$a(format.styles, function (value, name) {\n dom.setStyle(node, name, '');\n });\n }\n });\n }\n };\n var processChildElements = function (node, filter, process) {\n each$a(node.childNodes, function (node) {\n if (isElementNode$1(node)) {\n if (filter(node)) {\n process(node);\n }\n if (node.hasChildNodes()) {\n processChildElements(node, filter, process);\n }\n }\n });\n };\n var unwrapEmptySpan = function (dom, node) {\n if (node.nodeName === 'SPAN' && dom.getAttribs(node).length === 0) {\n dom.remove(node, true);\n }\n };\n var hasStyle = function (dom, name) {\n return function (node) {\n return !!(node && getStyle(dom, node, name));\n };\n };\n var applyStyle = function (dom, name, value) {\n return function (node) {\n dom.setStyle(node, name, value);\n if (node.getAttribute('style') === '') {\n node.removeAttribute('style');\n }\n unwrapEmptySpan(dom, node);\n };\n };\n\n var removeResult = Adt.generate([\n { keep: [] },\n { rename: ['name'] },\n { removed: [] }\n ]);\n var MCE_ATTR_RE = /^(src|href|style)$/;\n var each$9 = Tools.each;\n var isEq$2 = isEq$5;\n var isTableCellOrRow = function (node) {\n return /^(TR|TH|TD)$/.test(node.nodeName);\n };\n var isChildOfInlineParent = function (dom, node, parent) {\n return dom.isChildOf(node, parent) && node !== parent && !dom.isBlock(parent);\n };\n var getContainer = function (ed, rng, start) {\n var container = rng[start ? 'startContainer' : 'endContainer'];\n var offset = rng[start ? 'startOffset' : 'endOffset'];\n if (isElement$5(container)) {\n var lastIdx = container.childNodes.length - 1;\n if (!start && offset) {\n offset--;\n }\n container = container.childNodes[offset > lastIdx ? lastIdx : offset];\n }\n if (isText$7(container) && start && offset >= container.nodeValue.length) {\n container = new DomTreeWalker(container, ed.getBody()).next() || container;\n }\n if (isText$7(container) && !start && offset === 0) {\n container = new DomTreeWalker(container, ed.getBody()).prev() || container;\n }\n return container;\n };\n var normalizeTableSelection = function (node, start) {\n var prop = start ? 'firstChild' : 'lastChild';\n if (isTableCellOrRow(node) && node[prop]) {\n var childNode = node[prop];\n if (node.nodeName === 'TR') {\n return childNode[prop] || childNode;\n } else {\n return childNode;\n }\n }\n return node;\n };\n var wrap$1 = function (dom, node, name, attrs) {\n var wrapper = dom.create(name, attrs);\n node.parentNode.insertBefore(wrapper, node);\n wrapper.appendChild(node);\n return wrapper;\n };\n var wrapWithSiblings = function (dom, node, next, name, attrs) {\n var start = SugarElement.fromDom(node);\n var wrapper = SugarElement.fromDom(dom.create(name, attrs));\n var siblings = next ? nextSiblings(start) : prevSiblings(start);\n append(wrapper, siblings);\n if (next) {\n before$4(start, wrapper);\n prepend(wrapper, start);\n } else {\n after$3(start, wrapper);\n append$1(wrapper, start);\n }\n return wrapper.dom;\n };\n var matchName = function (dom, node, format) {\n if (isInlineFormat(format) && isEq$2(node, format.inline)) {\n return true;\n }\n if (isBlockFormat(format) && isEq$2(node, format.block)) {\n return true;\n }\n if (isSelectorFormat(format)) {\n return isElement$5(node) && dom.is(node, format.selector);\n }\n };\n var isColorFormatAndAnchor = function (node, format) {\n return format.links && node.nodeName === 'A';\n };\n var find = function (dom, node, next, inc) {\n var sibling = getNonWhiteSpaceSibling(node, next, inc);\n return isNullable(sibling) || sibling.nodeName === 'BR' || dom.isBlock(sibling);\n };\n var removeNode = function (ed, node, format) {\n var parentNode = node.parentNode;\n var rootBlockElm;\n var dom = ed.dom, forcedRootBlock = getForcedRootBlock(ed);\n if (isBlockFormat(format)) {\n if (!forcedRootBlock) {\n if (dom.isBlock(node) && !dom.isBlock(parentNode)) {\n if (!find(dom, node, false) && !find(dom, node.firstChild, true, true)) {\n node.insertBefore(dom.create('br'), node.firstChild);\n }\n if (!find(dom, node, true) && !find(dom, node.lastChild, false, true)) {\n node.appendChild(dom.create('br'));\n }\n }\n } else {\n if (parentNode === dom.getRoot()) {\n if (!format.list_block || !isEq$2(node, format.list_block)) {\n each$k(from(node.childNodes), function (node) {\n if (isValid(ed, forcedRootBlock, node.nodeName.toLowerCase())) {\n if (!rootBlockElm) {\n rootBlockElm = wrap$1(dom, node, forcedRootBlock);\n dom.setAttribs(rootBlockElm, ed.settings.forced_root_block_attrs);\n } else {\n rootBlockElm.appendChild(node);\n }\n } else {\n rootBlockElm = null;\n }\n });\n }\n }\n }\n }\n if (isMixedFormat(format) && !isEq$2(format.inline, node)) {\n return;\n }\n dom.remove(node, true);\n };\n var removeFormatInternal = function (ed, format, vars, node, compareNode) {\n var stylesModified;\n var dom = ed.dom;\n if (!matchName(dom, node, format) && !isColorFormatAndAnchor(node, format)) {\n return removeResult.keep();\n }\n var elm = node;\n if (isInlineFormat(format) && format.remove === 'all' && isArray$1(format.preserve_attributes)) {\n var attrsToPreserve = filter$4(dom.getAttribs(elm), function (attr) {\n return contains$3(format.preserve_attributes, attr.name.toLowerCase());\n });\n dom.removeAllAttribs(elm);\n each$k(attrsToPreserve, function (attr) {\n return dom.setAttrib(elm, attr.name, attr.value);\n });\n if (attrsToPreserve.length > 0) {\n return removeResult.rename('span');\n }\n }\n if (format.remove !== 'all') {\n each$9(format.styles, function (value, name) {\n value = normalizeStyleValue(dom, replaceVars(value, vars), name + '');\n if (isNumber(name)) {\n name = value;\n compareNode = null;\n }\n if (format.remove_similar || (!compareNode || isEq$2(getStyle(dom, compareNode, name), value))) {\n dom.setStyle(elm, name, '');\n }\n stylesModified = true;\n });\n if (stylesModified && dom.getAttrib(elm, 'style') === '') {\n elm.removeAttribute('style');\n elm.removeAttribute('data-mce-style');\n }\n each$9(format.attributes, function (value, name) {\n var valueOut;\n value = replaceVars(value, vars);\n if (isNumber(name)) {\n name = value;\n compareNode = null;\n }\n if (format.remove_similar || (!compareNode || isEq$2(dom.getAttrib(compareNode, name), value))) {\n if (name === 'class') {\n value = dom.getAttrib(elm, name);\n if (value) {\n valueOut = '';\n each$k(value.split(/\\s+/), function (cls) {\n if (/mce\\-\\w+/.test(cls)) {\n valueOut += (valueOut ? ' ' : '') + cls;\n }\n });\n if (valueOut) {\n dom.setAttrib(elm, name, valueOut);\n return;\n }\n }\n }\n if (MCE_ATTR_RE.test(name)) {\n elm.removeAttribute('data-mce-' + name);\n }\n if (name === 'style' && matchNodeNames(['li'])(elm) && dom.getStyle(elm, 'list-style-type') === 'none') {\n elm.removeAttribute(name);\n dom.setStyle(elm, 'list-style-type', 'none');\n return;\n }\n if (name === 'class') {\n elm.removeAttribute('className');\n }\n elm.removeAttribute(name);\n }\n });\n each$9(format.classes, function (value) {\n value = replaceVars(value, vars);\n if (!compareNode || dom.hasClass(compareNode, value)) {\n dom.removeClass(elm, value);\n }\n });\n var attrs = dom.getAttribs(elm);\n for (var i = 0; i < attrs.length; i++) {\n var attrName = attrs[i].nodeName;\n if (attrName.indexOf('_') !== 0 && attrName.indexOf('data-') !== 0) {\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 var removeFormat$1 = function (ed, format, vars, node, compareNode) {\n return removeFormatInternal(ed, format, vars, node, compareNode).fold(never, function (newName) {\n ed.dom.rename(node, newName);\n return true;\n }, always);\n };\n var findFormatRoot = function (editor, container, name, vars, similar) {\n var formatRoot;\n each$k(getParents$2(editor.dom, container.parentNode).reverse(), function (parent) {\n if (!formatRoot && parent.id !== '_start' && parent.id !== '_end') {\n var format = matchNode(editor, parent, name, vars, similar);\n if (format && format.split !== false) {\n formatRoot = parent;\n }\n }\n });\n return formatRoot;\n };\n var removeFormatFromClone = function (editor, format, vars, clone) {\n return removeFormatInternal(editor, format, vars, clone, clone).fold(constant(clone), function (newName) {\n var fragment = editor.dom.createFragment();\n fragment.appendChild(clone);\n return editor.dom.rename(clone, newName);\n }, constant(null));\n };\n var wrapAndSplit = function (editor, formatList, formatRoot, container, target, split, format, vars) {\n var clone, lastClone, firstClone;\n var dom = editor.dom;\n if (formatRoot) {\n var formatRootParent = formatRoot.parentNode;\n for (var parent_1 = container.parentNode; parent_1 && parent_1 !== formatRootParent; parent_1 = parent_1.parentNode) {\n clone = dom.clone(parent_1, false);\n for (var i = 0; i < formatList.length; i++) {\n clone = removeFormatFromClone(editor, formatList[i], vars, clone);\n if (clone === null) {\n break;\n }\n }\n if (clone) {\n if (lastClone) {\n clone.appendChild(lastClone);\n }\n if (!firstClone) {\n firstClone = clone;\n }\n lastClone = clone;\n }\n }\n if (split && (!format.mixed || !dom.isBlock(formatRoot))) {\n container = dom.split(formatRoot, container);\n }\n if (lastClone) {\n target.parentNode.insertBefore(lastClone, target);\n firstClone.appendChild(target);\n if (isInlineFormat(format)) {\n mergeSiblings(dom, format, vars, lastClone);\n }\n }\n }\n return container;\n };\n var remove$1 = function (ed, name, vars, node, similar) {\n var formatList = ed.formatter.get(name);\n var format = formatList[0];\n var contentEditable = true;\n var dom = ed.dom;\n var selection = ed.selection;\n var splitToFormatRoot = function (container) {\n var formatRoot = findFormatRoot(ed, container, name, vars, similar);\n return wrapAndSplit(ed, formatList, formatRoot, container, container, true, format, vars);\n };\n var isRemoveBookmarkNode = function (node) {\n return isBookmarkNode$1(node) && isElement$5(node) && (node.id === '_start' || node.id === '_end');\n };\n var removeNodeFormat = function (node) {\n return exists(formatList, function (fmt) {\n return removeFormat$1(ed, fmt, vars, node, node);\n });\n };\n var process = function (node) {\n var lastContentEditable = true;\n var hasContentEditableState = false;\n if (isElement$5(node) && dom.getContentEditable(node)) {\n lastContentEditable = contentEditable;\n contentEditable = dom.getContentEditable(node) === 'true';\n hasContentEditableState = true;\n }\n var children = from(node.childNodes);\n if (contentEditable && !hasContentEditableState) {\n var removed = removeNodeFormat(node);\n var currentNodeMatches = removed || exists(formatList, function (f) {\n return matchName$1(dom, node, f);\n });\n var parentNode = node.parentNode;\n if (!currentNodeMatches && isNonNullable(parentNode) && shouldExpandToSelector(format)) {\n removeNodeFormat(parentNode);\n }\n }\n if (format.deep) {\n if (children.length) {\n for (var i = 0; i < children.length; i++) {\n process(children[i]);\n }\n if (hasContentEditableState) {\n contentEditable = lastContentEditable;\n }\n }\n }\n var textDecorations = [\n 'underline',\n 'line-through',\n 'overline'\n ];\n each$k(textDecorations, function (decoration) {\n if (isElement$5(node) && ed.dom.getStyle(node, 'text-decoration') === decoration && node.parentNode && getTextDecoration(dom, node.parentNode) === decoration) {\n removeFormat$1(ed, {\n deep: false,\n exact: true,\n inline: 'span',\n styles: { textDecoration: decoration }\n }, null, node);\n }\n });\n };\n var unwrap = function (start) {\n var node = dom.get(start ? '_start' : '_end');\n var out = node[start ? 'firstChild' : 'lastChild'];\n if (isRemoveBookmarkNode(out)) {\n out = out[start ? 'firstChild' : 'lastChild'];\n }\n if (isText$7(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 };\n var removeRngStyle = function (rng) {\n var startContainer, endContainer;\n var expandedRng = expandRng(ed, rng, formatList, rng.collapsed);\n if (format.split) {\n expandedRng = split(expandedRng);\n startContainer = getContainer(ed, expandedRng, true);\n endContainer = getContainer(ed, expandedRng);\n if (startContainer !== endContainer) {\n startContainer = normalizeTableSelection(startContainer, true);\n endContainer = normalizeTableSelection(endContainer, false);\n if (isChildOfInlineParent(dom, startContainer, endContainer)) {\n var 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 var 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 var newRng = dom.createRng();\n newRng.setStartAfter(startContainer);\n newRng.setEndBefore(endContainer);\n walk$2(dom, newRng, function (nodes) {\n each$k(nodes, function (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$2(dom, expandedRng, function (nodes) {\n each$k(nodes, process);\n });\n };\n if (node) {\n if (isNode(node)) {\n var 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 (dom.getContentEditable(selection.getNode()) === 'false') {\n node = selection.getNode();\n for (var i = 0; i < formatList.length; i++) {\n if (formatList[i].ceFalseOverride) {\n if (removeFormat$1(ed, formatList[i], vars, node, node)) {\n break;\n }\n }\n }\n fireFormatRemove(ed, name, node, vars);\n return;\n }\n if (!selection.isCollapsed() || !isInlineFormat(format) || getCellsFromEditor(ed).length) {\n preserve(selection, true, function () {\n runOnRanges(ed, removeRngStyle);\n });\n if (isInlineFormat(format) && match$2(ed, name, vars, selection.getStart())) {\n moveStart(dom, selection, selection.getRng());\n }\n ed.nodeChanged();\n } else {\n removeCaretFormat(ed, name, vars, similar);\n }\n fireFormatRemove(ed, name, node, vars);\n };\n\n var each$8 = Tools.each;\n var mergeTextDecorationsAndColor = function (dom, format, vars, node) {\n var processTextDecorationsAndColor = function (n) {\n if (n.nodeType === 1 && n.parentNode && n.parentNode.nodeType === 1) {\n var textDecoration = getTextDecoration(dom, n.parentNode);\n if (dom.getStyle(n, 'color') && textDecoration) {\n dom.setStyle(n, 'text-decoration', textDecoration);\n } else if (dom.getStyle(n, 'text-decoration') === textDecoration) {\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 var mergeBackgroundColorAndFontSize = function (dom, format, vars, node) {\n if (format.styles && format.styles.backgroundColor) {\n processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'backgroundColor', replaceVars(format.styles.backgroundColor, vars)));\n }\n };\n var mergeSubSup = function (dom, format, vars, node) {\n if (isInlineFormat(format) && (format.inline === 'sub' || format.inline === 'sup')) {\n processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'fontSize', ''));\n dom.remove(dom.select(format.inline === 'sup' ? 'sub' : 'sup', node), true);\n }\n };\n var mergeWithChildren = function (editor, formatList, vars, node) {\n each$8(formatList, function (format) {\n if (isInlineFormat(format)) {\n each$8(editor.dom.select(format.inline, node), function (child) {\n if (!isElementNode$1(child)) {\n return;\n }\n removeFormat$1(editor, format, vars, child, format.exact ? child : null);\n });\n }\n clearChildStyles(editor.dom, format, node);\n });\n };\n var mergeWithParents = function (editor, format, name, vars, node) {\n if (matchNode(editor, node.parentNode, name, vars)) {\n if (removeFormat$1(editor, format, vars, node)) {\n return;\n }\n }\n if (format.merge_with_parents) {\n editor.dom.getParent(node.parentNode, function (parent) {\n if (matchNode(editor, parent, name, vars)) {\n removeFormat$1(editor, format, vars, node);\n return true;\n }\n });\n }\n };\n\n var each$7 = Tools.each;\n var isElementNode = function (node) {\n return isElement$5(node) && !isBookmarkNode$1(node) && !isCaretNode(node) && !isBogus$2(node);\n };\n var canFormatBR = function (editor, format, node, parentName) {\n if (canFormatEmptyLines(editor) && isInlineFormat(format)) {\n var validBRParentElements = getTextRootBlockElements(editor.schema);\n var hasCaretNodeSibling = sibling(SugarElement.fromDom(node), function (sibling) {\n return isCaretNode(sibling.dom);\n });\n return hasNonNullableKey(validBRParentElements, parentName) && isEmpty$2(SugarElement.fromDom(node.parentNode), false) && !hasCaretNodeSibling;\n } else {\n return false;\n }\n };\n var applyFormat$1 = function (ed, name, vars, node) {\n var formatList = ed.formatter.get(name);\n var format = formatList[0];\n var isCollapsed = !node && ed.selection.isCollapsed();\n var dom = ed.dom;\n var selection = ed.selection;\n var setElementFormat = function (elm, fmt) {\n if (fmt === void 0) {\n fmt = format;\n }\n if (isFunction(fmt.onformat)) {\n fmt.onformat(elm, fmt, vars, node);\n }\n each$7(fmt.styles, function (value, name) {\n dom.setStyle(elm, name, replaceVars(value, vars));\n });\n if (fmt.styles) {\n var styleVal = dom.getAttrib(elm, 'style');\n if (styleVal) {\n dom.setAttrib(elm, 'data-mce-style', styleVal);\n }\n }\n each$7(fmt.attributes, function (value, name) {\n dom.setAttrib(elm, name, replaceVars(value, vars));\n });\n each$7(fmt.classes, function (value) {\n value = replaceVars(value, vars);\n if (!dom.hasClass(elm, value)) {\n dom.addClass(elm, value);\n }\n });\n };\n var applyNodeStyle = function (formatList, node) {\n var found = false;\n each$7(formatList, function (format) {\n if (!isSelectorFormat(format)) {\n return false;\n }\n if (isNonNullable(format.collapsed) && format.collapsed !== isCollapsed) {\n return;\n }\n if (dom.is(node, format.selector) && !isCaretNode(node)) {\n setElementFormat(node, format);\n found = true;\n return false;\n }\n });\n return found;\n };\n var createWrapElement = function (wrapName) {\n if (isString$1(wrapName)) {\n var wrapElm = dom.create(wrapName);\n setElementFormat(wrapElm);\n return wrapElm;\n } else {\n return null;\n }\n };\n var applyRngStyle = function (dom, rng, nodeSpecific) {\n var newWrappers = [];\n var contentEditable = true;\n var wrapName = format.inline || format.block;\n var wrapElm = createWrapElement(wrapName);\n walk$2(dom, rng, function (nodes) {\n var currentWrapElm;\n var process = function (node) {\n var hasContentEditableState = false;\n var lastContentEditable = contentEditable;\n var nodeName = node.nodeName.toLowerCase();\n var parentNode = node.parentNode;\n var parentName = parentNode.nodeName.toLowerCase();\n if (isElement$5(node) && dom.getContentEditable(node)) {\n lastContentEditable = contentEditable;\n contentEditable = dom.getContentEditable(node) === 'true';\n hasContentEditableState = true;\n }\n if (isBr$5(node) && !canFormatBR(ed, format, node, parentName)) {\n currentWrapElm = null;\n if (isBlockFormat(format)) {\n dom.remove(node);\n }\n return;\n }\n if (isBlockFormat(format) && format.wrapper && matchNode(ed, node, name, vars)) {\n currentWrapElm = null;\n return;\n }\n if (contentEditable && !hasContentEditableState && isBlockFormat(format) && !format.wrapper && isTextBlock$1(ed, nodeName) && isValid(ed, parentName, wrapName)) {\n var elm = dom.rename(node, wrapName);\n setElementFormat(elm);\n newWrappers.push(elm);\n currentWrapElm = null;\n return;\n }\n if (isSelectorFormat(format)) {\n var 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 (contentEditable && !hasContentEditableState && isValid(ed, wrapName, nodeName) && isValid(ed, parentName, wrapName) && !(!nodeSpecific && isText$7(node) && isZwsp(node.data)) && !isCaretNode(node) && (!isInlineFormat(format) || !dom.isBlock(node))) {\n if (!currentWrapElm) {\n currentWrapElm = dom.clone(wrapElm, false);\n node.parentNode.insertBefore(currentWrapElm, node);\n newWrappers.push(currentWrapElm);\n }\n currentWrapElm.appendChild(node);\n } else {\n currentWrapElm = null;\n each$k(from(node.childNodes), process);\n if (hasContentEditableState) {\n contentEditable = lastContentEditable;\n }\n currentWrapElm = null;\n }\n };\n each$k(nodes, process);\n });\n if (format.links === true) {\n each$k(newWrappers, function (node) {\n var process = function (node) {\n if (node.nodeName === 'A') {\n setElementFormat(node, format);\n }\n each$k(from(node.childNodes), process);\n };\n process(node);\n });\n }\n each$k(newWrappers, function (node) {\n var getChildCount = function (node) {\n var count = 0;\n each$k(node.childNodes, function (node) {\n if (!isEmptyTextNode$1(node) && !isBookmarkNode$1(node)) {\n count++;\n }\n });\n return count;\n };\n var mergeStyles = function (node) {\n var childElement = find$3(node.childNodes, isElementNode).filter(function (child) {\n return matchName$1(dom, child, format);\n });\n return childElement.map(function (child) {\n var 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 var 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(dom, format, vars, node);\n }\n });\n };\n if (dom.getContentEditable(selection.getNode()) === 'false') {\n node = selection.getNode();\n for (var i = 0, l = formatList.length; i < l; i++) {\n var formatItem = formatList[i];\n if (formatItem.ceFalseOverride && isSelectorFormat(formatItem) && dom.is(node, formatItem.selector)) {\n setElementFormat(node, formatItem);\n break;\n }\n }\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 var rng = dom.createRng();\n rng.setStartBefore(node);\n rng.setEndAfter(node);\n applyRngStyle(dom, expandRng(ed, rng, formatList), true);\n }\n } else {\n applyRngStyle(dom, node, true);\n }\n } else {\n if (!isCollapsed || !isInlineFormat(format) || getCellsFromEditor(ed).length) {\n var curSelNode = selection.getNode();\n var firstFormat = formatList[0];\n if (!ed.settings.forced_root_block && firstFormat.defaultBlock && !dom.getParent(curSelNode, dom.isBlock)) {\n applyFormat$1(ed, firstFormat.defaultBlock);\n }\n selection.setRng(normalize(selection.getRng()));\n preserve(selection, true, function () {\n runOnRanges(ed, function (selectionRng, fake) {\n var expandedRng = fake ? selectionRng : expandRng(ed, selectionRng, formatList);\n applyRngStyle(dom, expandedRng, false);\n });\n });\n moveStart(dom, selection, selection.getRng());\n ed.nodeChanged();\n } else {\n applyCaretFormat(ed, name, vars);\n }\n }\n postProcess$1(name, ed);\n }\n fireFormatApply(ed, name, node, vars);\n };\n\n var hasVars = function (value) {\n return has$2(value, 'vars');\n };\n var setup$j = function (registeredFormatListeners, editor) {\n registeredFormatListeners.set({});\n editor.on('NodeChange', function (e) {\n updateAndFireChangeCallbacks(editor, e.element, registeredFormatListeners.get());\n });\n editor.on('FormatApply FormatRemove', function (e) {\n var element = Optional.from(e.node).map(function (nodeOrRange) {\n return isNode(nodeOrRange) ? nodeOrRange : nodeOrRange.startContainer;\n }).bind(function (node) {\n return isElement$5(node) ? Optional.some(node) : Optional.from(node.parentElement);\n }).getOrThunk(function () {\n return fallbackElement(editor);\n });\n updateAndFireChangeCallbacks(editor, element, registeredFormatListeners.get());\n });\n };\n var fallbackElement = function (editor) {\n return editor.selection.getStart();\n };\n var matchingNode = function (editor, parents, format, similar, vars) {\n var isMatchingNode = function (node) {\n var matchingFormat = editor.formatter.matchNode(node, format, vars !== null && vars !== void 0 ? vars : {}, similar);\n return !isUndefined(matchingFormat);\n };\n var isUnableToMatch = function (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 var getParents = function (editor, elm) {\n var element = elm !== null && elm !== void 0 ? elm : fallbackElement(editor);\n return filter$4(getParents$2(editor.dom, element), function (node) {\n return isElement$5(node) && !isBogus$2(node);\n });\n };\n var updateAndFireChangeCallbacks = function (editor, elm, registeredCallbacks) {\n var parents = getParents(editor, elm);\n each$j(registeredCallbacks, function (data, format) {\n var runIfChanged = function (spec) {\n var match = matchingNode(editor, parents, format, spec.similar, hasVars(spec) ? spec.vars : undefined);\n var isSet = match.isSome();\n if (spec.state.get() !== isSet) {\n spec.state.set(isSet);\n var node_1 = match.getOr(elm);\n if (hasVars(spec)) {\n spec.callback(isSet, {\n node: node_1,\n format: format,\n parents: parents\n });\n } else {\n each$k(spec.callbacks, function (callback) {\n return callback(isSet, {\n node: node_1,\n format: format,\n parents: parents\n });\n });\n }\n }\n };\n each$k([\n data.withSimilar,\n data.withoutSimilar\n ], runIfChanged);\n each$k(data.withVars, runIfChanged);\n });\n };\n var addListeners = function (editor, registeredFormatListeners, formats, callback, similar, vars) {\n var formatChangeItems = registeredFormatListeners.get();\n each$k(formats.split(','), function (format) {\n var group = get$9(formatChangeItems, format).getOrThunk(function () {\n var 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 var getCurrent = function () {\n var parents = getParents(editor);\n return matchingNode(editor, parents, format, similar, vars).isSome();\n };\n if (isUndefined(vars)) {\n var 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: similar,\n vars: vars,\n callback: callback\n });\n }\n });\n registeredFormatListeners.set(formatChangeItems);\n };\n var removeListeners = function (registeredFormatListeners, formats, callback) {\n var formatChangeItems = registeredFormatListeners.get();\n each$k(formats.split(','), function (format) {\n return get$9(formatChangeItems, format).each(function (group) {\n formatChangeItems[format] = {\n withSimilar: __assign(__assign({}, group.withSimilar), {\n callbacks: filter$4(group.withSimilar.callbacks, function (cb) {\n return cb !== callback;\n })\n }),\n withoutSimilar: __assign(__assign({}, group.withoutSimilar), {\n callbacks: filter$4(group.withoutSimilar.callbacks, function (cb) {\n return cb !== callback;\n })\n }),\n withVars: filter$4(group.withVars, function (item) {\n return item.callback !== callback;\n })\n };\n });\n });\n registeredFormatListeners.set(formatChangeItems);\n };\n var formatChangedInternal = function (editor, registeredFormatListeners, formats, callback, similar, vars) {\n if (registeredFormatListeners.get() === null) {\n setup$j(registeredFormatListeners, editor);\n }\n addListeners(editor, registeredFormatListeners, formats, callback, similar, vars);\n return {\n unbind: function () {\n return removeListeners(registeredFormatListeners, formats, callback);\n }\n };\n };\n\n var toggle = function (editor, name, vars, node) {\n var fmt = editor.formatter.get(name);\n if (match$2(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) {\n remove$1(editor, name, vars, node);\n } else {\n applyFormat$1(editor, name, vars, node);\n }\n };\n\n var fromElements = function (elements, scope) {\n var doc = scope || document;\n var fragment = doc.createDocumentFragment();\n each$k(elements, function (element) {\n fragment.appendChild(element.dom);\n });\n return SugarElement.fromDom(fragment);\n };\n\n var tableModel = function (element, width, rows) {\n return {\n element: element,\n width: width,\n rows: rows\n };\n };\n var tableRow = function (element, cells) {\n return {\n element: element,\n cells: cells\n };\n };\n var cellPosition = function (x, y) {\n return {\n x: x,\n y: y\n };\n };\n var getSpan = function (td, key) {\n var value = parseInt(get$6(td, key), 10);\n return isNaN(value) ? 1 : value;\n };\n var fillout = function (table, x, y, tr, td) {\n var rowspan = getSpan(td, 'rowspan');\n var colspan = getSpan(td, 'colspan');\n var rows = table.rows;\n for (var y2 = y; y2 < y + rowspan; y2++) {\n if (!rows[y2]) {\n rows[y2] = tableRow(deep$1(tr), []);\n }\n for (var x2 = x; x2 < x + colspan; x2++) {\n var cells = rows[y2].cells;\n cells[x2] = y2 === y && x2 === x ? td : shallow(td);\n }\n }\n };\n var cellExists = function (table, x, y) {\n var rows = table.rows;\n var cells = rows[y] ? rows[y].cells : [];\n return !!cells[x];\n };\n var skipCellsX = function (table, x, y) {\n while (cellExists(table, x, y)) {\n x++;\n }\n return x;\n };\n var getWidth = function (rows) {\n return foldl(rows, function (acc, row) {\n return row.cells.length > acc ? row.cells.length : acc;\n }, 0);\n };\n var findElementPos = function (table, element) {\n var rows = table.rows;\n for (var y = 0; y < rows.length; y++) {\n var cells = rows[y].cells;\n for (var 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 var extractRows = function (table, sx, sy, ex, ey) {\n var newRows = [];\n var rows = table.rows;\n for (var y = sy; y <= ey; y++) {\n var cells = rows[y].cells;\n var 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 var subTable = function (table, startPos, endPos) {\n var sx = startPos.x, sy = startPos.y;\n var ex = endPos.x, ey = endPos.y;\n var 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 var createDomTable = function (table, rows) {\n var tableElement = shallow(table.element);\n var tableBody = SugarElement.fromTag('tbody');\n append(tableBody, rows);\n append$1(tableElement, tableBody);\n return tableElement;\n };\n var modelRowsToDomRows = function (table) {\n return map$3(table.rows, function (row) {\n var cells = map$3(row.cells, function (cell) {\n var td = deep$1(cell);\n remove$6(td, 'colspan');\n remove$6(td, 'rowspan');\n return td;\n });\n var tr = shallow(row.element);\n append(tr, cells);\n return tr;\n });\n };\n var fromDom = function (tableElm) {\n var table = tableModel(shallow(tableElm), 0, []);\n each$k(descendants(tableElm, 'tr'), function (tr, y) {\n each$k(descendants(tr, 'td,th'), function (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 var toDom = function (table) {\n return createDomTable(table, modelRowsToDomRows(table));\n };\n var subsection = function (table, startElement, endElement) {\n return findElementPos(table, startElement).bind(function (startPos) {\n return findElementPos(table, endElement).map(function (endPos) {\n return subTable(table, startPos, endPos);\n });\n });\n };\n\n var findParentListContainer = function (parents) {\n return find$3(parents, function (elm) {\n return name(elm) === 'ul' || name(elm) === 'ol';\n });\n };\n var getFullySelectedListWrappers = function (parents, rng) {\n return find$3(parents, function (elm) {\n return name(elm) === 'li' && hasAllContentsSelected(elm, rng);\n }).fold(constant([]), function (_li) {\n return findParentListContainer(parents).map(function (listCont) {\n var listElm = SugarElement.fromTag(name(listCont));\n var listStyles = filter$3(getAllRaw(listCont), function (_style, name) {\n return startsWith(name, 'list-style');\n });\n setAll(listElm, listStyles);\n return [\n SugarElement.fromTag('li'),\n listElm\n ];\n }).getOr([]);\n });\n };\n var wrap = function (innerElm, elms) {\n var wrapped = foldl(elms, function (acc, elm) {\n append$1(elm, acc);\n return elm;\n }, innerElm);\n return elms.length > 0 ? fromElements([wrapped]) : wrapped;\n };\n var directListWrappers = function (commonAnchorContainer) {\n if (isListItem(commonAnchorContainer)) {\n return parent(commonAnchorContainer).filter(isList).fold(constant([]), function (listElm) {\n return [\n commonAnchorContainer,\n listElm\n ];\n });\n } else {\n return isList(commonAnchorContainer) ? [commonAnchorContainer] : [];\n }\n };\n var getWrapElements = function (rootNode, rng) {\n var commonAnchorContainer = SugarElement.fromDom(rng.commonAncestorContainer);\n var parents = parentsAndSelf(commonAnchorContainer, rootNode);\n var wrapElements = filter$4(parents, function (elm) {\n return isInline$1(elm) || isHeading(elm);\n });\n var listWrappers = getFullySelectedListWrappers(parents, rng);\n var allWrappers = wrapElements.concat(listWrappers.length ? listWrappers : directListWrappers(commonAnchorContainer));\n return map$3(allWrappers, shallow);\n };\n var emptyFragment = function () {\n return fromElements([]);\n };\n var getFragmentFromRange = function (rootNode, rng) {\n return wrap(SugarElement.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng));\n };\n var getParentTable = function (rootElm, cell) {\n return ancestor$2(cell, 'table', curry(eq, rootElm));\n };\n var getTableFragment = function (rootNode, selectedTableCells) {\n return getParentTable(rootNode, selectedTableCells[0]).bind(function (tableElm) {\n var firstCell = selectedTableCells[0];\n var lastCell = selectedTableCells[selectedTableCells.length - 1];\n var fullTableModel = fromDom(tableElm);\n return subsection(fullTableModel, firstCell, lastCell).map(function (sectionedTableModel) {\n return fromElements([toDom(sectionedTableModel)]);\n });\n }).getOrThunk(emptyFragment);\n };\n var getSelectionFragment = function (rootNode, ranges) {\n return ranges.length > 0 && ranges[0].collapsed ? emptyFragment() : getFragmentFromRange(rootNode, ranges[0]);\n };\n var read$3 = function (rootNode, ranges) {\n var selectedCells = getCellsFromElementOrRanges(ranges, rootNode);\n return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges);\n };\n\n var trimLeadingCollapsibleText = function (text) {\n return text.replace(/^[ \\f\\n\\r\\t\\v]+/, '');\n };\n var isCollapsibleWhitespace = function (text, index) {\n return index >= 0 && index < text.length && isWhiteSpace(text.charAt(index));\n };\n var getInnerText = function (bin, shouldTrim) {\n var text = trim$2(bin.innerText);\n return shouldTrim ? trimLeadingCollapsibleText(text) : text;\n };\n var getContextNodeName = function (parentBlockOpt) {\n return parentBlockOpt.map(function (block) {\n return block.nodeName;\n }).getOr('div').toLowerCase();\n };\n var getTextContent = function (editor) {\n return Optional.from(editor.selection.getRng()).map(function (rng) {\n var parentBlockOpt = Optional.from(editor.dom.getParent(rng.commonAncestorContainer, editor.dom.isBlock));\n var body = editor.getBody();\n var contextNodeName = getContextNodeName(parentBlockOpt);\n var shouldTrimSpaces = Env.browser.isIE() && contextNodeName !== 'pre';\n var bin = editor.dom.add(body, contextNodeName, {\n 'data-mce-bogus': 'all',\n 'style': 'overflow: hidden; opacity: 0;'\n }, rng.cloneContents());\n var text = getInnerText(bin, shouldTrimSpaces);\n var nonRenderedText = trim$2(bin.textContent);\n editor.dom.remove(bin);\n if (isCollapsibleWhitespace(nonRenderedText, 0) || isCollapsibleWhitespace(nonRenderedText, nonRenderedText.length - 1)) {\n var parentBlock = parentBlockOpt.getOr(body);\n var parentBlockText = getInnerText(parentBlock, shouldTrimSpaces);\n var textIndex = parentBlockText.indexOf(text);\n if (textIndex === -1) {\n return text;\n } else {\n var hasProceedingSpace = isCollapsibleWhitespace(parentBlockText, textIndex - 1);\n var hasTrailingSpace = isCollapsibleWhitespace(parentBlockText, textIndex + text.length);\n return (hasProceedingSpace ? ' ' : '') + text + (hasTrailingSpace ? ' ' : '');\n }\n } else {\n return text;\n }\n }).getOr('');\n };\n var getSerializedContent = function (editor, args) {\n var rng = editor.selection.getRng(), tmpElm = editor.dom.create('body');\n var sel = editor.selection.getSel();\n var ranges = processRanges(editor, getRanges(sel));\n var fragment = args.contextual ? read$3(SugarElement.fromDom(editor.getBody()), ranges).dom : rng.cloneContents();\n if (fragment) {\n tmpElm.appendChild(fragment);\n }\n return editor.selection.serializer.serialize(tmpElm, args);\n };\n var setupArgs$1 = function (args, format) {\n return __assign(__assign({}, args), {\n format: format,\n get: true,\n selection: true\n });\n };\n var getSelectedContentInternal = function (editor, format, args) {\n if (args === void 0) {\n args = {};\n }\n var defaultedArgs = setupArgs$1(args, format);\n var updatedArgs = editor.fire('BeforeGetContent', defaultedArgs);\n if (updatedArgs.isDefaultPrevented()) {\n editor.fire('GetContent', updatedArgs);\n return updatedArgs.content;\n }\n if (updatedArgs.format === 'text') {\n return getTextContent(editor);\n } else {\n updatedArgs.getInner = true;\n var content = getSerializedContent(editor, updatedArgs);\n if (updatedArgs.format === 'tree') {\n return content;\n } else {\n updatedArgs.content = editor.selection.isCollapsed() ? '' : content;\n editor.fire('GetContent', updatedArgs);\n return updatedArgs.content;\n }\n }\n };\n\n var KEEP = 0, INSERT = 1, DELETE = 2;\n var diff = function (left, right) {\n var size = left.length + right.length + 2;\n var vDown = new Array(size);\n var vUp = new Array(size);\n var snake = function (start, end, diag) {\n return {\n start: start,\n end: end,\n diag: diag\n };\n };\n var buildScript = function (start1, end1, start2, end2, script) {\n var 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 var i = start1;\n var 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 (var 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 var buildSnake = function (start, diag, end1, end2) {\n var 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 var getMiddleSnake = function (start1, end1, start2, end2) {\n var m = end1 - start1;\n var n = end2 - start2;\n if (m === 0 || n === 0) {\n return null;\n }\n var delta = m - n;\n var sum = n + m;\n var offset = (sum % 2 === 0 ? sum : sum + 1) / 2;\n vDown[1 + offset] = start1;\n vUp[1 + offset] = end1 + 1;\n var 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 };\n var script = [];\n buildScript(0, left.length, 0, right.length, script);\n return script;\n };\n\n var getOuterHtml = function (elm) {\n if (isElement$5(elm)) {\n return elm.outerHTML;\n } else if (isText$7(elm)) {\n return Entities.encodeRaw(elm.data, false);\n } else if (isComment(elm)) {\n return '';\n }\n return '';\n };\n var createFragment = function (html) {\n var node;\n var container = document.createElement('div');\n var 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 var insertAt = function (elm, html, index) {\n var fragment = createFragment(html);\n if (elm.hasChildNodes() && index < elm.childNodes.length) {\n var target = elm.childNodes[index];\n target.parentNode.insertBefore(fragment, target);\n } else {\n elm.appendChild(fragment);\n }\n };\n var removeAt = function (elm, index) {\n if (elm.hasChildNodes() && index < elm.childNodes.length) {\n var target = elm.childNodes[index];\n target.parentNode.removeChild(target);\n }\n };\n var applyDiff = function (diff, elm) {\n var index = 0;\n each$k(diff, function (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 var read$2 = function (elm) {\n return filter$4(map$3(from(elm.childNodes), getOuterHtml), function (item) {\n return item.length > 0;\n });\n };\n var write = function (fragments, elm) {\n var currentFragments = map$3(from(elm.childNodes), getOuterHtml);\n applyDiff(diff(currentFragments, fragments), elm);\n return elm;\n };\n\n var lazyTempDocument = cached(function () {\n return document.implementation.createHTMLDocument('undo');\n });\n var hasIframes = function (html) {\n return html.indexOf('') !== -1;\n };\n var createFragmentedLevel = function (fragments) {\n return {\n type: 'fragmented',\n fragments: fragments,\n content: '',\n bookmark: null,\n beforeBookmark: null\n };\n };\n var createCompleteLevel = function (content) {\n return {\n type: 'complete',\n fragments: null,\n content: content,\n bookmark: null,\n beforeBookmark: null\n };\n };\n var createFromEditor = function (editor) {\n var fragments = read$2(editor.getBody());\n var trimmedFragments = bind(fragments, function (html) {\n var trimmed = trimInternal(editor.serializer, html);\n return trimmed.length > 0 ? [trimmed] : [];\n });\n var content = trimmedFragments.join('');\n return hasIframes(content) ? createFragmentedLevel(trimmedFragments) : createCompleteLevel(content);\n };\n var applyToEditor = function (editor, level, before) {\n var 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 editor.selection.moveToBookmark(bookmark);\n };\n var getLevelContent = function (level) {\n return level.type === 'fragmented' ? level.fragments.join('') : level.content;\n };\n var getCleanLevelContent = function (level) {\n var elm = SugarElement.fromTag('body', lazyTempDocument());\n set(elm, getLevelContent(level));\n each$k(descendants(elm, '*[data-mce-bogus]'), unwrap);\n return get$3(elm);\n };\n var hasEqualContent = function (level1, level2) {\n return getLevelContent(level1) === getLevelContent(level2);\n };\n var hasEqualCleanedContent = function (level1, level2) {\n return getCleanLevelContent(level1) === getCleanLevelContent(level2);\n };\n var isEq$1 = function (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 var isUnlocked = function (locks) {\n return locks.get() === 0;\n };\n\n var setTyping = function (undoManager, typing, locks) {\n if (isUnlocked(locks)) {\n undoManager.typing = typing;\n }\n };\n var endTyping = function (undoManager, locks) {\n if (undoManager.typing) {\n setTyping(undoManager, false, locks);\n undoManager.add();\n }\n };\n var endTypingLevelIgnoreLocks = function (undoManager) {\n if (undoManager.typing) {\n undoManager.typing = false;\n undoManager.add();\n }\n };\n\n var beforeChange$1 = function (editor, locks, beforeBookmark) {\n if (isUnlocked(locks)) {\n beforeBookmark.set(getUndoBookmark(editor.selection));\n }\n };\n var addUndoLevel$1 = function (editor, undoManager, index, locks, beforeBookmark, level, event) {\n var currentLevel = createFromEditor(editor);\n level = level || {};\n level = Tools.extend(level, currentLevel);\n if (isUnlocked(locks) === false || editor.removed) {\n return null;\n }\n var lastLevel = undoManager.data[index.get()];\n if (editor.fire('BeforeAddUndo', {\n level: level,\n lastLevel: lastLevel,\n originalEvent: event\n }).isDefaultPrevented()) {\n return null;\n }\n if (lastLevel && isEq$1(lastLevel, level)) {\n return null;\n }\n if (undoManager.data[index.get()]) {\n beforeBookmark.get().each(function (bm) {\n undoManager.data[index.get()].beforeBookmark = bm;\n });\n }\n var customUndoRedoLevels = getCustomUndoRedoLevels(editor);\n if (customUndoRedoLevels) {\n if (undoManager.data.length > customUndoRedoLevels) {\n for (var 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 level.bookmark = getUndoBookmark(editor.selection);\n if (index.get() < undoManager.data.length - 1) {\n undoManager.data.length = index.get() + 1;\n }\n undoManager.data.push(level);\n index.set(undoManager.data.length - 1);\n var args = {\n level: level,\n lastLevel: lastLevel,\n originalEvent: event\n };\n if (index.get() > 0) {\n editor.setDirty(true);\n editor.fire('AddUndo', args);\n editor.fire('change', args);\n } else {\n editor.fire('AddUndo', args);\n }\n return level;\n };\n var clear$1 = function (editor, undoManager, index) {\n undoManager.data = [];\n index.set(0);\n undoManager.typing = false;\n editor.fire('ClearUndos');\n };\n var extra$1 = function (editor, undoManager, index, callback1, callback2) {\n if (undoManager.transact(callback1)) {\n var bookmark = undoManager.data[index.get()].bookmark;\n var 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 var redo$1 = function (editor, index, data) {\n var 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.fire('Redo', { level: level });\n }\n return level;\n };\n var undo$1 = function (editor, undoManager, locks, index) {\n var 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.fire('Undo', { level: level });\n }\n return level;\n };\n var reset$1 = function (undoManager) {\n undoManager.clear();\n undoManager.add();\n };\n var hasUndo$1 = function (editor, undoManager, index) {\n return index.get() > 0 || undoManager.typing && undoManager.data[0] && !isEq$1(createFromEditor(editor), undoManager.data[0]);\n };\n var hasRedo$1 = function (undoManager, index) {\n return index.get() < undoManager.data.length - 1 && !undoManager.typing;\n };\n var transact$1 = function (undoManager, locks, callback) {\n endTyping(undoManager, locks);\n undoManager.beforeChange();\n undoManager.ignore(callback);\n return undoManager.add();\n };\n var ignore$1 = function (locks, callback) {\n try {\n locks.set(locks.get() + 1);\n callback();\n } finally {\n locks.set(locks.get() - 1);\n }\n };\n\n var addVisualInternal = function (editor, elm) {\n var dom = editor.dom;\n var scope = isNonNullable(elm) ? elm : editor.getBody();\n if (isUndefined(editor.hasVisual)) {\n editor.hasVisual = isVisualAidsEnabled(editor);\n }\n each$k(dom.select('table,a', scope), function (matchedElm) {\n switch (matchedElm.nodeName) {\n case 'TABLE':\n var cls = getVisualAidsTableClass(editor);\n var 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 var value_1 = dom.getAttrib(matchedElm, 'name') || matchedElm.id;\n var cls_1 = getVisualAidsAnchorClass(editor);\n if (value_1 && editor.hasVisual) {\n dom.addClass(matchedElm, cls_1);\n } else {\n dom.removeClass(matchedElm, cls_1);\n }\n }\n break;\n }\n });\n editor.fire('VisualAid', {\n element: elm,\n hasVisual: editor.hasVisual\n });\n };\n\n var makePlainAdaptor = function (editor) {\n return {\n undoManager: {\n beforeChange: function (locks, beforeBookmark) {\n return beforeChange$1(editor, locks, beforeBookmark);\n },\n add: function (undoManager, index, locks, beforeBookmark, level, event) {\n return addUndoLevel$1(editor, undoManager, index, locks, beforeBookmark, level, event);\n },\n undo: function (undoManager, locks, index) {\n return undo$1(editor, undoManager, locks, index);\n },\n redo: function (index, data) {\n return redo$1(editor, index, data);\n },\n clear: function (undoManager, index) {\n return clear$1(editor, undoManager, index);\n },\n reset: function (undoManager) {\n return reset$1(undoManager);\n },\n hasUndo: function (undoManager, index) {\n return hasUndo$1(editor, undoManager, index);\n },\n hasRedo: function (undoManager, index) {\n return hasRedo$1(undoManager, index);\n },\n transact: function (undoManager, locks, callback) {\n return transact$1(undoManager, locks, callback);\n },\n ignore: function (locks, callback) {\n return ignore$1(locks, callback);\n },\n extra: function (undoManager, index, callback1, callback2) {\n return extra$1(editor, undoManager, index, callback1, callback2);\n }\n },\n formatter: {\n match: function (name, vars, node, similar) {\n return match$2(editor, name, vars, node, similar);\n },\n matchAll: function (names, vars) {\n return matchAll(editor, names, vars);\n },\n matchNode: function (node, name, vars, similar) {\n return matchNode(editor, node, name, vars, similar);\n },\n canApply: function (name) {\n return canApply(editor, name);\n },\n closest: function (names) {\n return closest(editor, names);\n },\n apply: function (name, vars, node) {\n return applyFormat$1(editor, name, vars, node);\n },\n remove: function (name, vars, node, similar) {\n return remove$1(editor, name, vars, node, similar);\n },\n toggle: function (name, vars, node) {\n return toggle(editor, name, vars, node);\n },\n formatChanged: function (registeredFormatListeners, formats, callback, similar, vars) {\n return formatChangedInternal(editor, registeredFormatListeners, formats, callback, similar, vars);\n }\n },\n editor: {\n getContent: function (args, format) {\n return getContentInternal(editor, args, format);\n },\n setContent: function (content, args) {\n return setContentInternal(editor, content, args);\n },\n insertContent: function (value, details) {\n return insertHtmlAtCaret(editor, value, details);\n },\n addVisual: function (elm) {\n return addVisualInternal(editor, elm);\n }\n },\n selection: {\n getContent: function (format, args) {\n return getSelectedContentInternal(editor, format, args);\n }\n },\n raw: {\n getModel: function () {\n return Optional.none();\n }\n }\n };\n };\n var makeRtcAdaptor = function (rtcEditor) {\n var defaultVars = function (vars) {\n return isObject(vars) ? vars : {};\n };\n var undoManager = rtcEditor.undoManager, formatter = rtcEditor.formatter, editor = rtcEditor.editor, selection = rtcEditor.selection, raw = rtcEditor.raw;\n return {\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: function (_undoManager, _locks, fn) {\n return undoManager.transact(fn);\n },\n ignore: function (_locks, callback) {\n return undoManager.ignore(callback);\n },\n extra: function (_undoManager, _index, callback1, callback2) {\n return undoManager.extra(callback1, callback2);\n }\n },\n formatter: {\n match: function (name, vars, _node, similar) {\n return formatter.match(name, defaultVars(vars), similar);\n },\n matchAll: formatter.matchAll,\n matchNode: formatter.matchNode,\n canApply: function (name) {\n return formatter.canApply(name);\n },\n closest: function (names) {\n return formatter.closest(names);\n },\n apply: function (name, vars, _node) {\n return formatter.apply(name, defaultVars(vars));\n },\n remove: function (name, vars, _node, _similar) {\n return formatter.remove(name, defaultVars(vars));\n },\n toggle: function (name, vars, _node) {\n return formatter.toggle(name, defaultVars(vars));\n },\n formatChanged: function (_rfl, formats, callback, similar, vars) {\n return formatter.formatChanged(formats, callback, similar, vars);\n }\n },\n editor: {\n getContent: function (args, _format) {\n return editor.getContent(args);\n },\n setContent: function (content, args) {\n return editor.setContent(content, args);\n },\n insertContent: function (content, _details) {\n return editor.insertContent(content);\n },\n addVisual: editor.addVisual\n },\n selection: {\n getContent: function (_format, args) {\n return selection.getContent(args);\n }\n },\n raw: {\n getModel: function () {\n return Optional.some(raw.getRawModel());\n }\n }\n };\n };\n var makeNoopAdaptor = function () {\n var nul = constant(null);\n var empty = constant('');\n return {\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: empty,\n insertContent: noop,\n addVisual: noop\n },\n selection: { getContent: empty },\n raw: { getModel: constant(Optional.none()) }\n };\n };\n var isRtc = function (editor) {\n return has$2(editor.plugins, 'rtc');\n };\n var getRtcSetup = function (editor) {\n return get$9(editor.plugins, 'rtc').bind(function (rtcPlugin) {\n return Optional.from(rtcPlugin.setup);\n });\n };\n var setup$i = function (editor) {\n var editorCast = editor;\n return getRtcSetup(editor).fold(function () {\n editorCast.rtcInstance = makePlainAdaptor(editor);\n return Optional.none();\n }, function (setup) {\n editorCast.rtcInstance = makeNoopAdaptor();\n return Optional.some(function () {\n return setup().then(function (rtcEditor) {\n editorCast.rtcInstance = makeRtcAdaptor(rtcEditor);\n return rtcEditor.rtc.isRemote;\n });\n });\n });\n };\n var getRtcInstanceWithFallback = function (editor) {\n return editor.rtcInstance ? editor.rtcInstance : makePlainAdaptor(editor);\n };\n var getRtcInstanceWithError = function (editor) {\n var 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 var beforeChange = function (editor, locks, beforeBookmark) {\n getRtcInstanceWithError(editor).undoManager.beforeChange(locks, beforeBookmark);\n };\n var addUndoLevel = function (editor, undoManager, index, locks, beforeBookmark, level, event) {\n return getRtcInstanceWithError(editor).undoManager.add(undoManager, index, locks, beforeBookmark, level, event);\n };\n var undo = function (editor, undoManager, locks, index) {\n return getRtcInstanceWithError(editor).undoManager.undo(undoManager, locks, index);\n };\n var redo = function (editor, index, data) {\n return getRtcInstanceWithError(editor).undoManager.redo(index, data);\n };\n var clear = function (editor, undoManager, index) {\n getRtcInstanceWithError(editor).undoManager.clear(undoManager, index);\n };\n var reset = function (editor, undoManager) {\n getRtcInstanceWithError(editor).undoManager.reset(undoManager);\n };\n var hasUndo = function (editor, undoManager, index) {\n return getRtcInstanceWithError(editor).undoManager.hasUndo(undoManager, index);\n };\n var hasRedo = function (editor, undoManager, index) {\n return getRtcInstanceWithError(editor).undoManager.hasRedo(undoManager, index);\n };\n var transact = function (editor, undoManager, locks, callback) {\n return getRtcInstanceWithError(editor).undoManager.transact(undoManager, locks, callback);\n };\n var ignore = function (editor, locks, callback) {\n getRtcInstanceWithError(editor).undoManager.ignore(locks, callback);\n };\n var extra = function (editor, undoManager, index, callback1, callback2) {\n getRtcInstanceWithError(editor).undoManager.extra(undoManager, index, callback1, callback2);\n };\n var matchFormat = function (editor, name, vars, node, similar) {\n return getRtcInstanceWithError(editor).formatter.match(name, vars, node, similar);\n };\n var matchAllFormats = function (editor, names, vars) {\n return getRtcInstanceWithError(editor).formatter.matchAll(names, vars);\n };\n var matchNodeFormat = function (editor, node, name, vars, similar) {\n return getRtcInstanceWithError(editor).formatter.matchNode(node, name, vars, similar);\n };\n var canApplyFormat = function (editor, name) {\n return getRtcInstanceWithError(editor).formatter.canApply(name);\n };\n var closestFormat = function (editor, names) {\n return getRtcInstanceWithError(editor).formatter.closest(names);\n };\n var applyFormat = function (editor, name, vars, node) {\n getRtcInstanceWithError(editor).formatter.apply(name, vars, node);\n };\n var removeFormat = function (editor, name, vars, node, similar) {\n getRtcInstanceWithError(editor).formatter.remove(name, vars, node, similar);\n };\n var toggleFormat = function (editor, name, vars, node) {\n getRtcInstanceWithError(editor).formatter.toggle(name, vars, node);\n };\n var formatChanged = function (editor, registeredFormatListeners, formats, callback, similar, vars) {\n return getRtcInstanceWithError(editor).formatter.formatChanged(registeredFormatListeners, formats, callback, similar, vars);\n };\n var getContent$2 = function (editor, args, format) {\n return getRtcInstanceWithFallback(editor).editor.getContent(args, format);\n };\n var setContent$2 = function (editor, content, args) {\n return getRtcInstanceWithFallback(editor).editor.setContent(content, args);\n };\n var insertContent = function (editor, value, details) {\n return getRtcInstanceWithFallback(editor).editor.insertContent(value, details);\n };\n var getSelectedContent = function (editor, format, args) {\n return getRtcInstanceWithError(editor).selection.getContent(format, args);\n };\n var addVisual$1 = function (editor, elm) {\n return getRtcInstanceWithError(editor).editor.addVisual(elm);\n };\n\n var getContent$1 = function (editor, args) {\n if (args === void 0) {\n args = {};\n }\n var format = args.format ? args.format : 'html';\n return getSelectedContent(editor, format, args);\n };\n\n var removeEmpty = function (text) {\n if (text.dom.length === 0) {\n remove$7(text);\n return Optional.none();\n } else {\n return Optional.some(text);\n }\n };\n var walkPastBookmark = function (node, start) {\n return node.filter(function (elm) {\n return BookmarkManager.isBookmarkNode(elm.dom);\n }).bind(start ? nextSibling : prevSibling);\n };\n var merge = function (outer, inner, rng, start) {\n var outerElm = outer.dom;\n var innerElm = inner.dom;\n var oldLength = start ? outerElm.length : innerElm.length;\n if (start) {\n mergeTextNodes(outerElm, innerElm, false, !start);\n rng.setStart(innerElm, oldLength);\n } else {\n mergeTextNodes(innerElm, outerElm, false, !start);\n rng.setEnd(innerElm, oldLength);\n }\n };\n var normalizeTextIfRequired = function (inner, start) {\n parent(inner).each(function (root) {\n var text = inner.dom;\n if (start && needsToBeNbspLeft(root, CaretPosition(text, 0))) {\n normalizeWhitespaceAfter(text, 0);\n } else if (!start && needsToBeNbspRight(root, CaretPosition(text, text.length))) {\n normalizeWhitespaceBefore(text, text.length);\n }\n });\n };\n var mergeAndNormalizeText = function (outerNode, innerNode, rng, start) {\n outerNode.bind(function (outer) {\n var normalizer = start ? normalizeWhitespaceBefore : normalizeWhitespaceAfter;\n normalizer(outer.dom, start ? outer.dom.length : 0);\n return innerNode.filter(isText$8).map(function (inner) {\n return merge(outer, inner, rng, start);\n });\n }).orThunk(function () {\n var innerTextNode = walkPastBookmark(innerNode, start).or(innerNode).filter(isText$8);\n return innerTextNode.map(function (inner) {\n return normalizeTextIfRequired(inner, start);\n });\n });\n };\n var rngSetContent = function (rng, fragment) {\n var firstChild = Optional.from(fragment.firstChild).map(SugarElement.fromDom);\n var lastChild = Optional.from(fragment.lastChild).map(SugarElement.fromDom);\n rng.deleteContents();\n rng.insertNode(fragment);\n var prevText = firstChild.bind(prevSibling).filter(isText$8).bind(removeEmpty);\n var nextText = lastChild.bind(nextSibling).filter(isText$8).bind(removeEmpty);\n mergeAndNormalizeText(prevText, firstChild, rng, true);\n mergeAndNormalizeText(nextText, lastChild, rng, false);\n rng.collapse(false);\n };\n var setupArgs = function (args, content) {\n return __assign(__assign({ format: 'html' }, args), {\n set: true,\n selection: true,\n content: content\n });\n };\n var cleanContent = function (editor, args) {\n if (args.format !== 'raw') {\n var rng = editor.selection.getRng();\n var contextBlock = editor.dom.getParent(rng.commonAncestorContainer, editor.dom.isBlock);\n var contextArgs = contextBlock ? { context: contextBlock.nodeName.toLowerCase() } : {};\n var node = editor.parser.parse(args.content, __assign(__assign({\n isRootContent: true,\n forced_root_block: false\n }, contextArgs), args));\n return HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(node);\n } else {\n return args.content;\n }\n };\n var setContent$1 = function (editor, content, args) {\n if (args === void 0) {\n args = {};\n }\n var defaultedArgs = setupArgs(args, content);\n var updatedArgs = defaultedArgs;\n if (!defaultedArgs.no_events) {\n var eventArgs = editor.fire('BeforeSetContent', defaultedArgs);\n if (eventArgs.isDefaultPrevented()) {\n editor.fire('SetContent', eventArgs);\n return;\n } else {\n updatedArgs = eventArgs;\n }\n }\n updatedArgs.content = cleanContent(editor, updatedArgs);\n var rng = editor.selection.getRng();\n rngSetContent(rng, rng.createContextualFragment(updatedArgs.content));\n editor.selection.setRng(rng);\n scrollRangeIntoView(editor, rng);\n if (!updatedArgs.no_events) {\n editor.fire('SetContent', updatedArgs);\n }\n };\n\n var deleteFromCallbackMap = function (callbackMap, selector, callback) {\n if (callbackMap && has$2(callbackMap, selector)) {\n var newCallbacks = filter$4(callbackMap[selector], function (cb) {\n return cb !== callback;\n });\n if (newCallbacks.length === 0) {\n delete callbackMap[selector];\n } else {\n callbackMap[selector] = newCallbacks;\n }\n }\n };\n function SelectorChanged (dom, editor) {\n var selectorChangedData;\n var currentSelectors;\n var findMatchingNode = function (selector, nodes) {\n return find$3(nodes, function (node) {\n return dom.is(node, selector);\n });\n };\n var getParents = function (elem) {\n return dom.getParents(elem, null, dom.getRoot());\n };\n return {\n selectorChangedWithUnbind: function (selector, callback) {\n if (!selectorChangedData) {\n selectorChangedData = {};\n currentSelectors = {};\n editor.on('NodeChange', function (e) {\n var node = e.element;\n var parents = getParents(node);\n var matchedSelectors = {};\n Tools.each(selectorChangedData, function (callbacks, selector) {\n findMatchingNode(selector, parents).each(function (node) {\n if (!currentSelectors[selector]) {\n each$k(callbacks, function (callback) {\n callback(true, {\n node: node,\n selector: selector,\n parents: parents\n });\n });\n currentSelectors[selector] = callbacks;\n }\n matchedSelectors[selector] = callbacks;\n });\n });\n Tools.each(currentSelectors, function (callbacks, selector) {\n if (!matchedSelectors[selector]) {\n delete currentSelectors[selector];\n Tools.each(callbacks, function (callback) {\n callback(false, {\n node: node,\n selector: selector,\n parents: parents\n });\n });\n }\n });\n });\n }\n if (!selectorChangedData[selector]) {\n selectorChangedData[selector] = [];\n }\n selectorChangedData[selector].push(callback);\n findMatchingNode(selector, getParents(editor.selection.getStart())).each(function () {\n currentSelectors[selector] = selectorChangedData[selector];\n });\n return {\n unbind: function () {\n deleteFromCallbackMap(selectorChangedData, selector, callback);\n deleteFromCallbackMap(currentSelectors, selector, callback);\n }\n };\n }\n };\n }\n\n var isNativeIeSelection = function (rng) {\n return !!rng.select;\n };\n var isAttachedToDom = function (node) {\n return !!(node && node.ownerDocument) && contains$1(SugarElement.fromDom(node.ownerDocument), SugarElement.fromDom(node));\n };\n var isValidRange = function (rng) {\n if (!rng) {\n return false;\n } else if (isNativeIeSelection(rng)) {\n return true;\n } else {\n return isAttachedToDom(rng.startContainer) && isAttachedToDom(rng.endContainer);\n }\n };\n var EditorSelection = function (dom, win, serializer, editor) {\n var selectedRange;\n var explicitRange;\n var selectorChangedWithUnbind = SelectorChanged(dom, editor).selectorChangedWithUnbind;\n var setCursorLocation = function (node, offset) {\n var 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 var getContent = function (args) {\n return getContent$1(editor, args);\n };\n var setContent = function (content, args) {\n return setContent$1(editor, content, args);\n };\n var getStart$1 = function (real) {\n return getStart(editor.getBody(), getRng$1(), real);\n };\n var getEnd$1 = function (real) {\n return getEnd(editor.getBody(), getRng$1(), real);\n };\n var getBookmark = function (type, normalized) {\n return bookmarkManager.getBookmark(type, normalized);\n };\n var moveToBookmark = function (bookmark) {\n return bookmarkManager.moveToBookmark(bookmark);\n };\n var select$1 = function (node, content) {\n select(dom, node, content).each(setRng);\n return node;\n };\n var isCollapsed = function () {\n var 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 var collapse = function (toStart) {\n var rng = getRng$1();\n rng.collapse(!!toStart);\n setRng(rng);\n };\n var getSel = function () {\n return win.getSelection ? win.getSelection() : win.document.selection;\n };\n var getRng$1 = function () {\n var selection, rng, elm;\n var tryCompareBoundaryPoints = function (how, sourceRange, destinationRange) {\n try {\n return sourceRange.compareBoundaryPoints(how, destinationRange);\n } catch (ex) {\n return -1;\n }\n };\n var doc = win.document;\n if (editor.bookmark !== undefined && hasFocus(editor) === false) {\n var bookmark = getRng(editor);\n if (bookmark.isSome()) {\n return bookmark.map(function (r) {\n return processRanges(editor, [r])[0];\n }).getOr(doc.createRange());\n }\n }\n try {\n if ((selection = getSel()) && !isRestrictedNode(selection.anchorNode)) {\n if (selection.rangeCount > 0) {\n rng = selection.getRangeAt(0);\n } else {\n rng = selection.createRange ? selection.createRange() : doc.createRange();\n }\n rng = processRanges(editor, [rng])[0];\n }\n } catch (ex) {\n }\n if (!rng) {\n rng = doc.createRange ? doc.createRange() : doc.body.createTextRange();\n }\n if (rng.setStart && rng.startContainer.nodeType === 9 && rng.collapsed) {\n 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 var setRng = function (rng, forward) {\n var node;\n if (!isValidRange(rng)) {\n return;\n }\n var ieRange = isNativeIeSelection(rng) ? rng : null;\n if (ieRange) {\n explicitRange = null;\n try {\n ieRange.select();\n } catch (ex) {\n }\n return;\n }\n var sel = getSel();\n var evt = editor.fire('SetSelectionRange', {\n range: rng,\n forward: forward\n });\n rng = evt.range;\n if (sel) {\n explicitRange = rng;\n try {\n sel.removeAllRanges();\n sel.addRange(rng);\n } catch (ex) {\n }\n if (forward === false && sel.extend) {\n sel.collapse(rng.endContainer, rng.endOffset);\n sel.extend(rng.startContainer, rng.startOffset);\n }\n selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;\n }\n if (!rng.collapsed && rng.startContainer === rng.endContainer && sel.setBaseAndExtent && !Env.ie) {\n if (rng.endOffset - rng.startOffset < 2) {\n if (rng.startContainer.hasChildNodes()) {\n node = rng.startContainer.childNodes[rng.startOffset];\n if (node && node.tagName === '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.fire('AfterSetSelectionRange', {\n range: rng,\n forward: forward\n });\n };\n var setNode = function (elm) {\n setContent(dom.getOuterHTML(elm));\n return elm;\n };\n var getNode$1 = function () {\n return getNode(editor.getBody(), getRng$1());\n };\n var getSelectedBlocks$1 = function (startElm, endElm) {\n return getSelectedBlocks(dom, getRng$1(), startElm, endElm);\n };\n var isForward = function () {\n var sel = getSel();\n var anchorNode = sel === null || sel === void 0 ? void 0 : sel.anchorNode;\n var focusNode = sel === null || sel === void 0 ? void 0 : sel.focusNode;\n if (!sel || !anchorNode || !focusNode || isRestrictedNode(anchorNode) || isRestrictedNode(focusNode)) {\n return true;\n }\n var anchorRange = dom.createRng();\n anchorRange.setStart(anchorNode, sel.anchorOffset);\n anchorRange.collapse(true);\n var focusRange = dom.createRng();\n focusRange.setStart(focusNode, sel.focusOffset);\n focusRange.collapse(true);\n return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0;\n };\n var normalize = function () {\n var rng = getRng$1();\n var sel = getSel();\n if (!hasMultipleRanges(sel) && hasAnyRanges(editor)) {\n var normRng = normalize$2(dom, rng);\n normRng.each(function (normRng) {\n setRng(normRng, isForward());\n });\n return normRng.getOr(rng);\n }\n return rng;\n };\n var selectorChanged = function (selector, callback) {\n selectorChangedWithUnbind(selector, callback);\n return exports;\n };\n var getScrollContainer = function () {\n var scrollContainer;\n var 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 var scrollIntoView = function (elm, alignToTop) {\n if (isNonNullable(elm)) {\n scrollElementIntoView(editor, elm, alignToTop);\n } else {\n scrollRangeIntoView(editor, getRng$1(), alignToTop);\n }\n };\n var placeCaretAt = function (clientX, clientY) {\n return setRng(fromPoint(clientX, clientY, editor.getDoc()));\n };\n var getBoundingClientRect = function () {\n var rng = getRng$1();\n return rng.collapsed ? CaretPosition.fromRangeStart(rng).getClientRects()[0] : rng.getBoundingClientRect();\n };\n var destroy = function () {\n win = selectedRange = explicitRange = null;\n controlSelection.destroy();\n };\n var exports = {\n bookmarkManager: null,\n controlSelection: null,\n dom: dom,\n win: win,\n serializer: serializer,\n editor: editor,\n collapse: collapse,\n setCursorLocation: setCursorLocation,\n getContent: getContent,\n setContent: setContent,\n getBookmark: getBookmark,\n moveToBookmark: moveToBookmark,\n select: select$1,\n isCollapsed: isCollapsed,\n isForward: isForward,\n setNode: setNode,\n getNode: getNode$1,\n getSel: getSel,\n setRng: setRng,\n getRng: getRng$1,\n getStart: getStart$1,\n getEnd: getEnd$1,\n getSelectedBlocks: getSelectedBlocks$1,\n normalize: normalize,\n selectorChanged: selectorChanged,\n selectorChangedWithUnbind: selectorChangedWithUnbind,\n getScrollContainer: getScrollContainer,\n scrollIntoView: scrollIntoView,\n placeCaretAt: placeCaretAt,\n getBoundingClientRect: getBoundingClientRect,\n destroy: destroy\n };\n var bookmarkManager = BookmarkManager(exports);\n var controlSelection = ControlSelection(exports, editor);\n exports.bookmarkManager = bookmarkManager;\n exports.controlSelection = controlSelection;\n return exports;\n };\n\n var removeAttrs = function (node, names) {\n each$k(names, function (name) {\n node.attr(name, null);\n });\n };\n var addFontToSpansFilter = function (domParser, styles, fontSizes) {\n domParser.addNodeFilter('font', function (nodes) {\n each$k(nodes, function (node) {\n var props = styles.parse(node.attr('style'));\n var color = node.attr('color');\n var face = node.attr('face');\n var 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 props['font-size'] = fontSizes[parseInt(node.attr('size'), 10) - 1];\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 var addStrikeToSpanFilter = function (domParser, styles) {\n domParser.addNodeFilter('strike', function (nodes) {\n each$k(nodes, function (node) {\n var 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 var addFilters = function (domParser, settings) {\n var styles = Styles();\n if (settings.convert_fonts_to_spans) {\n addFontToSpansFilter(domParser, styles, Tools.explode(settings.font_size_legacy_values));\n }\n addStrikeToSpanFilter(domParser, styles);\n };\n var register$2 = function (domParser, settings) {\n if (settings.inline_styles) {\n addFilters(domParser, settings);\n }\n };\n\n var blobUriToBlob = function (url) {\n return new promiseObj(function (resolve, reject) {\n var rejectWithError = function () {\n reject('Cannot convert ' + url + ' to Blob. Resource might not exist or is inaccessible.');\n };\n try {\n var xhr_1 = new XMLHttpRequest();\n xhr_1.open('GET', url, true);\n xhr_1.responseType = 'blob';\n xhr_1.onload = function () {\n if (xhr_1.status === 200) {\n resolve(xhr_1.response);\n } else {\n rejectWithError();\n }\n };\n xhr_1.onerror = rejectWithError;\n xhr_1.send();\n } catch (ex) {\n rejectWithError();\n }\n });\n };\n var parseDataUri = function (uri) {\n var type;\n var uriParts = decodeURIComponent(uri).split(',');\n var matches = /data:([^;]+)/.exec(uriParts[0]);\n if (matches) {\n type = matches[1];\n }\n return {\n type: type,\n data: uriParts[1]\n };\n };\n var buildBlob = function (type, data) {\n var str;\n try {\n str = atob(data);\n } catch (e) {\n return Optional.none();\n }\n var arr = new Uint8Array(str.length);\n for (var i = 0; i < arr.length; i++) {\n arr[i] = str.charCodeAt(i);\n }\n return Optional.some(new Blob([arr], { type: type }));\n };\n var dataUriToBlob = function (uri) {\n return new promiseObj(function (resolve) {\n var _a = parseDataUri(uri), type = _a.type, data = _a.data;\n buildBlob(type, data).fold(function () {\n return resolve(new Blob([]));\n }, resolve);\n });\n };\n var uriToBlob = function (url) {\n if (url.indexOf('blob:') === 0) {\n return blobUriToBlob(url);\n }\n if (url.indexOf('data:') === 0) {\n return dataUriToBlob(url);\n }\n return null;\n };\n var blobToDataUri = function (blob) {\n return new promiseObj(function (resolve) {\n var reader = new FileReader();\n reader.onloadend = function () {\n resolve(reader.result);\n };\n reader.readAsDataURL(blob);\n });\n };\n\n var count$1 = 0;\n var uniqueId = function (prefix) {\n return (prefix || 'blobid') + count$1++;\n };\n var imageToBlobInfo = function (blobCache, img, resolve, reject) {\n var base64, blobInfo;\n if (img.src.indexOf('blob:') === 0) {\n blobInfo = blobCache.getByUri(img.src);\n if (blobInfo) {\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n } else {\n uriToBlob(img.src).then(function (blob) {\n blobToDataUri(blob).then(function (dataUri) {\n base64 = parseDataUri(dataUri).data;\n blobInfo = blobCache.create(uniqueId(), blob, base64);\n blobCache.add(blobInfo);\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n });\n }, function (err) {\n reject(err);\n });\n }\n return;\n }\n var _a = parseDataUri(img.src), data = _a.data, type = _a.type;\n base64 = data;\n blobInfo = blobCache.getByData(base64, type);\n if (blobInfo) {\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n } else {\n uriToBlob(img.src).then(function (blob) {\n blobInfo = blobCache.create(uniqueId(), blob, base64);\n blobCache.add(blobInfo);\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n }, function (err) {\n reject(err);\n });\n }\n };\n var getAllImages = function (elm) {\n return elm ? from(elm.getElementsByTagName('img')) : [];\n };\n var ImageScanner = function (uploadStatus, blobCache) {\n var cachedPromises = {};\n var findAll = function (elm, predicate) {\n if (!predicate) {\n predicate = always;\n }\n var images = filter$4(getAllImages(elm), function (img) {\n var src = img.src;\n if (!Env.fileApi) {\n return false;\n }\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 (src.indexOf('blob:') === 0) {\n return !uploadStatus.isUploaded(src) && predicate(img);\n }\n if (src.indexOf('data:') === 0) {\n return predicate(img);\n }\n return false;\n });\n var promises = map$3(images, function (img) {\n if (cachedPromises[img.src] !== undefined) {\n return new promiseObj(function (resolve) {\n cachedPromises[img.src].then(function (imageInfo) {\n if (typeof imageInfo === 'string') {\n return imageInfo;\n }\n resolve({\n image: img,\n blobInfo: imageInfo.blobInfo\n });\n });\n });\n }\n var newPromise = new promiseObj(function (resolve, reject) {\n imageToBlobInfo(blobCache, img, resolve, reject);\n }).then(function (result) {\n delete cachedPromises[result.image.src];\n return result;\n }).catch(function (error) {\n delete cachedPromises[img.src];\n return error;\n });\n cachedPromises[img.src] = newPromise;\n return newPromise;\n });\n return promiseObj.all(promises);\n };\n return { findAll: findAll };\n };\n\n var paddEmptyNode = function (settings, args, blockElements, node) {\n var brPreferred = settings.padd_empty_with_br || args.insert;\n if (brPreferred && blockElements[node.name]) {\n node.empty().append(new AstNode('br', 1)).shortEnded = true;\n } else {\n node.empty().append(new AstNode('#text', 3)).value = nbsp;\n }\n };\n var isPaddedWithNbsp = function (node) {\n return hasOnlyChild(node, '#text') && node.firstChild.value === nbsp;\n };\n var hasOnlyChild = function (node, name) {\n return node && node.firstChild && node.firstChild === node.lastChild && node.firstChild.name === name;\n };\n var isPadded = function (schema, node) {\n var rule = schema.getElementRule(node.name);\n return rule && rule.paddEmpty;\n };\n var isEmpty = function (schema, nonEmptyElements, whitespaceElements, node) {\n return node.isEmpty(nonEmptyElements, whitespaceElements, function (node) {\n return isPadded(schema, node);\n });\n };\n var isLineBreakNode = function (node, blockElements) {\n return node && (has$2(blockElements, node.name) || node.name === 'br');\n };\n\n var isBogusImage = function (img) {\n return isNonNullable(img.attr('data-mce-bogus'));\n };\n var isInternalImageSource = function (img) {\n return img.attr('src') === Env.transparentSrc || isNonNullable(img.attr('data-mce-placeholder'));\n };\n var isValidDataImg = function (img, settings) {\n if (settings.images_dataimg_filter) {\n var imgElem_1 = new Image();\n imgElem_1.src = img.attr('src');\n each$j(img.attributes.map, function (value, key) {\n imgElem_1.setAttribute(key, value);\n });\n return settings.images_dataimg_filter(imgElem_1);\n } else {\n return true;\n }\n };\n var registerBase64ImageFilter = function (parser, settings) {\n var blobCache = settings.blob_cache;\n var processImage = function (img) {\n var inputSrc = img.attr('src');\n if (isInternalImageSource(img) || isBogusImage(img)) {\n return;\n }\n parseDataUri$1(inputSrc).filter(function () {\n return isValidDataImg(img, settings);\n }).bind(function (_a) {\n var type = _a.type, data = _a.data;\n return Optional.from(blobCache.getByData(data, type)).orThunk(function () {\n return buildBlob(type, data).map(function (blob) {\n var blobInfo = blobCache.create(uniqueId(), blob, data);\n blobCache.add(blobInfo);\n return blobInfo;\n });\n });\n }).each(function (blobInfo) {\n img.attr('src', blobInfo.blobUri());\n });\n };\n if (blobCache) {\n parser.addAttributeFilter('src', function (nodes) {\n return each$k(nodes, processImage);\n });\n }\n };\n var register$1 = function (parser, settings) {\n var schema = parser.schema;\n if (settings.remove_trailing_brs) {\n parser.addNodeFilter('br', function (nodes, _, args) {\n var i;\n var l = nodes.length;\n var node;\n var blockElements = Tools.extend({}, schema.getBlockElements());\n var nonEmptyElements = schema.getNonEmptyElements();\n var parent, lastParent, prev, prevName;\n var whiteSpaceElements = schema.getWhiteSpaceElements();\n var elementRule, textNode;\n blockElements.body = 1;\n for (i = 0; i < l; i++) {\n node = nodes[i];\n parent = node.parent;\n if (blockElements[node.parent.name] && node === parent.lastChild) {\n prev = node.prev;\n while (prev) {\n 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 elementRule = schema.getElementRule(parent.name);\n if (elementRule) {\n if (elementRule.removeEmpty) {\n parent.remove();\n } else if (elementRule.paddEmpty) {\n paddEmptyNode(settings, args, blockElements, parent);\n }\n }\n }\n }\n } else {\n 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 && settings.padd_empty_with_br !== true) {\n textNode = new AstNode('#text', 3);\n textNode.value = nbsp;\n node.replace(textNode);\n }\n }\n }\n });\n }\n parser.addAttributeFilter('href', function (nodes) {\n var i = nodes.length;\n var appendRel = function (rel) {\n var parts = rel.split(' ').filter(function (p) {\n return p.length > 0;\n });\n return parts.concat(['noopener']).sort().join(' ');\n };\n var addNoOpener = function (rel) {\n var 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 var 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', function (nodes) {\n var 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 do {\n prevSibling = sibling.prev;\n parent.insert(sibling, node);\n sibling = prevSibling;\n } while (sibling);\n }\n }\n });\n }\n if (settings.fix_list_elements) {\n parser.addNodeFilter('ul,ol', function (nodes) {\n var i = nodes.length, node, parentNode;\n while (i--) {\n node = nodes[i];\n parentNode = node.parent;\n if (parentNode.name === 'ul' || parentNode.name === 'ol') {\n if (node.prev && node.prev.name === 'li') {\n node.prev.append(node);\n } else {\n var li = new AstNode('li', 1);\n li.attr('style', 'list-style-type: none');\n node.wrap(li);\n }\n }\n }\n });\n }\n if (settings.validate && schema.getValidClasses()) {\n parser.addAttributeFilter('class', function (nodes) {\n var validClasses = schema.getValidClasses();\n var i = nodes.length;\n while (i--) {\n var node = nodes[i];\n var classList = node.attr('class').split(' ');\n var classValue = '';\n for (var ci = 0; ci < classList.length; ci++) {\n var className = classList[ci];\n var valid = false;\n var validClassesMap = validClasses['*'];\n if (validClassesMap && validClassesMap[className]) {\n valid = true;\n }\n validClassesMap = validClasses[node.name];\n if (!valid && validClassesMap && validClassesMap[className]) {\n valid = true;\n }\n if (valid) {\n if (classValue) {\n classValue += ' ';\n }\n classValue += className;\n }\n }\n if (!classValue.length) {\n classValue = null;\n }\n node.attr('class', classValue);\n }\n });\n }\n registerBase64ImageFilter(parser, settings);\n };\n\n var makeMap = Tools.makeMap, each$6 = Tools.each, explode$2 = Tools.explode, extend$4 = Tools.extend;\n var DomParser = function (settings, schema) {\n if (schema === void 0) {\n schema = Schema();\n }\n var nodeFilters = {};\n var attributeFilters = [];\n var matchedNodes = {};\n var matchedAttributes = {};\n settings = settings || {};\n settings.validate = 'validate' in settings ? settings.validate : true;\n settings.root_name = settings.root_name || 'body';\n var fixInvalidChildren = function (nodes) {\n var nonSplitableElements = makeMap('tr,td,th,tbody,thead,tfoot,table');\n var nonEmptyElements = schema.getNonEmptyElements();\n var whitespaceElements = schema.getWhiteSpaceElements();\n var textBlockElements = schema.getTextBlockElements();\n var specialElements = schema.getSpecialElements();\n var removeOrUnwrapInvalidNode = function (node, originalNodeParent) {\n if (originalNodeParent === void 0) {\n originalNodeParent = node.parent;\n }\n if (specialElements[node.name]) {\n node.empty().remove();\n } else {\n var children = node.children();\n for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {\n var childNode = children_1[_i];\n if (!schema.isValidChild(originalNodeParent.name, childNode.name)) {\n removeOrUnwrapInvalidNode(childNode, originalNodeParent);\n }\n }\n node.unwrap();\n }\n };\n for (var ni = 0; ni < nodes.length; ni++) {\n var node = nodes[ni];\n var parent_1 = void 0, newParent = void 0, tempNode = void 0;\n if (!node.parent || node.fixed) {\n continue;\n }\n if (textBlockElements[node.name] && node.parent.name === 'li') {\n var sibling = node.next;\n while (sibling) {\n if (textBlockElements[sibling.name]) {\n sibling.name = 'li';\n sibling.fixed = true;\n node.parent.insert(sibling, node.parent);\n } else {\n break;\n }\n sibling = sibling.next;\n }\n node.unwrap();\n continue;\n }\n var parents = [node];\n for (parent_1 = node.parent; parent_1 && !schema.isValidChild(parent_1.name, node.name) && !nonSplitableElements[parent_1.name]; parent_1 = parent_1.parent) {\n parents.push(parent_1);\n }\n if (parent_1 && parents.length > 1) {\n if (schema.isValidChild(parent_1.name, node.name)) {\n parents.reverse();\n newParent = filterNode(parents[0].clone());\n var currentNode = newParent;\n for (var i = 0; i < parents.length - 1; i++) {\n if (schema.isValidChild(currentNode.name, parents[i].name)) {\n tempNode = filterNode(parents[i].clone());\n currentNode.append(tempNode);\n } else {\n tempNode = currentNode;\n }\n for (var childNode = parents[i].firstChild; childNode && childNode !== parents[i + 1];) {\n var nextNode = childNode.next;\n tempNode.append(childNode);\n childNode = nextNode;\n }\n currentNode = tempNode;\n }\n if (!isEmpty(schema, nonEmptyElements, whitespaceElements, newParent)) {\n parent_1.insert(newParent, parents[0], true);\n parent_1.insert(node, newParent);\n } else {\n parent_1.insert(node, parents[0], true);\n }\n parent_1 = parents[0];\n if (isEmpty(schema, nonEmptyElements, whitespaceElements, parent_1) || hasOnlyChild(parent_1, 'br')) {\n parent_1.empty().remove();\n }\n } else {\n removeOrUnwrapInvalidNode(node);\n }\n } else if (node.parent) {\n if (node.name === 'li') {\n var 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')) {\n sibling.insert(node, sibling.firstChild, true);\n continue;\n }\n node.wrap(filterNode(new AstNode('ul', 1)));\n continue;\n }\n if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {\n node.wrap(filterNode(new AstNode('div', 1)));\n } else {\n removeOrUnwrapInvalidNode(node);\n }\n }\n }\n };\n var filterNode = function (node) {\n var name = node.name;\n if (name in nodeFilters) {\n var list = matchedNodes[name];\n if (list) {\n list.push(node);\n } else {\n matchedNodes[name] = [node];\n }\n }\n var i = attributeFilters.length;\n while (i--) {\n var attrName = attributeFilters[i].name;\n if (attrName in node.attributes.map) {\n var list = matchedAttributes[attrName];\n if (list) {\n list.push(node);\n } else {\n matchedAttributes[attrName] = [node];\n }\n }\n }\n return node;\n };\n var addNodeFilter = function (name, callback) {\n each$6(explode$2(name), function (name) {\n var list = nodeFilters[name];\n if (!list) {\n nodeFilters[name] = list = [];\n }\n list.push(callback);\n });\n };\n var getNodeFilters = function () {\n var out = [];\n for (var name_1 in nodeFilters) {\n if (has$2(nodeFilters, name_1)) {\n out.push({\n name: name_1,\n callbacks: nodeFilters[name_1]\n });\n }\n }\n return out;\n };\n var addAttributeFilter = function (name, callback) {\n each$6(explode$2(name), function (name) {\n var i;\n for (i = 0; i < attributeFilters.length; i++) {\n if (attributeFilters[i].name === name) {\n attributeFilters[i].callbacks.push(callback);\n return;\n }\n }\n attributeFilters.push({\n name: name,\n callbacks: [callback]\n });\n });\n };\n var getAttributeFilters = function () {\n return [].concat(attributeFilters);\n };\n var parse = function (html, args) {\n var nodes, i, l, fi, fl, list, name;\n var invalidChildren = [];\n var node;\n var getRootBlockName = function (name) {\n if (name === false) {\n return '';\n } else if (name === true) {\n return 'p';\n } else {\n return name;\n }\n };\n args = args || {};\n matchedNodes = {};\n matchedAttributes = {};\n var blockElements = extend$4(makeMap('script,style,head,html,body,title,meta,param'), schema.getBlockElements());\n var textRootBlockElements = getTextRootBlockElements(schema);\n var nonEmptyElements = schema.getNonEmptyElements();\n var children = schema.children;\n var validate = settings.validate;\n var forcedRootBlockName = 'forced_root_block' in args ? args.forced_root_block : settings.forced_root_block;\n var rootBlockName = getRootBlockName(forcedRootBlockName);\n var whiteSpaceElements = schema.getWhiteSpaceElements();\n var startWhiteSpaceRegExp = /^[ \\t\\r\\n]+/;\n var endWhiteSpaceRegExp = /[ \\t\\r\\n]+$/;\n var allWhiteSpaceRegExp = /[ \\t\\r\\n]+/g;\n var isAllWhiteSpaceRegExp = /^[ \\t\\r\\n]+$/;\n var isInWhiteSpacePreservedElement = has$2(whiteSpaceElements, args.context) || has$2(whiteSpaceElements, settings.root_name);\n var addRootBlocks = function () {\n var node = rootNode.firstChild, rootBlockNode = null;\n var trim = function (rootBlock) {\n if (rootBlock) {\n node = rootBlock.firstChild;\n if (node && node.type === 3) {\n node.value = node.value.replace(startWhiteSpaceRegExp, '');\n }\n node = rootBlock.lastChild;\n if (node && node.type === 3) {\n node.value = node.value.replace(endWhiteSpaceRegExp, '');\n }\n }\n };\n if (!schema.isValidChild(rootNode.name, rootBlockName.toLowerCase())) {\n return;\n }\n while (node) {\n var next = node.next;\n if (node.type === 3 || node.type === 1 && node.name !== 'p' && !blockElements[node.name] && !node.attr('data-mce-type')) {\n if (!rootBlockNode) {\n rootBlockNode = createNode(rootBlockName, 1);\n rootBlockNode.attr(settings.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 var createNode = function (name, type) {\n var node = new AstNode(name, type);\n var list;\n if (name in nodeFilters) {\n list = matchedNodes[name];\n if (list) {\n list.push(node);\n } else {\n matchedNodes[name] = [node];\n }\n }\n return node;\n };\n var removeWhitespaceBefore = function (node) {\n var blockElements = schema.getBlockElements();\n for (var textNode = node.prev; textNode && textNode.type === 3;) {\n var textVal = textNode.value.replace(endWhiteSpaceRegExp, '');\n if (textVal.length > 0) {\n textNode.value = textVal;\n return;\n }\n var textNodeNext = textNode.next;\n if (textNodeNext) {\n if (textNodeNext.type === 3 && textNodeNext.value.length) {\n textNode = textNode.prev;\n continue;\n }\n if (!blockElements[textNodeNext.name] && textNodeNext.name !== 'script' && textNodeNext.name !== 'style') {\n textNode = textNode.prev;\n continue;\n }\n }\n var sibling = textNode.prev;\n textNode.remove();\n textNode = sibling;\n }\n };\n var cloneAndExcludeBlocks = function (input) {\n var output = {};\n for (var name_2 in input) {\n if (name_2 !== 'li' && name_2 !== 'p') {\n output[name_2] = input[name_2];\n }\n }\n return output;\n };\n var isTextRootBlockEmpty = function (node) {\n var 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 var parser = SaxParser({\n validate: validate,\n document: settings.document,\n allow_html_data_urls: settings.allow_html_data_urls,\n allow_svg_data_urls: settings.allow_svg_data_urls,\n allow_script_urls: settings.allow_script_urls,\n allow_conditional_comments: settings.allow_conditional_comments,\n preserve_cdata: settings.preserve_cdata,\n self_closing_elements: cloneAndExcludeBlocks(schema.getSelfClosingElements()),\n cdata: function (text) {\n node.append(createNode('#cdata', 4)).value = text;\n },\n text: function (text, raw) {\n var textNode;\n if (!isInWhiteSpacePreservedElement) {\n text = text.replace(allWhiteSpaceRegExp, ' ');\n if (isLineBreakNode(node.lastChild, blockElements)) {\n text = text.replace(startWhiteSpaceRegExp, '');\n }\n }\n if (text.length !== 0) {\n textNode = createNode('#text', 3);\n textNode.raw = !!raw;\n node.append(textNode).value = text;\n }\n },\n comment: function (text) {\n node.append(createNode('#comment', 8)).value = text;\n },\n pi: function (name, text) {\n node.append(createNode(name, 7)).value = text;\n removeWhitespaceBefore(node);\n },\n doctype: function (text) {\n var newNode = node.append(createNode('#doctype', 10));\n newNode.value = text;\n removeWhitespaceBefore(node);\n },\n start: function (name, attrs, empty) {\n var elementRule = validate ? schema.getElementRule(name) : {};\n if (elementRule) {\n var newNode = createNode(elementRule.outputName || name, 1);\n newNode.attributes = attrs;\n newNode.shortEnded = empty;\n node.append(newNode);\n var parent_2 = children[node.name];\n if (parent_2 && children[newNode.name] && !parent_2[newNode.name]) {\n invalidChildren.push(newNode);\n }\n var attrFiltersLen = attributeFilters.length;\n while (attrFiltersLen--) {\n var attrName = attributeFilters[attrFiltersLen].name;\n if (attrName in attrs.map) {\n list = matchedAttributes[attrName];\n if (list) {\n list.push(newNode);\n } else {\n matchedAttributes[attrName] = [newNode];\n }\n }\n }\n if (blockElements[name]) {\n removeWhitespaceBefore(newNode);\n }\n if (!empty) {\n node = newNode;\n }\n if (!isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {\n isInWhiteSpacePreservedElement = true;\n }\n }\n },\n end: function (name) {\n var textNode, text, sibling;\n var elementRule = validate ? schema.getElementRule(name) : {};\n if (elementRule) {\n if (blockElements[name]) {\n if (!isInWhiteSpacePreservedElement) {\n textNode = node.firstChild;\n if (textNode && textNode.type === 3) {\n text = textNode.value.replace(startWhiteSpaceRegExp, '');\n if (text.length > 0) {\n textNode.value = text;\n textNode = textNode.next;\n } else {\n sibling = textNode.next;\n textNode.remove();\n textNode = sibling;\n while (textNode && textNode.type === 3) {\n text = textNode.value;\n sibling = textNode.next;\n if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {\n textNode.remove();\n textNode = sibling;\n }\n textNode = sibling;\n }\n }\n }\n textNode = node.lastChild;\n if (textNode && textNode.type === 3) {\n text = textNode.value.replace(endWhiteSpaceRegExp, '');\n if (text.length > 0) {\n textNode.value = text;\n textNode = textNode.prev;\n } else {\n sibling = textNode.prev;\n textNode.remove();\n textNode = sibling;\n while (textNode && textNode.type === 3) {\n text = textNode.value;\n sibling = textNode.prev;\n if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {\n textNode.remove();\n textNode = sibling;\n }\n textNode = sibling;\n }\n }\n }\n }\n }\n if (isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {\n isInWhiteSpacePreservedElement = false;\n }\n var isNodeEmpty = isEmpty(schema, nonEmptyElements, whiteSpaceElements, node);\n var parentNode = node.parent;\n if (elementRule.paddInEmptyBlock && isNodeEmpty && isTextRootBlockEmpty(node)) {\n paddEmptyNode(settings, args, blockElements, node);\n } else if (elementRule.removeEmpty && isNodeEmpty) {\n if (blockElements[node.name]) {\n node.empty().remove();\n } else {\n node.unwrap();\n }\n } else if (elementRule.paddEmpty && (isPaddedWithNbsp(node) || isNodeEmpty)) {\n paddEmptyNode(settings, args, blockElements, node);\n }\n node = parentNode;\n }\n }\n }, schema);\n var rootNode = node = new AstNode(args.context || settings.root_name, 11);\n parser.parse(html, args.format);\n if (validate && invalidChildren.length) {\n if (!args.context) {\n fixInvalidChildren(invalidChildren);\n } else {\n args.invalid = true;\n }\n }\n if (rootBlockName && (rootNode.name === 'body' || args.isRootContent)) {\n addRootBlocks();\n }\n if (!args.invalid) {\n for (name in matchedNodes) {\n if (!has$2(matchedNodes, name)) {\n continue;\n }\n list = nodeFilters[name];\n nodes = matchedNodes[name];\n fi = nodes.length;\n while (fi--) {\n if (!nodes[fi].parent) {\n nodes.splice(fi, 1);\n }\n }\n for (i = 0, l = list.length; i < l; i++) {\n list[i](nodes, name, args);\n }\n }\n for (i = 0, l = attributeFilters.length; i < l; i++) {\n list = attributeFilters[i];\n if (list.name in matchedAttributes) {\n nodes = matchedAttributes[list.name];\n fi = nodes.length;\n while (fi--) {\n if (!nodes[fi].parent) {\n nodes.splice(fi, 1);\n }\n }\n for (fi = 0, fl = list.callbacks.length; fi < fl; fi++) {\n list.callbacks[fi](nodes, list.name, args);\n }\n }\n }\n }\n return rootNode;\n };\n var exports = {\n schema: schema,\n addAttributeFilter: addAttributeFilter,\n getAttributeFilters: getAttributeFilters,\n addNodeFilter: addNodeFilter,\n getNodeFilters: getNodeFilters,\n filterNode: filterNode,\n parse: parse\n };\n register$1(exports, settings);\n register$2(exports, settings);\n return exports;\n };\n\n var register = function (htmlParser, settings, dom) {\n htmlParser.addAttributeFilter('data-mce-tabindex', function (nodes, name) {\n var i = nodes.length;\n while (i--) {\n var 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', function (nodes, name) {\n var internalName = 'data-mce-' + name;\n var urlConverter = settings.url_converter;\n var urlConverterScope = settings.url_converter_scope;\n var i = nodes.length;\n while (i--) {\n var node = nodes[i];\n var 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', function (nodes) {\n var i = nodes.length;\n while (i--) {\n var node = nodes[i];\n var value = node.attr('class');\n if (value) {\n value = node.attr('class').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', function (nodes, name, args) {\n var i = nodes.length;\n while (i--) {\n var node = nodes[i];\n if (node.attr('data-mce-type') === 'bookmark' && !args.cleanup) {\n var hasChildren = Optional.from(node.firstChild).exists(function (firstChild) {\n return !isZwsp(firstChild.value);\n });\n if (hasChildren) {\n node.unwrap();\n } else {\n node.remove();\n }\n }\n }\n });\n htmlParser.addNodeFilter('noscript', function (nodes) {\n var i = nodes.length;\n while (i--) {\n var node = nodes[i].firstChild;\n if (node) {\n node.value = Entities.decode(node.value);\n }\n }\n });\n htmlParser.addNodeFilter('script,style', function (nodes, name) {\n var trim = function (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 var i = nodes.length;\n while (i--) {\n var node = nodes[i];\n var value = node.firstChild ? node.firstChild.value : '';\n if (name === 'script') {\n var 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' && value.length > 0) {\n node.firstChild.value = '// ';\n }\n } else {\n if (settings.element_format === 'xhtml' && value.length > 0) {\n node.firstChild.value = '';\n }\n }\n }\n });\n htmlParser.addNodeFilter('#comment', function (nodes) {\n var i = nodes.length;\n while (i--) {\n var node = nodes[i];\n if (settings.preserve_cdata && node.value.indexOf('[CDATA[') === 0) {\n node.name = '#cdata';\n node.type = 4;\n node.value = dom.decode(node.value.replace(/^\\[CDATA\\[|\\]\\]$/g, ''));\n } else if (node.value.indexOf('mce:protected ') === 0) {\n node.name = '#text';\n node.type = 3;\n node.raw = true;\n node.value = unescape(node.value).substr(14);\n }\n }\n });\n htmlParser.addNodeFilter('xml:namespace,input', function (nodes, name) {\n var i = nodes.length;\n while (i--) {\n var 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', function (nodes) {\n each$k(nodes, function (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-type,data-mce-resize,data-mce-placeholder', function (nodes, name) {\n var i = nodes.length;\n while (i--) {\n nodes[i].attr(name, null);\n }\n });\n };\n var trimTrailingBr = function (rootNode) {\n var isBr = function (node) {\n return node && node.name === 'br';\n };\n var brNode1 = rootNode.lastChild;\n if (isBr(brNode1)) {\n var brNode2 = brNode1.prev;\n if (isBr(brNode2)) {\n brNode1.remove();\n brNode2.remove();\n }\n }\n };\n\n var preProcess = function (editor, node, args) {\n var oldDoc;\n var dom = editor.dom;\n var clonedNode = node.cloneNode(true);\n var impl = document.implementation;\n if (impl.createHTMLDocument) {\n var doc_1 = impl.createHTMLDocument('');\n Tools.each(clonedNode.nodeName === 'BODY' ? clonedNode.childNodes : [clonedNode], function (node) {\n doc_1.body.appendChild(doc_1.importNode(node, true));\n });\n if (clonedNode.nodeName !== 'BODY') {\n clonedNode = doc_1.body.firstChild;\n } else {\n clonedNode = doc_1.body;\n }\n oldDoc = dom.doc;\n dom.doc = doc_1;\n }\n firePreProcess(editor, __assign(__assign({}, args), { node: clonedNode }));\n if (oldDoc) {\n dom.doc = oldDoc;\n }\n return clonedNode;\n };\n var shouldFireEvent = function (editor, args) {\n return editor && editor.hasEventListeners('PreProcess') && !args.no_events;\n };\n var process = function (editor, node, args) {\n return shouldFireEvent(editor, args) ? preProcess(editor, node, args) : node;\n };\n\n var addTempAttr = function (htmlParser, tempAttrs, name) {\n if (Tools.inArray(tempAttrs, name) === -1) {\n htmlParser.addAttributeFilter(name, function (nodes, name) {\n var i = nodes.length;\n while (i--) {\n nodes[i].attr(name, null);\n }\n });\n tempAttrs.push(name);\n }\n };\n var postProcess = function (editor, args, content) {\n if (!args.no_events && editor) {\n var outArgs = firePostProcess(editor, __assign(__assign({}, args), { content: content }));\n return outArgs.content;\n } else {\n return content;\n }\n };\n var getHtmlFromNode = function (dom, node, args) {\n var html = trim$2(args.getInner ? node.innerHTML : dom.getOuterHTML(node));\n return args.selection || isWsPreserveElement(SugarElement.fromDom(node)) ? html : Tools.trim(html);\n };\n var parseHtml = function (htmlParser, html, args) {\n var parserArgs = args.selection ? __assign({ forced_root_block: false }, args) : args;\n var rootNode = htmlParser.parse(html, parserArgs);\n trimTrailingBr(rootNode);\n return rootNode;\n };\n var serializeNode = function (settings, schema, node) {\n var htmlSerializer = HtmlSerializer(settings, schema);\n return htmlSerializer.serialize(node);\n };\n var toHtml = function (editor, settings, schema, rootNode, args) {\n var content = serializeNode(settings, schema, rootNode);\n return postProcess(editor, args, content);\n };\n var DomSerializerImpl = function (settings, editor) {\n var tempAttrs = ['data-mce-selected'];\n var dom = editor && editor.dom ? editor.dom : DOMUtils.DOM;\n var schema = editor && editor.schema ? editor.schema : Schema(settings);\n settings.entity_encoding = settings.entity_encoding || 'named';\n settings.remove_trailing_brs = 'remove_trailing_brs' in settings ? settings.remove_trailing_brs : true;\n var htmlParser = DomParser(settings, schema);\n register(htmlParser, settings, dom);\n var serialize = function (node, parserArgs) {\n if (parserArgs === void 0) {\n parserArgs = {};\n }\n var args = __assign({ format: 'html' }, parserArgs);\n var targetNode = process(editor, node, args);\n var html = getHtmlFromNode(dom, targetNode, args);\n var rootNode = parseHtml(htmlParser, html, args);\n return args.format === 'tree' ? rootNode : toHtml(editor, settings, schema, rootNode, args);\n };\n return {\n schema: 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 };\n };\n\n var DomSerializer = function (settings, editor) {\n var 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 };\n };\n\n var defaultFormat = 'html';\n var getContent = function (editor, args) {\n if (args === void 0) {\n args = {};\n }\n var format = args.format ? args.format : defaultFormat;\n return getContent$2(editor, args, format);\n };\n\n var setContent = function (editor, content, args) {\n if (args === void 0) {\n args = {};\n }\n return setContent$2(editor, content, args);\n };\n\n var DOM$7 = DOMUtils.DOM;\n var restoreOriginalStyles = function (editor) {\n DOM$7.setStyle(editor.id, 'display', editor.orgDisplay);\n };\n var safeDestroy = function (x) {\n return Optional.from(x).each(function (x) {\n return x.destroy();\n });\n };\n var clearDomReferences = function (editor) {\n editor.contentAreaContainer = editor.formElement = editor.container = editor.editorContainer = null;\n editor.bodyElement = editor.contentDocument = editor.contentWindow = null;\n editor.iframeElement = editor.targetElm = null;\n if (editor.selection) {\n editor.selection = editor.selection.win = editor.selection.dom = editor.selection.dom.doc = null;\n }\n };\n var restoreForm = function (editor) {\n var form = editor.formElement;\n if (form) {\n if (form._mceOldSubmit) {\n form.submit = form._mceOldSubmit;\n form._mceOldSubmit = null;\n }\n DOM$7.unbind(form, 'submit reset', editor.formEventDelegate);\n }\n };\n var remove = function (editor) {\n if (!editor.removed) {\n var _selectionOverrides = editor._selectionOverrides, editorUpload = editor.editorUpload;\n var body = editor.getBody();\n var element = editor.getElement();\n if (body) {\n editor.save({ is_removing: true });\n }\n editor.removed = true;\n editor.unbindAllNativeEvents();\n if (editor.hasHiddenInput && element) {\n DOM$7.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$7.remove(editor.getContainer());\n safeDestroy(_selectionOverrides);\n safeDestroy(editorUpload);\n editor.destroy();\n }\n };\n var destroy = function (editor, automatic) {\n var selection = editor.selection, dom = editor.dom;\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 var deep = function (old, nu) {\n var bothObjects = isObject(old) && isObject(nu);\n return bothObjects ? deepMerge(old, nu) : nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n objects[_i] = arguments[_i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var 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 var deepMerge = baseMerge(deep);\n\n var deprecatedSettings = ('autoresize_on_init,content_editable_state,convert_fonts_to_spans,inline_styles,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,table_responsive_width,text_block_elements,text_inline_elements,toolbar_drawer,types,validate,whitespace_elements,' + 'paste_word_valid_elements,paste_retain_style_properties,paste_convert_word_fake_lists').split(',');\n var deprecatedPlugins = 'bbcode,colorpicker,contextmenu,fullpage,legacyoutput,spellchecker,textcolor'.split(',');\n var movedToPremiumPlugins = 'imagetools,toc'.split(',');\n var getDeprecatedSettings = function (settings) {\n var settingNames = filter$4(deprecatedSettings, function (setting) {\n return has$2(settings, setting);\n });\n var forcedRootBlock = settings.forced_root_block;\n if (forcedRootBlock === false || forcedRootBlock === '') {\n settingNames.push('forced_root_block (false only)');\n }\n return sort(settingNames);\n };\n var getDeprecatedPlugins = function (settings) {\n var plugins = Tools.makeMap(settings.plugins, ' ');\n var hasPlugin = function (plugin) {\n return has$2(plugins, plugin);\n };\n var pluginNames = __spreadArray(__spreadArray([], filter$4(deprecatedPlugins, hasPlugin), true), bind(movedToPremiumPlugins, function (plugin) {\n return hasPlugin(plugin) ? [plugin + ' (moving to premium)'] : [];\n }), true);\n return sort(pluginNames);\n };\n var logDeprecationsWarning = function (rawSettings, finalSettings) {\n var deprecatedSettings = getDeprecatedSettings(rawSettings);\n var deprecatedPlugins = getDeprecatedPlugins(finalSettings);\n var hasDeprecatedPlugins = deprecatedPlugins.length > 0;\n var hasDeprecatedSettings = deprecatedSettings.length > 0;\n var isLegacyMobileTheme = finalSettings.theme === 'mobile';\n if (hasDeprecatedPlugins || hasDeprecatedSettings || isLegacyMobileTheme) {\n var listJoiner = '\\n- ';\n var themesMessage = isLegacyMobileTheme ? '\\n\\nThemes:' + listJoiner + 'mobile' : '';\n var pluginsMessage = hasDeprecatedPlugins ? '\\n\\nPlugins:' + listJoiner + deprecatedPlugins.join(listJoiner) : '';\n var settingsMessage = hasDeprecatedSettings ? '\\n\\nSettings:' + listJoiner + deprecatedSettings.join(listJoiner) : '';\n console.warn('The following deprecated features are currently enabled, these will be removed in TinyMCE 6.0. ' + 'See https://www.tiny.cloud/docs/release-notes/6.0-upcoming-changes/ for more information.' + themesMessage + pluginsMessage + settingsMessage);\n }\n };\n\n var sectionResult = function (sections, settings) {\n return {\n sections: constant(sections),\n settings: constant(settings)\n };\n };\n var deviceDetection = detect().deviceType;\n var isTouch = deviceDetection.isTouch();\n var isPhone = deviceDetection.isPhone();\n var isTablet = deviceDetection.isTablet();\n var legacyMobilePlugins = [\n 'lists',\n 'autolink',\n 'autosave'\n ];\n var defaultTouchSettings = {\n table_grid: false,\n object_resizing: false,\n resize: false\n };\n var normalizePlugins = function (plugins) {\n var pluginNames = isArray$1(plugins) ? plugins.join(' ') : plugins;\n var trimmedPlugins = map$3(isString$1(pluginNames) ? pluginNames.split(' ') : [], trim$4);\n return filter$4(trimmedPlugins, function (item) {\n return item.length > 0;\n });\n };\n var filterLegacyMobilePlugins = function (plugins) {\n return filter$4(plugins, curry(contains$3, legacyMobilePlugins));\n };\n var extractSections = function (keys, settings) {\n var result = bifilter(settings, function (value, key) {\n return contains$3(keys, key);\n });\n return sectionResult(result.t, result.f);\n };\n var getSection = function (sectionResult, name, defaults) {\n if (defaults === void 0) {\n defaults = {};\n }\n var sections = sectionResult.sections();\n var sectionSettings = get$9(sections, name).getOr({});\n return Tools.extend({}, defaults, sectionSettings);\n };\n var hasSection = function (sectionResult, name) {\n return has$2(sectionResult.sections(), name);\n };\n var isSectionTheme = function (sectionResult, name, theme) {\n var section = sectionResult.sections();\n return hasSection(sectionResult, name) && section[name].theme === theme;\n };\n var getSectionConfig = function (sectionResult, name) {\n return hasSection(sectionResult, name) ? sectionResult.sections()[name] : {};\n };\n var getToolbarMode = function (settings, defaultVal) {\n return get$9(settings, 'toolbar_mode').orThunk(function () {\n return get$9(settings, 'toolbar_drawer').map(function (val) {\n return val === false ? 'wrap' : val;\n });\n }).getOr(defaultVal);\n };\n var getDefaultSettings = function (settings, id, documentBaseUrl, isTouch, editor) {\n var baseDefaults = {\n id: id,\n theme: 'silver',\n toolbar_mode: getToolbarMode(settings, 'floating'),\n plugins: '',\n document_base_url: documentBaseUrl,\n add_form_submit_trigger: true,\n submit_patch: true,\n add_unload_trigger: true,\n convert_urls: true,\n relative_urls: true,\n remove_script_host: true,\n object_resizing: true,\n doctype: '',\n visual: true,\n font_size_legacy_values: 'xx-small,small,medium,large,x-large,xx-large,300%',\n forced_root_block: 'p',\n hidden_input: true,\n inline_styles: true,\n convert_fonts_to_spans: true,\n indent: true,\n indent_before: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist',\n indent_after: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist',\n entity_encoding: 'named',\n url_converter: editor.convertURL,\n url_converter_scope: editor\n };\n return __assign(__assign({}, baseDefaults), isTouch ? defaultTouchSettings : {});\n };\n var getDefaultMobileSettings = function (mobileSettings, isPhone) {\n var defaultMobileSettings = {\n resize: false,\n toolbar_mode: getToolbarMode(mobileSettings, 'scrolling'),\n toolbar_sticky: false\n };\n var defaultPhoneSettings = { menubar: false };\n return __assign(__assign(__assign({}, defaultTouchSettings), defaultMobileSettings), isPhone ? defaultPhoneSettings : {});\n };\n var getExternalPlugins = function (overrideSettings, settings) {\n var userDefinedExternalPlugins = settings.external_plugins ? settings.external_plugins : {};\n if (overrideSettings && overrideSettings.external_plugins) {\n return Tools.extend({}, overrideSettings.external_plugins, userDefinedExternalPlugins);\n } else {\n return userDefinedExternalPlugins;\n }\n };\n var combinePlugins = function (forcedPlugins, plugins) {\n return [].concat(normalizePlugins(forcedPlugins)).concat(normalizePlugins(plugins));\n };\n var getPlatformPlugins = function (isMobileDevice, sectionResult, desktopPlugins, mobilePlugins) {\n if (isMobileDevice && isSectionTheme(sectionResult, 'mobile', 'mobile')) {\n return filterLegacyMobilePlugins(mobilePlugins);\n } else if (isMobileDevice && hasSection(sectionResult, 'mobile')) {\n return mobilePlugins;\n } else {\n return desktopPlugins;\n }\n };\n var processPlugins = function (isMobileDevice, sectionResult, defaultOverrideSettings, settings) {\n var forcedPlugins = normalizePlugins(defaultOverrideSettings.forced_plugins);\n var desktopPlugins = normalizePlugins(settings.plugins);\n var mobileConfig = getSectionConfig(sectionResult, 'mobile');\n var mobilePlugins = mobileConfig.plugins ? normalizePlugins(mobileConfig.plugins) : desktopPlugins;\n var platformPlugins = getPlatformPlugins(isMobileDevice, sectionResult, desktopPlugins, mobilePlugins);\n var combinedPlugins = combinePlugins(forcedPlugins, platformPlugins);\n if (Env.browser.isIE() && contains$3(combinedPlugins, 'rtc')) {\n throw new Error('RTC plugin is not supported on IE 11.');\n }\n return Tools.extend(settings, { plugins: combinedPlugins.join(' ') });\n };\n var isOnMobile = function (isMobileDevice, sectionResult) {\n return isMobileDevice && hasSection(sectionResult, 'mobile');\n };\n var combineSettings = function (isMobileDevice, isPhone, defaultSettings, defaultOverrideSettings, settings) {\n var defaultDeviceSettings = isMobileDevice ? { mobile: getDefaultMobileSettings(settings.mobile || {}, isPhone) } : {};\n var sectionResult = extractSections(['mobile'], deepMerge(defaultDeviceSettings, settings));\n var extendedSettings = Tools.extend(defaultSettings, defaultOverrideSettings, sectionResult.settings(), isOnMobile(isMobileDevice, sectionResult) ? getSection(sectionResult, 'mobile') : {}, {\n validate: true,\n external_plugins: getExternalPlugins(defaultOverrideSettings, sectionResult.settings())\n });\n return processPlugins(isMobileDevice, sectionResult, defaultOverrideSettings, extendedSettings);\n };\n var getEditorSettings = function (editor, id, documentBaseUrl, defaultOverrideSettings, settings) {\n var defaultSettings = getDefaultSettings(settings, id, documentBaseUrl, isTouch, editor);\n var finalSettings = combineSettings(isPhone || isTablet, isPhone, defaultSettings, defaultOverrideSettings, settings);\n if (finalSettings.deprecation_warnings !== false) {\n logDeprecationsWarning(settings, finalSettings);\n }\n return finalSettings;\n };\n var getFiltered = function (predicate, editor, name) {\n return Optional.from(editor.settings[name]).filter(predicate);\n };\n var getParamObject = function (value) {\n var output = {};\n if (typeof value === 'string') {\n each$k(value.indexOf('=') > 0 ? value.split(/[;,](?![^=;,]*(?:[;,]|$))/) : value.split(','), function (val) {\n var arr = val.split('=');\n if (arr.length > 1) {\n output[Tools.trim(arr[0])] = Tools.trim(arr[1]);\n } else {\n output[Tools.trim(arr[0])] = Tools.trim(arr[0]);\n }\n });\n } else {\n output = value;\n }\n return output;\n };\n var isArrayOf = function (p) {\n return function (a) {\n return isArray$1(a) && forall(a, p);\n };\n };\n var getParam = function (editor, name, defaultVal, type) {\n var value = name in editor.settings ? editor.settings[name] : defaultVal;\n if (type === 'hash') {\n return getParamObject(value);\n } else if (type === 'string') {\n return getFiltered(isString$1, editor, name).getOr(defaultVal);\n } else if (type === 'number') {\n return getFiltered(isNumber, editor, name).getOr(defaultVal);\n } else if (type === 'boolean') {\n return getFiltered(isBoolean, editor, name).getOr(defaultVal);\n } else if (type === 'object') {\n return getFiltered(isObject, editor, name).getOr(defaultVal);\n } else if (type === 'array') {\n return getFiltered(isArray$1, editor, name).getOr(defaultVal);\n } else if (type === 'string[]') {\n return getFiltered(isArrayOf(isString$1), editor, name).getOr(defaultVal);\n } else if (type === 'function') {\n return getFiltered(isFunction, editor, name).getOr(defaultVal);\n } else {\n return value;\n }\n };\n\n var CreateIconManager = function () {\n var lookup = {};\n var add = function (id, iconPack) {\n lookup[id] = iconPack;\n };\n var get = function (id) {\n if (lookup[id]) {\n return lookup[id];\n }\n return { icons: {} };\n };\n var has = function (id) {\n return has$2(lookup, id);\n };\n return {\n add: add,\n get: get,\n has: has\n };\n };\n var IconManager = CreateIconManager();\n\n var getProp = function (propName, elm) {\n var rawElm = elm.dom;\n return rawElm[propName];\n };\n var getComputedSizeProp = function (propName, elm) {\n return parseInt(get$5(elm, propName), 10);\n };\n var getClientWidth = curry(getProp, 'clientWidth');\n var getClientHeight = curry(getProp, 'clientHeight');\n var getMarginTop = curry(getComputedSizeProp, 'margin-top');\n var getMarginLeft = curry(getComputedSizeProp, 'margin-left');\n var getBoundingClientRect = function (elm) {\n return elm.dom.getBoundingClientRect();\n };\n var isInsideElementContentArea = function (bodyElm, clientX, clientY) {\n var clientWidth = getClientWidth(bodyElm);\n var clientHeight = getClientHeight(bodyElm);\n return clientX >= 0 && clientY >= 0 && clientX <= clientWidth && clientY <= clientHeight;\n };\n var transpose = function (inline, elm, clientX, clientY) {\n var clientRect = getBoundingClientRect(elm);\n var deltaX = inline ? clientRect.left + elm.dom.clientLeft + getMarginLeft(elm) : 0;\n var deltaY = inline ? clientRect.top + elm.dom.clientTop + getMarginTop(elm) : 0;\n var x = clientX - deltaX;\n var y = clientY - deltaY;\n return {\n x: x,\n y: y\n };\n };\n var isXYInContentArea = function (editor, clientX, clientY) {\n var bodyElm = SugarElement.fromDom(editor.getBody());\n var targetElm = editor.inline ? bodyElm : documentElement(bodyElm);\n var transposedPoint = transpose(editor.inline, targetElm, clientX, clientY);\n return isInsideElementContentArea(targetElm, transposedPoint.x, transposedPoint.y);\n };\n var fromDomSafe = function (node) {\n return Optional.from(node).map(SugarElement.fromDom);\n };\n var isEditorAttachedToDom = function (editor) {\n var rawContainer = editor.inline ? editor.getBody() : editor.getContentAreaContainer();\n return fromDomSafe(rawContainer).map(inBody).getOr(false);\n };\n\n var NotificationManagerImpl = function () {\n var unimplemented = function () {\n throw new Error('Theme did not provide a NotificationManager implementation.');\n };\n return {\n open: unimplemented,\n close: unimplemented,\n reposition: unimplemented,\n getArgs: unimplemented\n };\n };\n\n var NotificationManager = function (editor) {\n var notifications = [];\n var getImplementation = function () {\n var theme = editor.theme;\n return theme && theme.getNotificationManagerImpl ? theme.getNotificationManagerImpl() : NotificationManagerImpl();\n };\n var getTopNotification = function () {\n return Optional.from(notifications[0]);\n };\n var isEqual = function (a, b) {\n return a.type === b.type && a.text === b.text && !a.progressBar && !a.timeout && !b.progressBar && !b.timeout;\n };\n var reposition = function () {\n if (notifications.length > 0) {\n getImplementation().reposition(notifications);\n }\n };\n var addNotification = function (notification) {\n notifications.push(notification);\n };\n var closeNotification = function (notification) {\n findIndex$2(notifications, function (otherNotification) {\n return otherNotification === notification;\n }).each(function (index) {\n notifications.splice(index, 1);\n });\n };\n var open = function (spec, fireEvent) {\n if (fireEvent === void 0) {\n fireEvent = true;\n }\n if (editor.removed || !isEditorAttachedToDom(editor)) {\n return;\n }\n if (fireEvent) {\n editor.fire('BeforeOpenNotification', { notification: spec });\n }\n return find$3(notifications, function (notification) {\n return isEqual(getImplementation().getArgs(notification), spec);\n }).getOrThunk(function () {\n editor.editorManager.setActive(editor);\n var notification = getImplementation().open(spec, function () {\n closeNotification(notification);\n reposition();\n getTopNotification().fold(function () {\n return editor.focus();\n }, function (top) {\n return focus$1(SugarElement.fromDom(top.getEl()));\n });\n });\n addNotification(notification);\n reposition();\n editor.fire('OpenNotification', { notification: __assign({}, notification) });\n return notification;\n });\n };\n var close = function () {\n getTopNotification().each(function (notification) {\n getImplementation().close(notification);\n closeNotification(notification);\n reposition();\n });\n };\n var getNotifications = constant(notifications);\n var registerEvents = function (editor) {\n editor.on('SkinLoaded', function () {\n var 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', function () {\n Delay.requestAnimationFrame(reposition);\n });\n editor.on('remove', function () {\n each$k(notifications.slice(), function (notification) {\n getImplementation().close(notification);\n });\n });\n };\n registerEvents(editor);\n return {\n open: open,\n close: close,\n getNotifications: getNotifications\n };\n };\n\n var PluginManager = AddOnManager.PluginManager;\n\n var ThemeManager = AddOnManager.ThemeManager;\n\n function WindowManagerImpl () {\n var unimplemented = function () {\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 getParams: unimplemented,\n setParams: unimplemented\n };\n }\n\n var WindowManager = function (editor) {\n var dialogs = [];\n var getImplementation = function () {\n var theme = editor.theme;\n return theme && theme.getWindowManagerImpl ? theme.getWindowManagerImpl() : WindowManagerImpl();\n };\n var funcBind = function (scope, f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return f ? f.apply(scope, args) : undefined;\n };\n };\n var fireOpenEvent = function (dialog) {\n editor.fire('OpenWindow', { dialog: dialog });\n };\n var fireCloseEvent = function (dialog) {\n editor.fire('CloseWindow', { dialog: dialog });\n };\n var addDialog = function (dialog) {\n dialogs.push(dialog);\n fireOpenEvent(dialog);\n };\n var closeDialog = function (dialog) {\n fireCloseEvent(dialog);\n dialogs = filter$4(dialogs, function (otherDialog) {\n return otherDialog !== dialog;\n });\n if (dialogs.length === 0) {\n editor.focus();\n }\n };\n var getTopDialog = function () {\n return Optional.from(dialogs[dialogs.length - 1]);\n };\n var storeSelectionAndOpenDialog = function (openDialog) {\n editor.editorManager.setActive(editor);\n store(editor);\n var dialog = openDialog();\n addDialog(dialog);\n return dialog;\n };\n var open = function (args, params) {\n return storeSelectionAndOpenDialog(function () {\n return getImplementation().open(args, params, closeDialog);\n });\n };\n var openUrl = function (args) {\n return storeSelectionAndOpenDialog(function () {\n return getImplementation().openUrl(args, closeDialog);\n });\n };\n var alert = function (message, callback, scope) {\n var windowManagerImpl = getImplementation();\n windowManagerImpl.alert(message, funcBind(scope ? scope : windowManagerImpl, callback));\n };\n var confirm = function (message, callback, scope) {\n var windowManagerImpl = getImplementation();\n windowManagerImpl.confirm(message, funcBind(scope ? scope : windowManagerImpl, callback));\n };\n var close = function () {\n getTopDialog().each(function (dialog) {\n getImplementation().close(dialog);\n closeDialog(dialog);\n });\n };\n editor.on('remove', function () {\n each$k(dialogs, function (dialog) {\n getImplementation().close(dialog);\n });\n });\n return {\n open: open,\n openUrl: openUrl,\n alert: alert,\n confirm: confirm,\n close: close\n };\n };\n\n var displayNotification = function (editor, message) {\n editor.notificationManager.open({\n type: 'error',\n text: message\n });\n };\n var displayError = function (editor, message) {\n if (editor._skinLoaded) {\n displayNotification(editor, message);\n } else {\n editor.on('SkinLoaded', function () {\n displayNotification(editor, message);\n });\n }\n };\n var uploadError = function (editor, message) {\n displayError(editor, I18n.translate([\n 'Failed to upload image: {0}',\n message\n ]));\n };\n var logError = function (editor, errorType, msg) {\n fireError(editor, errorType, { message: msg });\n console.error(msg);\n };\n var createLoadError = function (type, url, name) {\n return name ? 'Failed to load ' + type + ': ' + name + ' from url ' + url : 'Failed to load ' + type + ' url: ' + url;\n };\n var pluginLoadError = function (editor, url, name) {\n logError(editor, 'PluginLoadError', createLoadError('plugin', url, name));\n };\n var iconsLoadError = function (editor, url, name) {\n logError(editor, 'IconsLoadError', createLoadError('icons', url, name));\n };\n var languageLoadError = function (editor, url, name) {\n logError(editor, 'LanguageLoadError', createLoadError('language', url, name));\n };\n var pluginInitError = function (editor, name, err) {\n var message = I18n.translate([\n 'Failed to initialize plugin: {0}',\n name\n ]);\n fireError(editor, 'PluginLoadError', { message: message });\n initError(message, err);\n displayError(editor, message);\n };\n var initError = function (message) {\n var x = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n x[_i - 1] = arguments[_i];\n }\n var console = window.console;\n if (console) {\n if (console.error) {\n console.error.apply(console, __spreadArray([message], x, false));\n } else {\n console.log.apply(console, __spreadArray([message], x, false));\n }\n }\n };\n\n var isContentCssSkinName = function (url) {\n return /^[a-z0-9\\-]+$/i.test(url);\n };\n var getContentCssUrls = function (editor) {\n return transformToUrls(editor, getContentCss(editor));\n };\n var getFontCssUrls = function (editor) {\n return transformToUrls(editor, getFontCss(editor));\n };\n var transformToUrls = function (editor, cssLinks) {\n var skinUrl = editor.editorManager.baseURL + '/skins/content';\n var suffix = editor.editorManager.suffix;\n var contentCssFile = 'content' + suffix + '.css';\n var inline = editor.inline === true;\n return map$3(cssLinks, function (url) {\n if (isContentCssSkinName(url) && !inline) {\n return skinUrl + '/' + url + '/' + contentCssFile;\n } else {\n return editor.documentBaseURI.toAbsolute(url);\n }\n });\n };\n var appendContentCssFromSettings = function (editor) {\n editor.contentCSS = editor.contentCSS.concat(getContentCssUrls(editor), getFontCssUrls(editor));\n };\n\n var UploadStatus = function () {\n var PENDING = 1, UPLOADED = 2;\n var blobUriStatuses = {};\n var createStatus = function (status, resultUri) {\n return {\n status: status,\n resultUri: resultUri\n };\n };\n var hasBlobUri = function (blobUri) {\n return blobUri in blobUriStatuses;\n };\n var getResultUri = function (blobUri) {\n var result = blobUriStatuses[blobUri];\n return result ? result.resultUri : null;\n };\n var isPending = function (blobUri) {\n return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === PENDING : false;\n };\n var isUploaded = function (blobUri) {\n return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === UPLOADED : false;\n };\n var markPending = function (blobUri) {\n blobUriStatuses[blobUri] = createStatus(PENDING, null);\n };\n var markUploaded = function (blobUri, resultUri) {\n blobUriStatuses[blobUri] = createStatus(UPLOADED, resultUri);\n };\n var removeFailed = function (blobUri) {\n delete blobUriStatuses[blobUri];\n };\n var destroy = function () {\n blobUriStatuses = {};\n };\n return {\n hasBlobUri: hasBlobUri,\n getResultUri: getResultUri,\n isPending: isPending,\n isUploaded: isUploaded,\n markPending: markPending,\n markUploaded: markUploaded,\n removeFailed: removeFailed,\n destroy: destroy\n };\n };\n\n var count = 0;\n var seed = function () {\n var rnd = function () {\n return Math.round(Math.random() * 4294967295).toString(36);\n };\n var now = new Date().getTime();\n return 's' + now.toString(36) + rnd() + rnd() + rnd();\n };\n var uuid = function (prefix) {\n return prefix + count++ + seed();\n };\n\n var BlobCache = function () {\n var cache = [];\n var mimeToExt = function (mime) {\n var 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 var create = function (o, blob, base64, name, filename) {\n if (isString$1(o)) {\n var id = o;\n return toBlobInfo({\n id: id,\n name: name,\n filename: 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 var toBlobInfo = function (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 var id = o.id || uuid('blobid');\n var name = o.name || id;\n var 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 var add = function (blobInfo) {\n if (!get(blobInfo.id())) {\n cache.push(blobInfo);\n }\n };\n var findFirst = function (predicate) {\n return find$3(cache, predicate).getOrUndefined();\n };\n var get = function (id) {\n return findFirst(function (cachedBlobInfo) {\n return cachedBlobInfo.id() === id;\n });\n };\n var getByUri = function (blobUri) {\n return findFirst(function (blobInfo) {\n return blobInfo.blobUri() === blobUri;\n });\n };\n var getByData = function (base64, type) {\n return findFirst(function (blobInfo) {\n return blobInfo.base64() === base64 && blobInfo.blob().type === type;\n });\n };\n var removeByUri = function (blobUri) {\n cache = filter$4(cache, function (blobInfo) {\n if (blobInfo.blobUri() === blobUri) {\n URL.revokeObjectURL(blobInfo.blobUri());\n return false;\n }\n return true;\n });\n };\n var destroy = function () {\n each$k(cache, function (cachedBlobInfo) {\n URL.revokeObjectURL(cachedBlobInfo.blobUri());\n });\n cache = [];\n };\n return {\n create: create,\n add: add,\n get: get,\n getByUri: getByUri,\n getByData: getByData,\n findFirst: findFirst,\n removeByUri: removeByUri,\n destroy: destroy\n };\n };\n\n var Uploader = function (uploadStatus, settings) {\n var pendingPromises = {};\n var pathJoin = function (path1, path2) {\n if (path1) {\n return path1.replace(/\\/$/, '') + '/' + path2.replace(/^\\//, '');\n }\n return path2;\n };\n var defaultHandler = function (blobInfo, success, failure, progress) {\n var xhr = new XMLHttpRequest();\n xhr.open('POST', settings.url);\n xhr.withCredentials = settings.credentials;\n xhr.upload.onprogress = function (e) {\n progress(e.loaded / e.total * 100);\n };\n xhr.onerror = function () {\n failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status);\n };\n xhr.onload = function () {\n if (xhr.status < 200 || xhr.status >= 300) {\n failure('HTTP Error: ' + xhr.status);\n return;\n }\n var json = JSON.parse(xhr.responseText);\n if (!json || typeof json.location !== 'string') {\n failure('Invalid JSON: ' + xhr.responseText);\n return;\n }\n success(pathJoin(settings.basePath, json.location));\n };\n var formData = new FormData();\n formData.append('file', blobInfo.blob(), blobInfo.filename());\n xhr.send(formData);\n };\n var noUpload = function () {\n return new promiseObj(function (resolve) {\n resolve([]);\n });\n };\n var handlerSuccess = function (blobInfo, url) {\n return {\n url: url,\n blobInfo: blobInfo,\n status: true\n };\n };\n var handlerFailure = function (blobInfo, message, options) {\n return {\n url: '',\n blobInfo: blobInfo,\n status: false,\n error: {\n message: message,\n options: options\n }\n };\n };\n var resolvePending = function (blobUri, result) {\n Tools.each(pendingPromises[blobUri], function (resolve) {\n resolve(result);\n });\n delete pendingPromises[blobUri];\n };\n var uploadBlobInfo = function (blobInfo, handler, openNotification) {\n uploadStatus.markPending(blobInfo.blobUri());\n return new promiseObj(function (resolve) {\n var notification, progress;\n try {\n var closeNotification_1 = function () {\n if (notification) {\n notification.close();\n progress = noop;\n }\n };\n var success = function (url) {\n closeNotification_1();\n uploadStatus.markUploaded(blobInfo.blobUri(), url);\n resolvePending(blobInfo.blobUri(), handlerSuccess(blobInfo, url));\n resolve(handlerSuccess(blobInfo, url));\n };\n var failure = function (error, options) {\n var failureOptions = options ? options : {};\n closeNotification_1();\n uploadStatus.removeFailed(blobInfo.blobUri());\n resolvePending(blobInfo.blobUri(), handlerFailure(blobInfo, error, failureOptions));\n resolve(handlerFailure(blobInfo, error, failureOptions));\n };\n progress = function (percent) {\n if (percent < 0 || percent > 100) {\n return;\n }\n Optional.from(notification).orThunk(function () {\n return Optional.from(openNotification).map(apply);\n }).each(function (n) {\n notification = n;\n n.progressBar.value(percent);\n });\n };\n handler(blobInfo, success, failure, progress);\n } catch (ex) {\n resolve(handlerFailure(blobInfo, ex.message, {}));\n }\n });\n };\n var isDefaultHandler = function (handler) {\n return handler === defaultHandler;\n };\n var pendingUploadBlobInfo = function (blobInfo) {\n var blobUri = blobInfo.blobUri();\n return new promiseObj(function (resolve) {\n pendingPromises[blobUri] = pendingPromises[blobUri] || [];\n pendingPromises[blobUri].push(resolve);\n });\n };\n var uploadBlobs = function (blobInfos, openNotification) {\n blobInfos = Tools.grep(blobInfos, function (blobInfo) {\n return !uploadStatus.isUploaded(blobInfo.blobUri());\n });\n return promiseObj.all(Tools.map(blobInfos, function (blobInfo) {\n return uploadStatus.isPending(blobInfo.blobUri()) ? pendingUploadBlobInfo(blobInfo) : uploadBlobInfo(blobInfo, settings.handler, openNotification);\n }));\n };\n var upload = function (blobInfos, openNotification) {\n return !settings.url && isDefaultHandler(settings.handler) ? noUpload() : uploadBlobs(blobInfos, openNotification);\n };\n if (isFunction(settings.handler) === false) {\n settings.handler = defaultHandler;\n }\n return { upload: upload };\n };\n\n var openNotification = function (editor) {\n return function () {\n return editor.notificationManager.open({\n text: editor.translate('Image uploading...'),\n type: 'info',\n timeout: -1,\n progressBar: true\n });\n };\n };\n var createUploader = function (editor, uploadStatus) {\n return Uploader(uploadStatus, {\n url: getImageUploadUrl(editor),\n basePath: getImageUploadBasePath(editor),\n credentials: getImagesUploadCredentials(editor),\n handler: getImagesUploadHandler(editor)\n });\n };\n var ImageUploader = function (editor) {\n var uploadStatus = UploadStatus();\n var uploader = createUploader(editor, uploadStatus);\n return {\n upload: function (blobInfos, showNotification) {\n if (showNotification === void 0) {\n showNotification = true;\n }\n return uploader.upload(blobInfos, showNotification ? openNotification(editor) : undefined);\n }\n };\n };\n\n var UploadChangeHandler = function (editor) {\n var lastChangedLevel = Cell(null);\n editor.on('change AddUndo', function (e) {\n lastChangedLevel.set(__assign({}, e.level));\n });\n var fireIfChanged = function () {\n var data = editor.undoManager.data;\n last$2(data).filter(function (level) {\n return !isEq$1(lastChangedLevel.get(), level);\n }).each(function (level) {\n editor.setDirty(true);\n editor.fire('change', {\n level: level,\n lastLevel: get$a(data, data.length - 2).getOrNull()\n });\n });\n };\n return { fireIfChanged: fireIfChanged };\n };\n var EditorUpload = function (editor) {\n var blobCache = BlobCache();\n var uploader, imageScanner;\n var uploadStatus = UploadStatus();\n var urlFilters = [];\n var changeHandler = UploadChangeHandler(editor);\n var aliveGuard = function (callback) {\n return function (result) {\n if (editor.selection) {\n return callback(result);\n }\n return [];\n };\n };\n var cacheInvalidator = function (url) {\n return url + (url.indexOf('?') === -1 ? '?' : '&') + new Date().getTime();\n };\n var replaceString = function (content, search, replace) {\n var 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 var replaceImageUrl = function (content, targetUrl, replacementUrl) {\n var 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 var replaceUrlInUndoStack = function (targetUrl, replacementUrl) {\n each$k(editor.undoManager.data, function (level) {\n if (level.type === 'fragmented') {\n level.fragments = map$3(level.fragments, function (fragment) {\n return replaceImageUrl(fragment, targetUrl, replacementUrl);\n });\n } else {\n level.content = replaceImageUrl(level.content, targetUrl, replacementUrl);\n }\n });\n };\n var replaceImageUriInView = function (image, resultUri) {\n var src = editor.convertURL(resultUri, 'src');\n replaceUrlInUndoStack(image.src, resultUri);\n editor.$(image).attr({\n 'src': shouldReuseFileName(editor) ? cacheInvalidator(resultUri) : resultUri,\n 'data-mce-src': src\n });\n };\n var uploadImages = function (callback) {\n if (!uploader) {\n uploader = createUploader(editor, uploadStatus);\n }\n return scanForImages().then(aliveGuard(function (imageInfos) {\n var blobInfos = map$3(imageInfos, function (imageInfo) {\n return imageInfo.blobInfo;\n });\n return uploader.upload(blobInfos, openNotification(editor)).then(aliveGuard(function (result) {\n var imagesToRemove = [];\n var filteredResult = map$3(result, function (uploadInfo, index) {\n var blobInfo = imageInfos[index].blobInfo;\n var image = imageInfos[index].image;\n if (uploadInfo.status && shouldReplaceBlobUris(editor)) {\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.options.remove) {\n replaceUrlInUndoStack(image.getAttribute('src'), Env.transparentSrc);\n imagesToRemove.push(image);\n }\n uploadError(editor, uploadInfo.error.message);\n }\n return {\n element: image,\n status: uploadInfo.status,\n uploadUri: uploadInfo.url,\n blobInfo: blobInfo\n };\n });\n if (filteredResult.length > 0) {\n changeHandler.fireIfChanged();\n }\n if (imagesToRemove.length > 0) {\n if (isRtc(editor)) {\n console.error('Removing images on failed uploads is currently unsupported for RTC');\n } else {\n editor.undoManager.transact(function () {\n each$k(imagesToRemove, function (element) {\n editor.dom.remove(element);\n blobCache.removeByUri(element.src);\n });\n });\n }\n }\n if (callback) {\n callback(filteredResult);\n }\n return filteredResult;\n }));\n }));\n };\n var uploadImagesAuto = function (callback) {\n if (isAutomaticUploadsEnabled(editor)) {\n return uploadImages(callback);\n }\n };\n var isValidDataUriImage = function (imgElm) {\n if (forall(urlFilters, function (filter) {\n return filter(imgElm);\n }) === false) {\n return false;\n }\n if (imgElm.getAttribute('src').indexOf('data:') === 0) {\n var dataImgFilter = getImagesDataImgFilter(editor);\n return dataImgFilter(imgElm);\n }\n return true;\n };\n var addFilter = function (filter) {\n urlFilters.push(filter);\n };\n var scanForImages = function () {\n if (!imageScanner) {\n imageScanner = ImageScanner(uploadStatus, blobCache);\n }\n return imageScanner.findAll(editor.getBody(), isValidDataUriImage).then(aliveGuard(function (result) {\n result = filter$4(result, function (resultItem) {\n if (typeof resultItem === 'string') {\n displayError(editor, resultItem);\n return false;\n }\n return true;\n });\n if (isRtc(editor)) ; else {\n each$k(result, function (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 result;\n }));\n };\n var destroy = function () {\n blobCache.destroy();\n uploadStatus.destroy();\n imageScanner = uploader = null;\n };\n var replaceBlobUris = function (content) {\n return content.replace(/src=\"(blob:[^\"]+)\"/g, function (match, blobUri) {\n var resultUri = uploadStatus.getResultUri(blobUri);\n if (resultUri) {\n return 'src=\"' + resultUri + '\"';\n }\n var blobInfo = blobCache.getByUri(blobUri);\n if (!blobInfo) {\n blobInfo = foldl(editor.editorManager.get(), function (result, editor) {\n return result || editor.editorUpload && editor.editorUpload.blobCache.getByUri(blobUri);\n }, null);\n }\n if (blobInfo) {\n var blob = blobInfo.blob();\n return 'src=\"data:' + blob.type + ';base64,' + blobInfo.base64() + '\"';\n }\n return match;\n });\n };\n editor.on('SetContent', function () {\n if (isAutomaticUploadsEnabled(editor)) {\n uploadImagesAuto();\n } else {\n scanForImages();\n }\n });\n editor.on('RawSaveContent', function (e) {\n e.content = replaceBlobUris(e.content);\n });\n editor.on('GetContent', function (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', function () {\n editor.parser.addNodeFilter('img', function (images) {\n each$k(images, function (img) {\n var src = img.attr('src');\n if (blobCache.getByUri(src)) {\n return;\n }\n var resultUri = uploadStatus.getResultUri(src);\n if (resultUri) {\n img.attr('src', resultUri);\n }\n });\n });\n });\n return {\n blobCache: blobCache,\n addFilter: addFilter,\n uploadImages: uploadImages,\n uploadImagesAuto: uploadImagesAuto,\n scanForImages: scanForImages,\n destroy: destroy\n };\n };\n\n var get = function (dom) {\n var 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',\n styles: { textAlign: 'left' },\n inherit: false,\n preview: false,\n defaultBlock: 'div'\n },\n {\n selector: 'img,table,audio,video',\n collapsed: false,\n styles: { float: 'left' },\n preview: 'font-family font-size'\n }\n ],\n aligncenter: [\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n styles: { textAlign: 'center' },\n inherit: false,\n preview: 'font-family font-size',\n defaultBlock: 'div'\n },\n {\n selector: 'figure.image',\n collapsed: false,\n classes: 'align-center',\n ceFalseOverride: true,\n preview: 'font-family font-size'\n },\n {\n selector: 'img,audio,video',\n collapsed: false,\n styles: {\n display: 'block',\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n preview: false\n },\n {\n selector: 'table',\n collapsed: false,\n styles: {\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n preview: 'font-family font-size'\n }\n ],\n 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',\n styles: { textAlign: 'right' },\n inherit: false,\n preview: 'font-family font-size',\n defaultBlock: 'div'\n },\n {\n selector: 'img,table,audio,video',\n collapsed: false,\n styles: { float: 'right' },\n preview: 'font-family font-size'\n }\n ],\n alignjustify: [{\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n styles: { textAlign: 'justify' },\n inherit: false,\n defaultBlock: 'div',\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 {\n inline: 'span',\n styles: { textDecoration: 'line-through' },\n exact: true\n },\n {\n inline: 'strike',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\n },\n {\n inline: 's',\n remove: 'all',\n preserve_attributes: [\n 'class',\n 'style'\n ]\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 defaultBlock: 'p',\n styles: { lineHeight: '%value' }\n },\n fontsize_class: {\n inline: 'span',\n attributes: { class: '%value' }\n },\n blockquote: {\n block: 'blockquote',\n wrapper: true,\n remove: 'all'\n },\n subscript: { inline: 'sub' },\n superscript: { inline: 'sup' },\n code: { inline: 'code' },\n link: {\n inline: 'a',\n selector: 'a',\n remove: 'all',\n split: true,\n deep: true,\n onmatch: function (node, _fmt, _itemName) {\n return isElement$5(node) && node.hasAttribute('href');\n },\n onformat: function (elm, _fmt, vars) {\n Tools.each(vars, function (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': function (vars) {\n var _a;\n return (_a = vars === null || vars === void 0 ? void 0 : vars.customValue) !== null && _a !== void 0 ? _a : null;\n }\n }\n },\n removeformat: [\n {\n selector: 'b,strong,em,i,font,u,strike,s,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins,small',\n remove: 'all',\n split: true,\n expand: false,\n block_expand: true,\n deep: true\n },\n {\n selector: 'span',\n attributes: [\n 'style',\n 'class'\n ],\n remove: 'empty',\n split: true,\n expand: false,\n deep: true\n },\n {\n selector: '*',\n attributes: [\n 'style',\n 'class'\n ],\n split: false,\n expand: false,\n deep: true\n }\n ]\n };\n Tools.each('p h1 h2 h3 h4 h5 h6 div address pre dt dd samp'.split(/\\s/), function (name) {\n formats[name] = {\n block: name,\n remove: 'all'\n };\n });\n return formats;\n };\n\n var FormatRegistry = function (editor) {\n var formats = {};\n var get$1 = function (name) {\n return isNonNullable(name) ? formats[name] : formats;\n };\n var has = function (name) {\n return has$2(formats, name);\n };\n var register = function (name, format) {\n if (name) {\n if (!isString$1(name)) {\n each$j(name, function (format, name) {\n register(name, format);\n });\n } else {\n if (!isArray$1(format)) {\n format = [format];\n }\n each$k(format, function (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$1(format.classes)) {\n format.classes = format.classes.split(/\\s+/);\n }\n });\n formats[name] = format;\n }\n }\n };\n var unregister = function (name) {\n if (name && formats[name]) {\n delete formats[name];\n }\n return formats;\n };\n register(get(editor.dom));\n register(getFormats(editor));\n return {\n get: get$1,\n has: has,\n register: register,\n unregister: unregister\n };\n };\n\n var each$5 = Tools.each;\n var dom = DOMUtils.DOM;\n var parsedSelectorToHtml = function (ancestry, editor) {\n var elm, item, fragment;\n var schema = editor && editor.schema || Schema({});\n var decorate = function (elm, item) {\n if (item.classes.length) {\n dom.addClass(elm, item.classes.join(' '));\n }\n dom.setAttribs(elm, item.attrs);\n };\n var createElement = function (sItem) {\n item = typeof sItem === 'string' ? {\n name: sItem,\n classes: [],\n attrs: {}\n } : sItem;\n var elm = dom.create(item.name);\n decorate(elm, item);\n return elm;\n };\n var getRequiredParent = function (elm, candidate) {\n var name = typeof elm !== 'string' ? elm.nodeName.toLowerCase() : elm;\n var elmRule = schema.getElementRule(name);\n var parentsRequired = elmRule && elmRule.parentsRequired;\n if (parentsRequired && parentsRequired.length) {\n return candidate && Tools.inArray(parentsRequired, candidate) !== -1 ? candidate : parentsRequired[0];\n } else {\n return false;\n }\n };\n var wrapInHtml = function (elm, ancestry, siblings) {\n var parent, parentCandidate;\n var ancestor = ancestry.length > 0 && ancestry[0];\n var ancestorName = ancestor && ancestor.name;\n var parentRequired = getRequiredParent(elm, ancestorName);\n if (parentRequired) {\n if (ancestorName === parentRequired) {\n parentCandidate = ancestry[0];\n ancestry = ancestry.slice(1);\n } else {\n parentCandidate = parentRequired;\n }\n } else if (ancestor) {\n parentCandidate = ancestry[0];\n ancestry = ancestry.slice(1);\n } else if (!siblings) {\n return elm;\n }\n if (parentCandidate) {\n parent = createElement(parentCandidate);\n parent.appendChild(elm);\n }\n if (siblings) {\n if (!parent) {\n parent = dom.create('div');\n parent.appendChild(elm);\n }\n Tools.each(siblings, function (sibling) {\n var siblingElm = createElement(sibling);\n parent.insertBefore(siblingElm, elm);\n });\n }\n return wrapInHtml(parent, ancestry, parentCandidate && parentCandidate.siblings);\n };\n if (ancestry && ancestry.length) {\n item = ancestry[0];\n elm = createElement(item);\n fragment = dom.create('div');\n fragment.appendChild(wrapInHtml(elm, ancestry.slice(1), item.siblings));\n return fragment;\n } else {\n return '';\n }\n };\n var parseSelectorItem = function (item) {\n var tagName;\n var obj = {\n classes: [],\n attrs: {}\n };\n item = obj.selector = Tools.trim(item);\n if (item !== '*') {\n tagName = item.replace(/(?:([#\\.]|::?)([\\w\\-]+)|(\\[)([^\\]]+)\\]?)/g, function ($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 var 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 var parseSelector = function (selector) {\n if (!selector || typeof selector !== 'string') {\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+(?![^\\[\\]]+\\]))/), function (item) {\n var siblings = Tools.map(item.split(/(?:~\\+|~|\\+)/), parseSelectorItem);\n var obj = siblings.pop();\n if (siblings.length) {\n obj.siblings = siblings;\n }\n return obj;\n }).reverse();\n };\n var getCssText = function (editor, format) {\n var name, previewFrag;\n var previewCss = '', parentFontSize;\n var previewStyles = getPreviewStyles(editor);\n if (previewStyles === '') {\n return '';\n }\n var removeVars = function (val) {\n return val.replace(/%(\\w+)/g, '');\n };\n if (typeof format === 'string') {\n format = editor.formatter.get(format);\n if (!format) {\n return;\n }\n format = format[0];\n }\n if ('preview' in format) {\n var previewOpt = get$9(format, 'preview');\n if (is$1(previewOpt, false)) {\n return '';\n } else {\n previewStyles = previewOpt.getOr(previewStyles);\n }\n }\n name = format.block || format.inline || 'span';\n var items = parseSelector(format.selector);\n if (items.length) {\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 var previewElm = dom.select(name, previewFrag)[0] || previewFrag.firstChild;\n each$5(format.styles, function (value, name) {\n var newValue = removeVars(value);\n if (newValue) {\n dom.setStyle(previewElm, name, newValue);\n }\n });\n each$5(format.attributes, function (value, name) {\n var newValue = removeVars(value);\n if (newValue) {\n dom.setAttrib(previewElm, name, newValue);\n }\n });\n each$5(format.classes, function (value) {\n var newValue = removeVars(value);\n if (!dom.hasClass(previewElm, newValue)) {\n dom.addClass(previewElm, newValue);\n }\n });\n editor.fire('PreviewFormats');\n dom.setStyles(previewFrag, {\n position: 'absolute',\n left: -65535\n });\n editor.getBody().appendChild(previewFrag);\n parentFontSize = dom.getStyle(editor.getBody(), 'fontSize', true);\n parentFontSize = /px$/.test(parentFontSize) ? parseInt(parentFontSize, 10) : 0;\n each$5(previewStyles.split(' '), function (name) {\n var value = dom.getStyle(previewElm, name, true);\n if (name === 'background-color' && /transparent|rgba\\s*\\([^)]+,\\s*0\\)/.test(value)) {\n value = dom.getStyle(editor.getBody(), name, true);\n if (dom.toHex(value).toLowerCase() === '#ffffff') {\n return;\n }\n }\n if (name === 'color') {\n if (dom.toHex(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 var 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.fire('AfterPreviewFormats');\n dom.remove(previewFrag);\n return previewCss;\n };\n\n var setup$h = function (editor) {\n editor.addShortcut('meta+b', '', 'Bold');\n editor.addShortcut('meta+i', '', 'Italic');\n editor.addShortcut('meta+u', '', 'Underline');\n for (var 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 var Formatter = function (editor) {\n var formats = FormatRegistry(editor);\n var formatChangeState = Cell(null);\n setup$h(editor);\n setup$k(editor);\n return {\n get: formats.get,\n has: formats.has,\n register: formats.register,\n unregister: formats.unregister,\n apply: function (name, vars, node) {\n applyFormat(editor, name, vars, node);\n },\n remove: function (name, vars, node, similar) {\n removeFormat(editor, name, vars, node, similar);\n },\n toggle: function (name, vars, node) {\n toggleFormat(editor, name, vars, node);\n },\n match: function (name, vars, node, similar) {\n return matchFormat(editor, name, vars, node, similar);\n },\n closest: function (names) {\n return closestFormat(editor, names);\n },\n matchAll: function (names, vars) {\n return matchAllFormats(editor, names, vars);\n },\n matchNode: function (node, name, vars, similar) {\n return matchNodeFormat(editor, node, name, vars, similar);\n },\n canApply: function (name) {\n return canApplyFormat(editor, name);\n },\n formatChanged: function (formats, callback, similar, vars) {\n return formatChanged(editor, formatChangeState, formats, callback, similar, vars);\n },\n getCssText: curry(getCssText, editor)\n };\n };\n\n var shouldIgnoreCommand = function (cmd) {\n switch (cmd.toLowerCase()) {\n case 'undo':\n case 'redo':\n case 'mcerepaint':\n case 'mcefocus':\n return true;\n default:\n return false;\n }\n };\n var registerEvents = function (editor, undoManager, locks) {\n var isFirstTypedCharacter = Cell(false);\n var addNonTypingUndoLevel = function (e) {\n setTyping(undoManager, false, locks);\n undoManager.add({}, e);\n };\n editor.on('init', function () {\n undoManager.add();\n });\n editor.on('BeforeExecCommand', function (e) {\n var cmd = e.command;\n if (!shouldIgnoreCommand(cmd)) {\n endTyping(undoManager, locks);\n undoManager.beforeChange();\n }\n });\n editor.on('ExecCommand', function (e) {\n var cmd = e.command;\n if (!shouldIgnoreCommand(cmd)) {\n addNonTypingUndoLevel(e);\n }\n });\n editor.on('ObjectResizeStart cut', function () {\n undoManager.beforeChange();\n });\n editor.on('SaveContent ObjectResized blur', addNonTypingUndoLevel);\n editor.on('dragend', addNonTypingUndoLevel);\n editor.on('keyup', function (e) {\n var keyCode = e.keyCode;\n if (e.isDefaultPrevented()) {\n return;\n }\n if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45 || e.ctrlKey) {\n addNonTypingUndoLevel();\n editor.nodeChanged();\n }\n if (keyCode === 46 || keyCode === 8) {\n editor.nodeChanged();\n }\n if (isFirstTypedCharacter.get() && undoManager.typing && isEq$1(createFromEditor(editor), undoManager.data[0]) === false) {\n if (editor.isDirty() === false) {\n editor.setDirty(true);\n editor.fire('change', {\n level: undoManager.data[0],\n lastLevel: null\n });\n }\n editor.fire('TypingUndo');\n isFirstTypedCharacter.set(false);\n editor.nodeChanged();\n }\n });\n editor.on('keydown', function (e) {\n var 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 var modKey = e.ctrlKey && !e.altKey || e.metaKey;\n if ((keyCode < 16 || keyCode > 20) && keyCode !== 224 && keyCode !== 91 && !undoManager.typing && !modKey) {\n undoManager.beforeChange();\n setTyping(undoManager, true, locks);\n undoManager.add({}, e);\n isFirstTypedCharacter.set(true);\n }\n });\n editor.on('mousedown', function (e) {\n if (undoManager.typing) {\n addNonTypingUndoLevel(e);\n }\n });\n var isInsertReplacementText = function (event) {\n return event.inputType === 'insertReplacementText';\n };\n var isInsertTextDataNull = function (event) {\n return event.inputType === 'insertText' && event.data === null;\n };\n var isInsertFromPasteOrDrop = function (event) {\n return event.inputType === 'insertFromPaste' || event.inputType === 'insertFromDrop';\n };\n editor.on('input', function (e) {\n if (e.inputType && (isInsertReplacementText(e) || isInsertTextDataNull(e) || isInsertFromPasteOrDrop(e))) {\n addNonTypingUndoLevel(e);\n }\n });\n editor.on('AddUndo Undo Redo ClearUndos', function (e) {\n if (!e.isDefaultPrevented()) {\n editor.nodeChanged();\n }\n });\n };\n var addKeyboardShortcuts = function (editor) {\n editor.addShortcut('meta+z', '', 'Undo');\n editor.addShortcut('meta+y,meta+shift+z', '', 'Redo');\n };\n\n var UndoManager = function (editor) {\n var beforeBookmark = value();\n var locks = Cell(0);\n var index = Cell(0);\n var undoManager = {\n data: [],\n typing: false,\n beforeChange: function () {\n beforeChange(editor, locks, beforeBookmark);\n },\n add: function (level, event) {\n return addUndoLevel(editor, undoManager, index, locks, beforeBookmark, level, event);\n },\n undo: function () {\n return undo(editor, undoManager, locks, index);\n },\n redo: function () {\n return redo(editor, index, undoManager.data);\n },\n clear: function () {\n clear(editor, undoManager, index);\n },\n reset: function () {\n reset(editor, undoManager);\n },\n hasUndo: function () {\n return hasUndo(editor, undoManager, index);\n },\n hasRedo: function () {\n return hasRedo(editor, undoManager, index);\n },\n transact: function (callback) {\n return transact(editor, undoManager, locks, callback);\n },\n ignore: function (callback) {\n ignore(editor, locks, callback);\n },\n extra: function (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 var 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 var placeholderAttr = 'data-mce-placeholder';\n var isKeyboardEvent = function (e) {\n return e.type === 'keydown' || e.type === 'keyup';\n };\n var isDeleteEvent = function (e) {\n var keyCode = e.keyCode;\n return keyCode === VK.BACKSPACE || keyCode === VK.DELETE;\n };\n var isNonTypingKeyboardEvent = function (e) {\n if (isKeyboardEvent(e)) {\n var keyCode = e.keyCode;\n return !isDeleteEvent(e) && (VK.metaKeyPressed(e) || e.altKey || keyCode >= 112 && keyCode <= 123 || contains$3(nonTypingKeycodes, keyCode));\n } else {\n return false;\n }\n };\n var isTypingKeyboardEvent = function (e) {\n return isKeyboardEvent(e) && !(isDeleteEvent(e) || e.type === 'keyup' && e.keyCode === 229);\n };\n var isVisuallyEmpty = function (dom, rootElm, forcedRootBlock) {\n if (isEmpty$2(SugarElement.fromDom(rootElm), false)) {\n var isForcedRootBlockFalse = forcedRootBlock === '';\n var 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 isForcedRootBlockFalse ? !dom.isBlock(firstElement) : forcedRootBlock === firstElement.nodeName.toLowerCase();\n }\n } else {\n return false;\n }\n };\n var setup$g = function (editor) {\n var dom = editor.dom;\n var rootBlock = getForcedRootBlock(editor);\n var placeholder = getPlaceholder(editor);\n var updatePlaceholder = function (e, initial) {\n if (isNonTypingKeyboardEvent(e)) {\n return;\n }\n var body = editor.getBody();\n var showPlaceholder = isTypingKeyboardEvent(e) ? false : isVisuallyEmpty(dom, body, rootBlock);\n var isPlaceholderShown = dom.getAttrib(body, placeholderAttr) !== '';\n if (isPlaceholderShown !== showPlaceholder || initial) {\n dom.setAttrib(body, placeholderAttr, showPlaceholder ? placeholder : null);\n dom.setAttrib(body, 'aria-placeholder', showPlaceholder ? placeholder : null);\n firePlaceholderToggle(editor, showPlaceholder);\n editor.on(showPlaceholder ? 'keydown' : 'keyup', updatePlaceholder);\n editor.off(showPlaceholder ? 'keyup' : 'keydown', updatePlaceholder);\n }\n };\n if (placeholder) {\n editor.on('init', function (e) {\n updatePlaceholder(e, true);\n editor.on('change SetContent ExecCommand', updatePlaceholder);\n editor.on('paste', function (e) {\n return Delay.setEditorTimeout(editor, function () {\n return updatePlaceholder(e);\n });\n });\n });\n }\n };\n\n var strongRtl = /[\\u0591-\\u07FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFC]/;\n var hasStrongRtl = function (text) {\n return strongRtl.test(text);\n };\n\n var isInlineTarget = function (editor, elm) {\n return is$2(SugarElement.fromDom(elm), getInlineBoundarySelector(editor));\n };\n var isRtl = function (element) {\n return DOMUtils.DOM.getStyle(element, 'direction', true) === 'rtl' || hasStrongRtl(element.textContent);\n };\n var findInlineParents = function (isInlineTarget, rootNode, pos) {\n return filter$4(DOMUtils.DOM.getParents(pos.container(), '*', rootNode), isInlineTarget);\n };\n var findRootInline = function (isInlineTarget, rootNode, pos) {\n var parents = findInlineParents(isInlineTarget, rootNode, pos);\n return Optional.from(parents[parents.length - 1]);\n };\n var hasSameParentBlock = function (rootNode, node1, node2) {\n var block1 = getParentBlock$2(node1, rootNode);\n var block2 = getParentBlock$2(node2, rootNode);\n return block1 && block1 === block2;\n };\n var isAtZwsp = function (pos) {\n return isBeforeInline(pos) || isAfterInline(pos);\n };\n var normalizePosition = function (forward, pos) {\n if (!pos) {\n return pos;\n }\n var container = pos.container(), offset = pos.offset();\n if (forward) {\n if (isCaretContainerInline(container)) {\n if (isText$7(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$7(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 var normalizeForwards = curry(normalizePosition, true);\n var normalizeBackwards = curry(normalizePosition, false);\n\n var isBeforeRoot = function (rootNode) {\n return function (elm) {\n return eq(rootNode, SugarElement.fromDom(elm.dom.parentNode));\n };\n };\n var isTextBlockOrListItem = function (element) {\n return isTextBlock$2(element) || isListItem(element);\n };\n var getParentBlock$1 = function (rootNode, elm) {\n if (contains$1(rootNode, elm)) {\n return closest$3(elm, isTextBlockOrListItem, isBeforeRoot(rootNode));\n } else {\n return Optional.none();\n }\n };\n var placeCaretInEmptyBody = function (editor) {\n var body = editor.getBody();\n var node = body.firstChild && editor.dom.isBlock(body.firstChild) ? body.firstChild : body;\n editor.selection.setCursorLocation(node, 0);\n };\n var paddEmptyBody = function (editor) {\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n placeCaretInEmptyBody(editor);\n }\n };\n var willDeleteLastPositionInElement = function (forward, fromPos, elm) {\n return lift2(firstPositionIn(elm), lastPositionIn(elm), function (firstPos, lastPos) {\n var normalizedFirstPos = normalizePosition(true, firstPos);\n var normalizedLastPos = normalizePosition(false, lastPos);\n var normalizedFromPos = normalizePosition(false, fromPos);\n if (forward) {\n return nextPosition(elm, normalizedFromPos).exists(function (nextPos) {\n return nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos);\n });\n } else {\n return prevPosition(elm, normalizedFromPos).exists(function (prevPos) {\n return prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos);\n });\n }\n }).getOr(true);\n };\n\n var blockPosition = function (block, position) {\n return {\n block: block,\n position: position\n };\n };\n var blockBoundary = function (from, to) {\n return {\n from: from,\n to: to\n };\n };\n var getBlockPosition = function (rootNode, pos) {\n var rootElm = SugarElement.fromDom(rootNode);\n var containerElm = SugarElement.fromDom(pos.container());\n return getParentBlock$1(rootElm, containerElm).map(function (block) {\n return blockPosition(block, pos);\n });\n };\n var isDifferentBlocks = function (blockBoundary) {\n return eq(blockBoundary.from.block, blockBoundary.to.block) === false;\n };\n var hasSameParent = function (blockBoundary) {\n return parent(blockBoundary.from.block).bind(function (parent1) {\n return parent(blockBoundary.to.block).filter(function (parent2) {\n return eq(parent1, parent2);\n });\n }).isSome();\n };\n var isEditable$1 = function (blockBoundary) {\n return isContentEditableFalse$b(blockBoundary.from.block.dom) === false && isContentEditableFalse$b(blockBoundary.to.block.dom) === false;\n };\n var skipLastBr = function (rootNode, forward, blockPosition) {\n if (isBr$5(blockPosition.position.getNode()) && isEmpty$2(blockPosition.block) === false) {\n return positionIn(false, blockPosition.block.dom).bind(function (lastPositionInBlock) {\n if (lastPositionInBlock.isEqual(blockPosition.position)) {\n return fromPosition(forward, rootNode, lastPositionInBlock).bind(function (to) {\n return getBlockPosition(rootNode, to);\n });\n } else {\n return Optional.some(blockPosition);\n }\n }).getOr(blockPosition);\n } else {\n return blockPosition;\n }\n };\n var readFromRange = function (rootNode, forward, rng) {\n var fromBlockPos = getBlockPosition(rootNode, CaretPosition.fromRangeStart(rng));\n var toBlockPos = fromBlockPos.bind(function (blockPos) {\n return fromPosition(forward, rootNode, blockPos.position).bind(function (to) {\n return getBlockPosition(rootNode, to).map(function (blockPos) {\n return skipLastBr(rootNode, forward, blockPos);\n });\n });\n });\n return lift2(fromBlockPos, toBlockPos, blockBoundary).filter(function (blockBoundary) {\n return isDifferentBlocks(blockBoundary) && hasSameParent(blockBoundary) && isEditable$1(blockBoundary);\n });\n };\n var read$1 = function (rootNode, forward, rng) {\n return rng.collapsed ? readFromRange(rootNode, forward, rng) : Optional.none();\n };\n\n var getChildrenUntilBlockBoundary = function (block) {\n var children$1 = children(block);\n return findIndex$2(children$1, isBlock$2).fold(constant(children$1), function (index) {\n return children$1.slice(0, index);\n });\n };\n var extractChildren = function (block) {\n var children = getChildrenUntilBlockBoundary(block);\n each$k(children, remove$7);\n return children;\n };\n var removeEmptyRoot = function (rootNode, block) {\n var parents = parentsAndSelf(block, rootNode);\n return find$3(parents.reverse(), function (element) {\n return isEmpty$2(element);\n }).each(remove$7);\n };\n var isEmptyBefore = function (el) {\n return filter$4(prevSiblings(el), function (el) {\n return !isEmpty$2(el);\n }).length === 0;\n };\n var nestedBlockMerge = function (rootNode, fromBlock, toBlock, insertionPoint) {\n if (isEmpty$2(toBlock)) {\n fillWithPaddingBr(toBlock);\n return firstPositionIn(toBlock.dom);\n }\n if (isEmptyBefore(insertionPoint) && isEmpty$2(fromBlock)) {\n before$4(insertionPoint, SugarElement.fromTag('br'));\n }\n var position = prevPosition(toBlock.dom, CaretPosition.before(insertionPoint.dom));\n each$k(extractChildren(fromBlock), function (child) {\n before$4(insertionPoint, child);\n });\n removeEmptyRoot(rootNode, fromBlock);\n return position;\n };\n var sidelongBlockMerge = function (rootNode, fromBlock, toBlock) {\n if (isEmpty$2(toBlock)) {\n remove$7(toBlock);\n if (isEmpty$2(fromBlock)) {\n fillWithPaddingBr(fromBlock);\n }\n return firstPositionIn(fromBlock.dom);\n }\n var position = lastPositionIn(toBlock.dom);\n each$k(extractChildren(fromBlock), function (child) {\n append$1(toBlock, child);\n });\n removeEmptyRoot(rootNode, fromBlock);\n return position;\n };\n var findInsertionPoint = function (toBlock, block) {\n var parentsAndSelf$1 = parentsAndSelf(block, toBlock);\n return Optional.from(parentsAndSelf$1[parentsAndSelf$1.length - 1]);\n };\n var getInsertionPoint = function (fromBlock, toBlock) {\n return contains$1(toBlock, fromBlock) ? findInsertionPoint(toBlock, fromBlock) : Optional.none();\n };\n var trimBr = function (first, block) {\n positionIn(first, block.dom).map(function (position) {\n return position.getNode();\n }).map(SugarElement.fromDom).filter(isBr$4).each(remove$7);\n };\n var mergeBlockInto = function (rootNode, fromBlock, toBlock) {\n trimBr(true, fromBlock);\n trimBr(false, toBlock);\n return getInsertionPoint(fromBlock, toBlock).fold(curry(sidelongBlockMerge, rootNode, fromBlock, toBlock), curry(nestedBlockMerge, rootNode, fromBlock, toBlock));\n };\n var mergeBlocks = function (rootNode, forward, block1, block2) {\n return forward ? mergeBlockInto(rootNode, block2, block1) : mergeBlockInto(rootNode, block1, block2);\n };\n\n var backspaceDelete$8 = function (editor, forward) {\n var rootNode = SugarElement.fromDom(editor.getBody());\n var position = read$1(rootNode.dom, forward, editor.selection.getRng()).bind(function (blockBoundary) {\n return mergeBlocks(rootNode, forward, blockBoundary.from.block, blockBoundary.to.block);\n });\n position.each(function (pos) {\n editor.selection.setRng(pos.toRange());\n });\n return position.isSome();\n };\n\n var deleteRangeMergeBlocks = function (rootNode, selection) {\n var rng = selection.getRng();\n return lift2(getParentBlock$1(rootNode, SugarElement.fromDom(rng.startContainer)), getParentBlock$1(rootNode, SugarElement.fromDom(rng.endContainer)), function (block1, block2) {\n if (eq(block1, block2) === false) {\n rng.deleteContents();\n mergeBlocks(rootNode, true, block1, block2).each(function (pos) {\n selection.setRng(pos.toRange());\n });\n return true;\n } else {\n return false;\n }\n }).getOr(false);\n };\n var isRawNodeInTable = function (root, rawNode) {\n var node = SugarElement.fromDom(rawNode);\n var isRoot = curry(eq, root);\n return ancestor$3(node, isTableCell$4, isRoot).isSome();\n };\n var isSelectionInTable = function (root, rng) {\n return isRawNodeInTable(root, rng.startContainer) || isRawNodeInTable(root, rng.endContainer);\n };\n var isEverythingSelected = function (root, rng) {\n var noPrevious = prevPosition(root.dom, CaretPosition.fromRangeStart(rng)).isNone();\n var noNext = nextPosition(root.dom, CaretPosition.fromRangeEnd(rng)).isNone();\n return !isSelectionInTable(root, rng) && noPrevious && noNext;\n };\n var emptyEditor = function (editor) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n return true;\n };\n var deleteRange$1 = function (editor) {\n var rootNode = SugarElement.fromDom(editor.getBody());\n var rng = editor.selection.getRng();\n return isEverythingSelected(rootNode, rng) ? emptyEditor(editor) : deleteRangeMergeBlocks(rootNode, editor.selection);\n };\n var backspaceDelete$7 = function (editor, _forward) {\n return editor.selection.isCollapsed() ? false : deleteRange$1(editor);\n };\n\n var isContentEditableTrue$2 = isContentEditableTrue$4;\n var isContentEditableFalse$4 = isContentEditableFalse$b;\n var showCaret = function (direction, editor, node, before, scrollIntoView) {\n return Optional.from(editor._selectionOverrides.showCaret(direction, node, before, scrollIntoView));\n };\n var getNodeRange = function (node) {\n var rng = node.ownerDocument.createRange();\n rng.selectNode(node);\n return rng;\n };\n var selectNode = function (editor, node) {\n var e = editor.fire('BeforeObjectSelected', { target: node });\n if (e.isDefaultPrevented()) {\n return Optional.none();\n }\n return Optional.some(getNodeRange(node));\n };\n var renderCaretAtRange = function (editor, range, scrollIntoView) {\n var normalizedRange = normalizeRange(1, editor.getBody(), range);\n var caretPosition = CaretPosition.fromRangeStart(normalizedRange);\n var caretPositionNode = caretPosition.getNode();\n if (isInlineFakeCaretTarget(caretPositionNode)) {\n return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false);\n }\n var caretPositionBeforeNode = caretPosition.getNode(true);\n if (isInlineFakeCaretTarget(caretPositionBeforeNode)) {\n return showCaret(1, editor, caretPositionBeforeNode, false, false);\n }\n var ceRoot = editor.dom.getParent(caretPosition.getNode(), function (node) {\n return isContentEditableFalse$4(node) || isContentEditableTrue$2(node);\n });\n if (isInlineFakeCaretTarget(ceRoot)) {\n return showCaret(1, editor, ceRoot, false, scrollIntoView);\n }\n return Optional.none();\n };\n var renderRangeCaret = function (editor, range, scrollIntoView) {\n return range.collapsed ? renderCaretAtRange(editor, range, scrollIntoView).getOr(range) : range;\n };\n\n var isBeforeBoundary = function (pos) {\n return isBeforeContentEditableFalse(pos) || isBeforeMedia(pos);\n };\n var isAfterBoundary = function (pos) {\n return isAfterContentEditableFalse(pos) || isAfterMedia(pos);\n };\n var trimEmptyTextNode = function (dom, node) {\n if (isText$7(node) && node.data.length === 0) {\n dom.remove(node);\n }\n };\n var deleteContentAndShowCaret = function (editor, range, node, direction, forward, peekCaretPosition) {\n showCaret(direction, editor, peekCaretPosition.getNode(!forward), forward, true).each(function (caretRange) {\n if (range.collapsed) {\n var 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 return true;\n };\n var deleteBoundaryText = function (editor, forward) {\n var range = editor.selection.getRng();\n if (!isText$7(range.commonAncestorContainer)) {\n return false;\n }\n var direction = forward ? HDirection.Forwards : HDirection.Backwards;\n var caretWalker = CaretWalker(editor.getBody());\n var getNextPosFn = curry(getVisualCaretPosition, forward ? caretWalker.next : caretWalker.prev);\n var isBeforeFn = forward ? isBeforeBoundary : isAfterBoundary;\n var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n var nextCaretPosition = normalizePosition(forward, getNextPosFn(caretPosition));\n if (!nextCaretPosition || !isMoveInsideSameBlock(caretPosition, nextCaretPosition)) {\n return false;\n } else if (isBeforeFn(nextCaretPosition)) {\n return deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, nextCaretPosition);\n }\n var peekCaretPosition = getNextPosFn(nextCaretPosition);\n if (peekCaretPosition && isBeforeFn(peekCaretPosition)) {\n if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\n return deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, peekCaretPosition);\n }\n }\n return false;\n };\n var backspaceDelete$6 = function (editor, forward) {\n return deleteBoundaryText(editor, forward);\n };\n\n var isCompoundElement = function (node) {\n return isTableCell$4(SugarElement.fromDom(node)) || isListItem(SugarElement.fromDom(node));\n };\n var DeleteAction = Adt.generate([\n { remove: ['element'] },\n { moveToElement: ['element'] },\n { moveToPosition: ['position'] }\n ]);\n var isAtContentEditableBlockCaret = function (forward, from) {\n var elm = from.getNode(forward === false);\n var caretLocation = forward ? 'after' : 'before';\n return isElement$5(elm) && elm.getAttribute('data-mce-caret') === caretLocation;\n };\n var isDeleteFromCefDifferentBlocks = function (root, forward, from, to) {\n var inSameBlock = function (elm) {\n return isInline$1(SugarElement.fromDom(elm)) && !isInSameBlock(from, to, root);\n };\n return getRelativeCefElm(!forward, from).fold(function () {\n return getRelativeCefElm(forward, to).fold(never, inSameBlock);\n }, inSameBlock);\n };\n var deleteEmptyBlockOrMoveToCef = function (root, forward, from, to) {\n var toCefElm = to.getNode(forward === false);\n return getParentBlock$1(SugarElement.fromDom(root), SugarElement.fromDom(from.getNode())).map(function (blockElm) {\n return isEmpty$2(blockElm) ? DeleteAction.remove(blockElm.dom) : DeleteAction.moveToElement(toCefElm);\n }).orThunk(function () {\n return Optional.some(DeleteAction.moveToElement(toCefElm));\n });\n };\n var findCefPosition = function (root, forward, from) {\n return fromPosition(forward, root, from).bind(function (to) {\n if (isCompoundElement(to.getNode())) {\n return Optional.none();\n } else if (isDeleteFromCefDifferentBlocks(root, forward, from, to)) {\n return Optional.none();\n } else if (forward && isContentEditableFalse$b(to.getNode())) {\n return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n } else if (forward === false && isContentEditableFalse$b(to.getNode(true))) {\n return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n } else if (forward && isAfterContentEditableFalse(from)) {\n return Optional.some(DeleteAction.moveToPosition(to));\n } else if (forward === false && isBeforeContentEditableFalse(from)) {\n return Optional.some(DeleteAction.moveToPosition(to));\n } else {\n return Optional.none();\n }\n });\n };\n var getContentEditableBlockAction = function (forward, elm) {\n if (forward && isContentEditableFalse$b(elm.nextSibling)) {\n return Optional.some(DeleteAction.moveToElement(elm.nextSibling));\n } else if (forward === false && isContentEditableFalse$b(elm.previousSibling)) {\n return Optional.some(DeleteAction.moveToElement(elm.previousSibling));\n } else {\n return Optional.none();\n }\n };\n var skipMoveToActionFromInlineCefToContent = function (root, from, deleteAction) {\n return deleteAction.fold(function (elm) {\n return Optional.some(DeleteAction.remove(elm));\n }, function (elm) {\n return Optional.some(DeleteAction.moveToElement(elm));\n }, function (to) {\n if (isInSameBlock(from, to, root)) {\n return Optional.none();\n } else {\n return Optional.some(DeleteAction.moveToPosition(to));\n }\n });\n };\n var getContentEditableAction = function (root, forward, from) {\n if (isAtContentEditableBlockCaret(forward, from)) {\n return getContentEditableBlockAction(forward, from.getNode(forward === false)).fold(function () {\n return findCefPosition(root, forward, from);\n }, Optional.some);\n } else {\n return findCefPosition(root, forward, from).bind(function (deleteAction) {\n return skipMoveToActionFromInlineCefToContent(root, from, deleteAction);\n });\n }\n };\n var read = function (root, forward, rng) {\n var normalizedRange = normalizeRange(forward ? 1 : -1, root, rng);\n var from = CaretPosition.fromRangeStart(normalizedRange);\n var rootElement = SugarElement.fromDom(root);\n if (forward === false && 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 === false && isBeforeContentEditableFalse(from) && isAfterBr(rootElement, from)) {\n return findPreviousBr(rootElement, from).map(function (br) {\n return DeleteAction.remove(br.getNode());\n });\n } else if (forward && isAfterContentEditableFalse(from) && isBeforeBr$1(rootElement, from)) {\n return findNextBr(rootElement, from).map(function (br) {\n return DeleteAction.remove(br.getNode());\n });\n } else {\n return getContentEditableAction(root, forward, from);\n }\n };\n\n var deleteElement$1 = function (editor, forward) {\n return function (element) {\n editor._selectionOverrides.hideFakeCaret();\n deleteElement$2(editor, forward, SugarElement.fromDom(element));\n return true;\n };\n };\n var moveToElement = function (editor, forward) {\n return function (element) {\n var pos = forward ? CaretPosition.before(element) : CaretPosition.after(element);\n editor.selection.setRng(pos.toRange());\n return true;\n };\n };\n var moveToPosition = function (editor) {\n return function (pos) {\n editor.selection.setRng(pos.toRange());\n return true;\n };\n };\n var getAncestorCe = function (editor, node) {\n return Optional.from(getContentEditableRoot$1(editor.getBody(), node));\n };\n var backspaceDeleteCaret = function (editor, forward) {\n var selectedNode = editor.selection.getNode();\n return getAncestorCe(editor, selectedNode).filter(isContentEditableFalse$b).fold(function () {\n return read(editor.getBody(), forward, editor.selection.getRng()).exists(function (deleteAction) {\n return deleteAction.fold(deleteElement$1(editor, forward), moveToElement(editor, forward), moveToPosition(editor));\n });\n }, always);\n };\n var deleteOffscreenSelection = function (rootElement) {\n each$k(descendants(rootElement, '.mce-offscreen-selection'), remove$7);\n };\n var backspaceDeleteRange = function (editor, forward) {\n var selectedNode = editor.selection.getNode();\n if (isContentEditableFalse$b(selectedNode) && !isTableCell$5(selectedNode)) {\n var hasCefAncestor = getAncestorCe(editor, selectedNode.parentNode).filter(isContentEditableFalse$b);\n return hasCefAncestor.fold(function () {\n deleteOffscreenSelection(SugarElement.fromDom(editor.getBody()));\n deleteElement$2(editor, forward, SugarElement.fromDom(editor.selection.getNode()));\n paddEmptyBody(editor);\n return true;\n }, always);\n }\n return false;\n };\n var paddEmptyElement = function (editor) {\n var dom = editor.dom, selection = editor.selection;\n var ceRoot = getContentEditableRoot$1(editor.getBody(), selection.getNode());\n if (isContentEditableTrue$4(ceRoot) && dom.isBlock(ceRoot) && dom.isEmpty(ceRoot)) {\n var 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 var backspaceDelete$5 = function (editor, forward) {\n if (editor.selection.isCollapsed()) {\n return backspaceDeleteCaret(editor, forward);\n } else {\n return backspaceDeleteRange(editor, forward);\n }\n };\n\n var deleteCaret$2 = function (editor, forward) {\n var fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n return fromPosition(forward, editor.getBody(), fromPos).filter(function (pos) {\n return forward ? isBeforeImageBlock(pos) : isAfterImageBlock(pos);\n }).bind(function (pos) {\n return Optional.from(getChildNodeAtRelativeOffset(forward ? 0 : -1, pos));\n }).exists(function (elm) {\n editor.selection.select(elm);\n return true;\n });\n };\n var backspaceDelete$4 = function (editor, forward) {\n return editor.selection.isCollapsed() ? deleteCaret$2(editor, forward) : false;\n };\n\n var isText = isText$7;\n var startsWithCaretContainer = function (node) {\n return isText(node) && node.data[0] === ZWSP$1;\n };\n var endsWithCaretContainer = function (node) {\n return isText(node) && node.data[node.data.length - 1] === ZWSP$1;\n };\n var createZwsp = function (node) {\n return node.ownerDocument.createTextNode(ZWSP$1);\n };\n var insertBefore = function (node) {\n if (isText(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(node)) {\n if (startsWithCaretContainer(node)) {\n return node;\n } else {\n node.insertData(0, ZWSP$1);\n return node;\n }\n } else {\n var newNode = createZwsp(node);\n node.parentNode.insertBefore(newNode, node);\n return newNode;\n }\n };\n var insertAfter = function (node) {\n if (isText(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(node)) {\n if (endsWithCaretContainer(node)) {\n return node;\n } else {\n node.appendData(ZWSP$1);\n return node;\n }\n } else {\n var newNode = createZwsp(node);\n if (node.nextSibling) {\n node.parentNode.insertBefore(newNode, node.nextSibling);\n } else {\n node.parentNode.appendChild(newNode);\n }\n return newNode;\n }\n };\n var insertInline = function (before, node) {\n return before ? insertBefore(node) : insertAfter(node);\n };\n var insertInlineBefore = curry(insertInline, true);\n var insertInlineAfter = curry(insertInline, false);\n\n var insertInlinePos = function (pos, before) {\n if (isText$7(pos.container())) {\n return insertInline(before, pos.container());\n } else {\n return insertInline(before, pos.getNode());\n }\n };\n var isPosCaretContainer = function (pos, caret) {\n var caretNode = caret.get();\n return caretNode && pos.container() === caretNode && isCaretContainerInline(caretNode);\n };\n var renderCaret = function (caret, location) {\n return location.fold(function (element) {\n remove$2(caret.get());\n var text = insertInlineBefore(element);\n caret.set(text);\n return Optional.some(CaretPosition(text, text.length - 1));\n }, function (element) {\n return firstPositionIn(element).map(function (pos) {\n if (!isPosCaretContainer(pos, caret)) {\n remove$2(caret.get());\n var text = insertInlinePos(pos, true);\n caret.set(text);\n return CaretPosition(text, 1);\n } else {\n return CaretPosition(caret.get(), 1);\n }\n });\n }, function (element) {\n return lastPositionIn(element).map(function (pos) {\n if (!isPosCaretContainer(pos, caret)) {\n remove$2(caret.get());\n var text = insertInlinePos(pos, false);\n caret.set(text);\n return CaretPosition(text, text.length - 1);\n } else {\n return CaretPosition(caret.get(), caret.get().length - 1);\n }\n });\n }, function (element) {\n remove$2(caret.get());\n var text = insertInlineAfter(element);\n caret.set(text);\n return Optional.some(CaretPosition(text, 1));\n });\n };\n\n var evaluateUntil = function (fns, args) {\n for (var i = 0; i < fns.length; i++) {\n var result = fns[i].apply(null, args);\n if (result.isSome()) {\n return result;\n }\n }\n return Optional.none();\n };\n\n var Location = Adt.generate([\n { before: ['element'] },\n { start: ['element'] },\n { end: ['element'] },\n { after: ['element'] }\n ]);\n var rescope$1 = function (rootNode, node) {\n var parentBlock = getParentBlock$2(node, rootNode);\n return parentBlock ? parentBlock : rootNode;\n };\n var before = function (isInlineTarget, rootNode, pos) {\n var nPos = normalizeForwards(pos);\n var scope = rescope$1(rootNode, nPos.container());\n return findRootInline(isInlineTarget, scope, nPos).fold(function () {\n return nextPosition(scope, nPos).bind(curry(findRootInline, isInlineTarget, scope)).map(function (inline) {\n return Location.before(inline);\n });\n }, Optional.none);\n };\n var isNotInsideFormatCaretContainer = function (rootNode, elm) {\n return getParentCaretContainer(rootNode, elm) === null;\n };\n var findInsideRootInline = function (isInlineTarget, rootNode, pos) {\n return findRootInline(isInlineTarget, rootNode, pos).filter(curry(isNotInsideFormatCaretContainer, rootNode));\n };\n var start$1 = function (isInlineTarget, rootNode, pos) {\n var nPos = normalizeBackwards(pos);\n return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {\n var prevPos = prevPosition(inline, nPos);\n return prevPos.isNone() ? Optional.some(Location.start(inline)) : Optional.none();\n });\n };\n var end = function (isInlineTarget, rootNode, pos) {\n var nPos = normalizeForwards(pos);\n return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {\n var nextPos = nextPosition(inline, nPos);\n return nextPos.isNone() ? Optional.some(Location.end(inline)) : Optional.none();\n });\n };\n var after = function (isInlineTarget, rootNode, pos) {\n var nPos = normalizeBackwards(pos);\n var scope = rescope$1(rootNode, nPos.container());\n return findRootInline(isInlineTarget, scope, nPos).fold(function () {\n return prevPosition(scope, nPos).bind(curry(findRootInline, isInlineTarget, scope)).map(function (inline) {\n return Location.after(inline);\n });\n }, Optional.none);\n };\n var isValidLocation = function (location) {\n return isRtl(getElement(location)) === false;\n };\n var readLocation = function (isInlineTarget, rootNode, pos) {\n var 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 var getElement = function (location) {\n return location.fold(identity, identity, identity, identity);\n };\n var getName = function (location) {\n return location.fold(constant('before'), constant('start'), constant('end'), constant('after'));\n };\n var outside = function (location) {\n return location.fold(Location.before, Location.before, Location.after, Location.after);\n };\n var inside = function (location) {\n return location.fold(Location.start, Location.start, Location.end, Location.end);\n };\n var isEq = function (location1, location2) {\n return getName(location1) === getName(location2) && getElement(location1) === getElement(location2);\n };\n var betweenInlines = function (forward, isInlineTarget, rootNode, from, to, location) {\n return lift2(findRootInline(isInlineTarget, rootNode, from), findRootInline(isInlineTarget, rootNode, to), function (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 };\n var skipNoMovement = function (fromLocation, toLocation) {\n return fromLocation.fold(always, function (fromLocation) {\n return !isEq(fromLocation, toLocation);\n });\n };\n var findLocationTraverse = function (forward, isInlineTarget, rootNode, fromLocation, pos) {\n var from = normalizePosition(forward, pos);\n var to = fromPosition(forward, rootNode, from).map(curry(normalizePosition, forward));\n var location = to.fold(function () {\n return fromLocation.map(outside);\n }, function (to) {\n return readLocation(isInlineTarget, rootNode, to).map(curry(betweenInlines, forward, isInlineTarget, rootNode, from, to)).filter(curry(skipNoMovement, fromLocation));\n });\n return location.filter(isValidLocation);\n };\n var findLocationSimple = function (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 var findLocation$1 = function (forward, isInlineTarget, rootNode, pos) {\n var from = normalizePosition(forward, pos);\n var fromLocation = readLocation(isInlineTarget, rootNode, from);\n return readLocation(isInlineTarget, rootNode, from).bind(curry(findLocationSimple, forward)).orThunk(function () {\n return findLocationTraverse(forward, isInlineTarget, rootNode, fromLocation, pos);\n });\n };\n curry(findLocation$1, false);\n curry(findLocation$1, true);\n\n var hasSelectionModifyApi = function (editor) {\n return isFunction(editor.selection.getSel().modify);\n };\n var moveRel = function (forward, selection, pos) {\n var 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 var moveByWord = function (forward, editor) {\n var rng = editor.selection.getRng();\n var 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 var flip = function (direction, positions) {\n return direction === HDirection.Backwards ? reverse(positions) : positions;\n };\n var walk = function (direction, caretWalker, pos) {\n return direction === HDirection.Forwards ? caretWalker.next(pos) : caretWalker.prev(pos);\n };\n var getBreakType = function (scope, direction, currentPos, nextPos) {\n if (isBr$5(nextPos.getNode(direction === HDirection.Forwards))) {\n return BreakType.Br;\n } else if (isInSameBlock(currentPos, nextPos) === false) {\n return BreakType.Block;\n } else {\n return BreakType.Wrap;\n }\n };\n var getPositionsUntil = function (predicate, direction, scope, start) {\n var caretWalker = CaretWalker(scope);\n var currentPos = start;\n var positions = [];\n while (currentPos) {\n var nextPos = walk(direction, caretWalker, currentPos);\n if (!nextPos) {\n break;\n }\n if (isBr$5(nextPos.getNode(false))) {\n if (direction === HDirection.Forwards) {\n return {\n positions: flip(direction, positions).concat([nextPos]),\n breakType: BreakType.Br,\n breakAt: Optional.some(nextPos)\n };\n } else {\n return {\n positions: flip(direction, positions),\n breakType: BreakType.Br,\n breakAt: Optional.some(nextPos)\n };\n }\n }\n if (!nextPos.isVisible()) {\n currentPos = nextPos;\n continue;\n }\n if (predicate(currentPos, nextPos)) {\n var breakType = getBreakType(scope, direction, currentPos, nextPos);\n return {\n positions: flip(direction, positions),\n breakType: 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 var getAdjacentLinePositions = function (direction, getPositionsUntilBreak, scope, start) {\n return getPositionsUntilBreak(scope, start).breakAt.map(function (pos) {\n var positions = getPositionsUntilBreak(scope, pos).positions;\n return direction === HDirection.Backwards ? positions.concat(pos) : [pos].concat(positions);\n }).getOr([]);\n };\n var findClosestHorizontalPositionFromPoint = function (positions, x) {\n return foldl(positions, function (acc, newPos) {\n return acc.fold(function () {\n return Optional.some(newPos);\n }, function (lastPos) {\n return lift2(head(lastPos.getClientRects()), head(newPos.getClientRects()), function (lastRect, newRect) {\n var lastDist = Math.abs(x - lastRect.left);\n var newDist = Math.abs(x - newRect.left);\n return newDist <= lastDist ? newPos : lastPos;\n }).or(acc);\n });\n }, Optional.none());\n };\n var findClosestHorizontalPosition = function (positions, pos) {\n return head(pos.getClientRects()).bind(function (targetRect) {\n return findClosestHorizontalPositionFromPoint(positions, targetRect.left);\n });\n };\n var getPositionsUntilPreviousLine = curry(getPositionsUntil, CaretPosition.isAbove, -1);\n var getPositionsUntilNextLine = curry(getPositionsUntil, CaretPosition.isBelow, 1);\n var getPositionsAbove = curry(getAdjacentLinePositions, -1, getPositionsUntilPreviousLine);\n var getPositionsBelow = curry(getAdjacentLinePositions, 1, getPositionsUntilNextLine);\n var isAtFirstLine = function (scope, pos) {\n return getPositionsUntilPreviousLine(scope, pos).breakAt.isNone();\n };\n var isAtLastLine = function (scope, pos) {\n return getPositionsUntilNextLine(scope, pos).breakAt.isNone();\n };\n var getFirstLinePositions = function (scope) {\n return firstPositionIn(scope).map(function (pos) {\n return [pos].concat(getPositionsUntilNextLine(scope, pos).positions);\n }).getOr([]);\n };\n var getLastLinePositions = function (scope) {\n return lastPositionIn(scope).map(function (pos) {\n return getPositionsUntilPreviousLine(scope, pos).positions.concat(pos);\n }).getOr([]);\n };\n\n var getNodeClientRects = function (node) {\n var toArrayWithNode = function (clientRects) {\n return map$3(clientRects, function (rect) {\n var clientRect = clone(rect);\n clientRect.node = node;\n return clientRect;\n });\n };\n if (isElement$5(node)) {\n return toArrayWithNode(node.getClientRects());\n }\n if (isText$7(node)) {\n var rng = node.ownerDocument.createRange();\n rng.setStart(node, 0);\n rng.setEnd(node, node.data.length);\n return toArrayWithNode(rng.getClientRects());\n }\n };\n var getClientRects = function (nodes) {\n return bind(nodes, getNodeClientRects);\n };\n\n var VDirection;\n (function (VDirection) {\n VDirection[VDirection['Up'] = -1] = 'Up';\n VDirection[VDirection['Down'] = 1] = 'Down';\n }(VDirection || (VDirection = {})));\n var findUntil = function (direction, root, predicateFn, node) {\n while (node = findNode$1(node, direction, isEditableCaretCandidate$1, root)) {\n if (predicateFn(node)) {\n return;\n }\n }\n };\n var walkUntil$1 = function (direction, isAboveFn, isBeflowFn, root, predicateFn, caretPosition) {\n var line = 0;\n var result = [];\n var add = function (node) {\n var clientRects = getClientRects([node]);\n if (direction === -1) {\n clientRects = clientRects.reverse();\n }\n for (var i = 0; i < clientRects.length; i++) {\n var 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 };\n var targetClientRect = last$1(caretPosition.getClientRects());\n if (!targetClientRect) {\n return result;\n }\n var node = caretPosition.getNode();\n add(node);\n findUntil(direction, root, add, node);\n return result;\n };\n var aboveLineNumber = function (lineNumber, clientRect) {\n return clientRect.line > lineNumber;\n };\n var isLineNumber = function (lineNumber, clientRect) {\n return clientRect.line === lineNumber;\n };\n var upUntil = curry(walkUntil$1, VDirection.Up, isAbove$1, isBelow$1);\n var downUntil = curry(walkUntil$1, VDirection.Down, isBelow$1, isAbove$1);\n var positionsUntil = function (direction, root, predicateFn, node) {\n var caretWalker = CaretWalker(root);\n var walkFn;\n var isBelowFn;\n var isAboveFn;\n var caretPosition;\n var result = [];\n var line = 0;\n var getClientRect = function (caretPosition) {\n if (direction === 1) {\n return last$1(caretPosition.getClientRects());\n }\n return last$1(caretPosition.getClientRects());\n };\n if (direction === 1) {\n walkFn = caretWalker.next;\n isBelowFn = isBelow$1;\n isAboveFn = isAbove$1;\n caretPosition = CaretPosition.after(node);\n } else {\n walkFn = caretWalker.prev;\n isBelowFn = isAbove$1;\n isAboveFn = isBelow$1;\n caretPosition = CaretPosition.before(node);\n }\n var targetClientRect = getClientRect(caretPosition);\n do {\n if (!caretPosition.isVisible()) {\n continue;\n }\n var rect = getClientRect(caretPosition);\n if (isAboveFn(rect, targetClientRect)) {\n continue;\n }\n if (result.length > 0 && isBelowFn(rect, last$1(result))) {\n line++;\n }\n var clientRect = clone(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 var isAboveLine = function (lineNumber) {\n return function (clientRect) {\n return aboveLineNumber(lineNumber, clientRect);\n };\n };\n var isLine = function (lineNumber) {\n return function (clientRect) {\n return isLineNumber(lineNumber, clientRect);\n };\n };\n\n var isContentEditableFalse$3 = isContentEditableFalse$b;\n var findNode = findNode$1;\n var distanceToRectLeft = function (clientRect, clientX) {\n return Math.abs(clientRect.left - clientX);\n };\n var distanceToRectRight = function (clientRect, clientX) {\n return Math.abs(clientRect.right - clientX);\n };\n var isInsideX = function (clientX, clientRect) {\n return clientX >= clientRect.left && clientX <= clientRect.right;\n };\n var isInsideY = function (clientY, clientRect) {\n return clientY >= clientRect.top && clientY <= clientRect.bottom;\n };\n var isNodeClientRect = function (rect) {\n return hasNonNullableKey(rect, 'node');\n };\n var findClosestClientRect = function (clientRects, clientX, allowInside) {\n if (allowInside === void 0) {\n allowInside = always;\n }\n return reduce(clientRects, function (oldClientRect, clientRect) {\n if (isInsideX(clientX, clientRect)) {\n return allowInside(clientRect) ? clientRect : oldClientRect;\n }\n if (isInsideX(clientX, oldClientRect)) {\n return allowInside(oldClientRect) ? oldClientRect : clientRect;\n }\n var oldDistance = Math.min(distanceToRectLeft(oldClientRect, clientX), distanceToRectRight(oldClientRect, clientX));\n var newDistance = Math.min(distanceToRectLeft(clientRect, clientX), distanceToRectRight(clientRect, clientX));\n if (newDistance === oldDistance && isNodeClientRect(clientRect) && isContentEditableFalse$3(clientRect.node)) {\n return clientRect;\n }\n if (newDistance < oldDistance) {\n return clientRect;\n }\n return oldClientRect;\n });\n };\n var walkUntil = function (direction, root, predicateFn, startNode, includeChildren) {\n var node = findNode(startNode, direction, isEditableCaretCandidate$1, root, !includeChildren);\n do {\n if (!node || predicateFn(node)) {\n return;\n }\n } while (node = findNode(node, direction, isEditableCaretCandidate$1, root));\n };\n var findLineNodeRects = function (root, targetNodeRect, includeChildren) {\n if (includeChildren === void 0) {\n includeChildren = true;\n }\n var clientRects = [];\n var collect = function (checkPosFn, node) {\n var lineRects = filter$4(getClientRects([node]), function (clientRect) {\n return !checkPosFn(clientRect, targetNodeRect);\n });\n clientRects = clientRects.concat(lineRects);\n return lineRects.length === 0;\n };\n clientRects.push(targetNodeRect);\n walkUntil(VDirection.Up, root, curry(collect, isAbove$1), targetNodeRect.node, includeChildren);\n walkUntil(VDirection.Down, root, curry(collect, isBelow$1), targetNodeRect.node, includeChildren);\n return clientRects;\n };\n var getFakeCaretTargets = function (root) {\n return filter$4(from(root.getElementsByTagName('*')), isFakeCaretTarget);\n };\n var caretInfo = function (clientRect, clientX) {\n return {\n node: clientRect.node,\n before: distanceToRectLeft(clientRect, clientX) < distanceToRectRight(clientRect, clientX)\n };\n };\n var closestFakeCaret = function (root, clientX, clientY) {\n var fakeTargetNodeRects = getClientRects(getFakeCaretTargets(root));\n var targetNodeRects = filter$4(fakeTargetNodeRects, curry(isInsideY, clientY));\n var checkInside = function (clientRect) {\n return !isTable$3(clientRect.node) && !isMedia$2(clientRect.node);\n };\n var closestNodeRect = findClosestClientRect(targetNodeRects, clientX, checkInside);\n if (closestNodeRect) {\n var includeChildren = checkInside(closestNodeRect);\n closestNodeRect = findClosestClientRect(findLineNodeRects(root, closestNodeRect, includeChildren), clientX, checkInside);\n if (closestNodeRect && isFakeCaretTarget(closestNodeRect.node)) {\n return caretInfo(closestNodeRect, clientX);\n }\n }\n return null;\n };\n\n var moveToRange = function (editor, rng) {\n editor.selection.setRng(rng);\n scrollRangeIntoView(editor, editor.selection.getRng());\n };\n var renderRangeCaretOpt = function (editor, range, scrollIntoView) {\n return Optional.some(renderRangeCaret(editor, range, scrollIntoView));\n };\n var moveHorizontally = function (editor, direction, range, isBefore, isAfter, isElement) {\n var forwards = direction === HDirection.Forwards;\n var caretWalker = CaretWalker(editor.getBody());\n var getNextPosFn = curry(getVisualCaretPosition, forwards ? caretWalker.next : caretWalker.prev);\n var isBeforeFn = forwards ? isBefore : isAfter;\n if (!range.collapsed) {\n var node = getSelectedNode(range);\n if (isElement(node)) {\n return showCaret(direction, editor, node, direction === HDirection.Backwards, false);\n }\n }\n var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n if (isBeforeFn(caretPosition)) {\n return selectNode(editor, caretPosition.getNode(!forwards));\n }\n var nextCaretPosition = normalizePosition(forwards, getNextPosFn(caretPosition));\n var rangeIsInContainerBlock = isRangeInCaretContainerBlock(range);\n if (!nextCaretPosition) {\n return rangeIsInContainerBlock ? Optional.some(range) : Optional.none();\n }\n if (isBeforeFn(nextCaretPosition)) {\n return showCaret(direction, editor, nextCaretPosition.getNode(!forwards), forwards, false);\n }\n var 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 var moveVertically = function (editor, direction, range, isBefore, isAfter, isElement) {\n var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n var caretClientRect = last$1(caretPosition.getClientRects());\n var forwards = direction === VDirection.Down;\n if (!caretClientRect) {\n return Optional.none();\n }\n var walkerFn = forwards ? downUntil : upUntil;\n var linePositions = walkerFn(editor.getBody(), isAboveLine(1), caretPosition);\n var nextLinePositions = filter$4(linePositions, isLine(1));\n var clientX = caretClientRect.left;\n var nextLineRect = findClosestClientRect(nextLinePositions, clientX);\n if (nextLineRect && isElement(nextLineRect.node)) {\n var dist1 = Math.abs(clientX - nextLineRect.left);\n var dist2 = Math.abs(clientX - nextLineRect.right);\n return showCaret(direction, editor, nextLineRect.node, dist1 < dist2, false);\n }\n var 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 var caretPositions = positionsUntil(direction, editor.getBody(), isAboveLine(1), currentNode);\n var closestNextLineRect = findClosestClientRect(filter$4(caretPositions, isLine(1)), clientX);\n if (closestNextLineRect) {\n return renderRangeCaretOpt(editor, closestNextLineRect.position.toRange(), false);\n }\n closestNextLineRect = last$1(filter$4(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(function (pos) {\n return renderRangeCaret(editor, pos.toRange(), false);\n });\n }\n return Optional.none();\n };\n var getLineEndPoint = function (editor, forward) {\n var rng = editor.selection.getRng();\n var body = editor.getBody();\n if (forward) {\n var from = CaretPosition.fromRangeEnd(rng);\n var result = getPositionsUntilNextLine(body, from);\n return last$2(result.positions);\n } else {\n var from = CaretPosition.fromRangeStart(rng);\n var result = getPositionsUntilPreviousLine(body, from);\n return head(result.positions);\n }\n };\n var moveToLineEndPoint$3 = function (editor, forward, isElementPosition) {\n return getLineEndPoint(editor, forward).filter(isElementPosition).exists(function (pos) {\n editor.selection.setRng(pos.toRange());\n return true;\n });\n };\n\n var setCaretPosition = function (editor, pos) {\n var 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 var setSelected = function (state, elm) {\n if (state) {\n elm.setAttribute('data-mce-selected', 'inline-boundary');\n } else {\n elm.removeAttribute('data-mce-selected');\n }\n };\n var renderCaretLocation = function (editor, caret, location) {\n return renderCaret(caret, location).map(function (pos) {\n setCaretPosition(editor, pos);\n return location;\n });\n };\n var findLocation = function (editor, caret, forward) {\n var rootNode = editor.getBody();\n var from = CaretPosition.fromRangeStart(editor.selection.getRng());\n var isInlineTarget$1 = curry(isInlineTarget, editor);\n var location = findLocation$1(forward, isInlineTarget$1, rootNode, from);\n return location.bind(function (location) {\n return renderCaretLocation(editor, caret, location);\n });\n };\n var toggleInlines = function (isInlineTarget, dom, elms) {\n var inlineBoundaries = map$3(descendants(SugarElement.fromDom(dom.getRoot()), '*[data-mce-selected=\"inline-boundary\"]'), function (e) {\n return e.dom;\n });\n var selectedInlines = filter$4(inlineBoundaries, isInlineTarget);\n var targetInlines = filter$4(elms, isInlineTarget);\n each$k(difference(selectedInlines, targetInlines), curry(setSelected, false));\n each$k(difference(targetInlines, selectedInlines), curry(setSelected, true));\n };\n var safeRemoveCaretContainer = function (editor, caret) {\n if (editor.selection.isCollapsed() && editor.composing !== true && caret.get()) {\n var pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n if (CaretPosition.isTextPosition(pos) && isAtZwsp(pos) === false) {\n setCaretPosition(editor, removeAndReposition(caret.get(), pos));\n caret.set(null);\n }\n }\n };\n var renderInsideInlineCaret = function (isInlineTarget, editor, caret, elms) {\n if (editor.selection.isCollapsed()) {\n var inlines = filter$4(elms, isInlineTarget);\n each$k(inlines, function (_inline) {\n var pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n readLocation(isInlineTarget, editor.getBody(), pos).bind(function (location) {\n return renderCaretLocation(editor, caret, location);\n });\n });\n }\n };\n var move$2 = function (editor, caret, forward) {\n return isInlineBoundariesEnabled(editor) ? findLocation(editor, caret, forward).isSome() : false;\n };\n var moveWord = function (forward, editor, _caret) {\n return isInlineBoundariesEnabled(editor) ? moveByWord(forward, editor) : false;\n };\n var setupSelectedState = function (editor) {\n var caret = Cell(null);\n var isInlineTarget$1 = curry(isInlineTarget, editor);\n editor.on('NodeChange', function (e) {\n if (isInlineBoundariesEnabled(editor) && !(Env.browser.isIE() && e.initial)) {\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 var moveNextWord = curry(moveWord, true);\n var movePrevWord = curry(moveWord, false);\n var moveToLineEndPoint$2 = function (editor, forward, caret) {\n if (isInlineBoundariesEnabled(editor)) {\n var linePoint = getLineEndPoint(editor, forward).getOrThunk(function () {\n var rng = editor.selection.getRng();\n return forward ? CaretPosition.fromRangeEnd(rng) : CaretPosition.fromRangeStart(rng);\n });\n return readLocation(curry(isInlineTarget, editor), editor.getBody(), linePoint).exists(function (loc) {\n var outsideLoc = outside(loc);\n return renderCaret(caret, outsideLoc).exists(function (pos) {\n setCaretPosition(editor, pos);\n return true;\n });\n });\n } else {\n return false;\n }\n };\n\n var rangeFromPositions = function (from, to) {\n var range = document.createRange();\n range.setStart(from.container(), from.offset());\n range.setEnd(to.container(), to.offset());\n return range;\n };\n var hasOnlyTwoOrLessPositionsLeft = function (elm) {\n return lift2(firstPositionIn(elm), lastPositionIn(elm), function (firstPos, lastPos) {\n var normalizedFirstPos = normalizePosition(true, firstPos);\n var normalizedLastPos = normalizePosition(false, lastPos);\n return nextPosition(elm, normalizedFirstPos).forall(function (pos) {\n return pos.isEqual(normalizedLastPos);\n });\n }).getOr(true);\n };\n var setCaretLocation = function (editor, caret) {\n return function (location) {\n return renderCaret(caret, location).exists(function (pos) {\n setCaretPosition(editor, pos);\n return true;\n });\n };\n };\n var deleteFromTo = function (editor, caret, from, to) {\n var rootNode = editor.getBody();\n var isInlineTarget$1 = curry(isInlineTarget, editor);\n editor.undoManager.ignore(function () {\n editor.selection.setRng(rangeFromPositions(from, to));\n editor.execCommand('Delete');\n readLocation(isInlineTarget$1, rootNode, CaretPosition.fromRangeStart(editor.selection.getRng())).map(inside).map(setCaretLocation(editor, caret));\n });\n editor.nodeChanged();\n };\n var rescope = function (rootNode, node) {\n var parentBlock = getParentBlock$2(node, rootNode);\n return parentBlock ? parentBlock : rootNode;\n };\n var backspaceDeleteCollapsed = function (editor, caret, forward, from) {\n var rootNode = rescope(editor.getBody(), from.container());\n var isInlineTarget$1 = curry(isInlineTarget, editor);\n var fromLocation = readLocation(isInlineTarget$1, rootNode, from);\n return fromLocation.bind(function (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 }).map(setCaretLocation(editor, caret)).getOrThunk(function () {\n var toPosition = navigate(forward, rootNode, from);\n var toLocation = toPosition.bind(function (pos) {\n return readLocation(isInlineTarget$1, rootNode, pos);\n });\n return lift2(fromLocation, toLocation, function () {\n return findRootInline(isInlineTarget$1, rootNode, from).exists(function (elm) {\n if (hasOnlyTwoOrLessPositionsLeft(elm)) {\n deleteElement$2(editor, forward, SugarElement.fromDom(elm));\n return true;\n } else {\n return false;\n }\n });\n }).orThunk(function () {\n return toLocation.bind(function (_) {\n return toPosition.map(function (to) {\n if (forward) {\n deleteFromTo(editor, caret, from, to);\n } else {\n deleteFromTo(editor, caret, to, from);\n }\n return true;\n });\n });\n }).getOr(false);\n });\n };\n var backspaceDelete$3 = function (editor, caret, forward) {\n if (editor.selection.isCollapsed() && isInlineBoundariesEnabled(editor)) {\n var from = CaretPosition.fromRangeStart(editor.selection.getRng());\n return backspaceDeleteCollapsed(editor, caret, forward, from);\n }\n return false;\n };\n\n var getParentInlines = function (rootElm, startElm) {\n var parents = parentsAndSelf(startElm, rootElm);\n return findIndex$2(parents, isBlock$2).fold(constant(parents), function (index) {\n return parents.slice(0, index);\n });\n };\n var hasOnlyOneChild = function (elm) {\n return childNodesCount(elm) === 1;\n };\n var deleteLastPosition = function (forward, editor, target, parentInlines) {\n var isFormatElement$1 = curry(isFormatElement, editor);\n var formatNodes = map$3(filter$4(parentInlines, isFormatElement$1), function (elm) {\n return elm.dom;\n });\n if (formatNodes.length === 0) {\n deleteElement$2(editor, forward, target);\n } else {\n var pos = replaceWithCaretFormat(target.dom, formatNodes);\n editor.selection.setRng(pos.toRange());\n }\n };\n var deleteCaret$1 = function (editor, forward) {\n var rootElm = SugarElement.fromDom(editor.getBody());\n var startElm = SugarElement.fromDom(editor.selection.getStart());\n var parentInlines = filter$4(getParentInlines(rootElm, startElm), hasOnlyOneChild);\n return last$2(parentInlines).exists(function (target) {\n var fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());\n if (willDeleteLastPositionInElement(forward, fromPos, target.dom) && !isEmptyCaretFormatElement(target)) {\n deleteLastPosition(forward, editor, target, parentInlines);\n return true;\n } else {\n return false;\n }\n });\n };\n var backspaceDelete$2 = function (editor, forward) {\n return editor.selection.isCollapsed() ? deleteCaret$1(editor, forward) : false;\n };\n\n var deleteElement = function (editor, forward, element) {\n editor._selectionOverrides.hideFakeCaret();\n deleteElement$2(editor, forward, SugarElement.fromDom(element));\n return true;\n };\n var deleteCaret = function (editor, forward) {\n var isNearMedia = forward ? isBeforeMedia : isAfterMedia;\n var direction = forward ? HDirection.Forwards : HDirection.Backwards;\n var 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(function (pos) {\n return isNearMedia(pos) && isMoveInsideSameBlock(fromPos, pos);\n }).exists(function (pos) {\n return deleteElement(editor, forward, pos.getNode(!forward));\n });\n }\n };\n var deleteRange = function (editor, forward) {\n var selectedNode = editor.selection.getNode();\n return isMedia$2(selectedNode) ? deleteElement(editor, forward, selectedNode) : false;\n };\n var backspaceDelete$1 = function (editor, forward) {\n return editor.selection.isCollapsed() ? deleteCaret(editor, forward) : deleteRange(editor, forward);\n };\n\n var isEditable = function (target) {\n return closest$3(target, function (elm) {\n return isContentEditableTrue$4(elm.dom) || isContentEditableFalse$b(elm.dom);\n }).exists(function (elm) {\n return isContentEditableTrue$4(elm.dom);\n });\n };\n var parseIndentValue = function (value) {\n var number = parseInt(value, 10);\n return isNaN(number) ? 0 : number;\n };\n var getIndentStyleName = function (useMargin, element) {\n var indentStyleName = useMargin || isTable$2(element) ? 'margin' : 'padding';\n var suffix = get$5(element, 'direction') === 'rtl' ? '-right' : '-left';\n return indentStyleName + suffix;\n };\n var indentElement = function (dom, command, useMargin, value, unit, element) {\n var indentStyleName = getIndentStyleName(useMargin, SugarElement.fromDom(element));\n if (command === 'outdent') {\n var styleValue = Math.max(0, parseIndentValue(element.style[indentStyleName]) - value);\n dom.setStyle(element, indentStyleName, styleValue ? styleValue + unit : '');\n } else {\n var styleValue = parseIndentValue(element.style[indentStyleName]) + value + unit;\n dom.setStyle(element, indentStyleName, styleValue);\n }\n };\n var validateBlocks = function (editor, blocks) {\n return forall(blocks, function (block) {\n var indentStyleName = getIndentStyleName(shouldIndentUseMargin(editor), block);\n var intentValue = getRaw(block, indentStyleName).map(parseIndentValue).getOr(0);\n var contentEditable = editor.dom.getContentEditable(block.dom);\n return contentEditable !== 'false' && intentValue > 0;\n });\n };\n var canOutdent = function (editor) {\n var blocks = getBlocksToIndent(editor);\n return !editor.mode.isReadOnly() && (blocks.length > 1 || validateBlocks(editor, blocks));\n };\n var isListComponent = function (el) {\n return isList(el) || isListItem(el);\n };\n var parentIsListComponent = function (el) {\n return parent(el).exists(isListComponent);\n };\n var getBlocksToIndent = function (editor) {\n return filter$4(fromDom$1(editor.selection.getSelectedBlocks()), function (el) {\n return !isListComponent(el) && !parentIsListComponent(el) && isEditable(el);\n });\n };\n var handle = function (editor, command) {\n var dom = editor.dom, selection = editor.selection, formatter = editor.formatter;\n var indentation = getIndentation(editor);\n var indentUnit = /[a-z%]+$/i.exec(indentation)[0];\n var indentValue = parseInt(indentation, 10);\n var useMargin = shouldIndentUseMargin(editor);\n var forcedRootBlock = getForcedRootBlock(editor);\n if (!editor.queryCommandState('InsertUnorderedList') && !editor.queryCommandState('InsertOrderedList')) {\n if (forcedRootBlock === '' && !dom.getParent(selection.getNode(), dom.isBlock)) {\n formatter.apply('div');\n }\n }\n each$k(getBlocksToIndent(editor), function (block) {\n indentElement(dom, command, useMargin, indentValue, indentUnit, block.dom);\n });\n };\n\n var backspaceDelete = function (editor, _forward) {\n if (editor.selection.isCollapsed() && canOutdent(editor)) {\n var dom = editor.dom;\n var rng = editor.selection.getRng();\n var pos = CaretPosition.fromRangeStart(rng);\n var block = dom.getParent(rng.startContainer, dom.isBlock);\n if (block !== null && isAtStartOfBlock(SugarElement.fromDom(block), pos)) {\n handle(editor, 'outdent');\n return true;\n }\n }\n return false;\n };\n\n var nativeCommand = function (editor, command) {\n editor.getDoc().execCommand(command, false, null);\n };\n var deleteCommand = function (editor, caret) {\n if (backspaceDelete(editor)) {\n return;\n } else if (backspaceDelete$5(editor, false)) {\n return;\n } else if (backspaceDelete$6(editor, false)) {\n return;\n } else if (backspaceDelete$3(editor, caret, false)) {\n return;\n } else if (backspaceDelete$8(editor, false)) {\n return;\n } else if (backspaceDelete$9(editor)) {\n return;\n } else if (backspaceDelete$4(editor, false)) {\n return;\n } else if (backspaceDelete$1(editor, false)) {\n return;\n } else if (backspaceDelete$7(editor)) {\n return;\n } else if (backspaceDelete$2(editor, false)) {\n return;\n } else {\n nativeCommand(editor, 'Delete');\n paddEmptyBody(editor);\n }\n };\n var forwardDeleteCommand = function (editor, caret) {\n if (backspaceDelete$5(editor, true)) {\n return;\n } else if (backspaceDelete$6(editor, true)) {\n return;\n } else if (backspaceDelete$3(editor, caret, true)) {\n return;\n } else if (backspaceDelete$8(editor, true)) {\n return;\n } else if (backspaceDelete$9(editor)) {\n return;\n } else if (backspaceDelete$4(editor, true)) {\n return;\n } else if (backspaceDelete$1(editor, true)) {\n return;\n } else if (backspaceDelete$7(editor)) {\n return;\n } else if (backspaceDelete$2(editor, true)) {\n return;\n } else {\n nativeCommand(editor, 'ForwardDelete');\n }\n };\n var setup$f = function (editor, caret) {\n editor.addCommand('delete', function () {\n deleteCommand(editor, caret);\n });\n editor.addCommand('forwardDelete', function () {\n forwardDeleteCommand(editor, caret);\n });\n };\n\n var SIGNIFICANT_MOVE = 5;\n var LONGPRESS_DELAY = 400;\n var getTouch = function (event) {\n if (event.touches === undefined || event.touches.length !== 1) {\n return Optional.none();\n }\n return Optional.some(event.touches[0]);\n };\n var isFarEnough = function (touch, data) {\n var distX = Math.abs(touch.clientX - data.x);\n var distY = Math.abs(touch.clientY - data.y);\n return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE;\n };\n var setup$e = function (editor) {\n var startData = value();\n var longpressFired = Cell(false);\n var debounceLongpress = last(function (e) {\n editor.fire('longpress', __assign(__assign({}, e), { type: 'longpress' }));\n longpressFired.set(true);\n }, LONGPRESS_DELAY);\n editor.on('touchstart', function (e) {\n getTouch(e).each(function (touch) {\n debounceLongpress.cancel();\n var 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', function (e) {\n debounceLongpress.cancel();\n getTouch(e).each(function (touch) {\n startData.on(function (data) {\n if (isFarEnough(touch, data)) {\n startData.clear();\n longpressFired.set(false);\n editor.fire('longpresscancel');\n }\n });\n });\n }, true);\n editor.on('touchend touchcancel', function (e) {\n debounceLongpress.cancel();\n if (e.type === 'touchcancel') {\n return;\n }\n startData.get().filter(function (data) {\n return data.target.isEqualNode(e.target);\n }).each(function () {\n if (longpressFired.get()) {\n e.preventDefault();\n } else {\n editor.fire('tap', __assign(__assign({}, e), { type: 'tap' }));\n }\n });\n }, true);\n };\n\n var isBlockElement = function (blockElements, node) {\n return has$2(blockElements, node.nodeName);\n };\n var isValidTarget = function (blockElements, node) {\n if (isText$7(node)) {\n return true;\n } else if (isElement$5(node)) {\n return !isBlockElement(blockElements, node) && !isBookmarkNode$1(node);\n } else {\n return false;\n }\n };\n var hasBlockParent = function (blockElements, root, node) {\n return exists(parents(SugarElement.fromDom(node), SugarElement.fromDom(root)), function (elm) {\n return isBlockElement(blockElements, elm.dom);\n });\n };\n var shouldRemoveTextNode = function (blockElements, node) {\n if (isText$7(node)) {\n if (node.nodeValue.length === 0) {\n return true;\n } else if (/^\\s+$/.test(node.nodeValue) && (!node.nextSibling || isBlockElement(blockElements, node.nextSibling))) {\n return true;\n }\n }\n return false;\n };\n var addRootBlocks = function (editor) {\n var dom = editor.dom, selection = editor.selection;\n var schema = editor.schema, blockElements = schema.getBlockElements();\n var node = selection.getStart();\n var rootNode = editor.getBody();\n var rootBlockNode, tempNode, wrapped;\n var forcedRootBlock = getForcedRootBlock(editor);\n if (!node || !isElement$5(node) || !forcedRootBlock) {\n return;\n }\n var rootNodeName = rootNode.nodeName.toLowerCase();\n if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, node)) {\n return;\n }\n var rng = selection.getRng();\n var startContainer = rng.startContainer;\n var startOffset = rng.startOffset;\n var endContainer = rng.endContainer;\n var endOffset = rng.endOffset;\n var restoreSelection = hasFocus(editor);\n node = rootNode.firstChild;\n while (node) {\n if (isValidTarget(blockElements, node)) {\n if (shouldRemoveTextNode(blockElements, node)) {\n tempNode = node;\n node = node.nextSibling;\n dom.remove(tempNode);\n continue;\n }\n if (!rootBlockNode) {\n rootBlockNode = dom.create(forcedRootBlock, getForcedRootBlockAttrs(editor));\n node.parentNode.insertBefore(rootBlockNode, node);\n wrapped = true;\n }\n tempNode = node;\n node = node.nextSibling;\n rootBlockNode.appendChild(tempNode);\n } else {\n rootBlockNode = null;\n node = node.nextSibling;\n }\n }\n if (wrapped && restoreSelection) {\n rng.setStart(startContainer, startOffset);\n rng.setEnd(endContainer, endOffset);\n selection.setRng(rng);\n editor.nodeChanged();\n }\n };\n var setup$d = function (editor) {\n if (getForcedRootBlock(editor)) {\n editor.on('NodeChange', curry(addRootBlocks, editor));\n }\n };\n\n var findBlockCaretContainer = function (editor) {\n return descendant(SugarElement.fromDom(editor.getBody()), '*[data-mce-caret]').map(function (elm) {\n return elm.dom;\n }).getOrNull();\n };\n var removeIeControlRect = function (editor) {\n editor.selection.setRng(editor.selection.getRng());\n };\n var showBlockCaretContainer = function (editor, blockCaretContainer) {\n if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n showCaretContainerBlock(blockCaretContainer);\n removeIeControlRect(editor);\n editor.selection.scrollIntoView(blockCaretContainer);\n }\n };\n var handleBlockContainer = function (editor, e) {\n var 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 var setup$c = function (editor) {\n editor.on('keyup compositionstart', curry(handleBlockContainer, editor));\n };\n\n var isContentEditableFalse$2 = isContentEditableFalse$b;\n var moveToCeFalseHorizontally = function (direction, editor, range) {\n return moveHorizontally(editor, direction, range, isBeforeContentEditableFalse, isAfterContentEditableFalse, isContentEditableFalse$2);\n };\n var moveToCeFalseVertically = function (direction, editor, range) {\n var isBefore = function (caretPosition) {\n return isBeforeContentEditableFalse(caretPosition) || isBeforeTable(caretPosition);\n };\n var isAfter = function (caretPosition) {\n return isAfterContentEditableFalse(caretPosition) || isAfterTable(caretPosition);\n };\n return moveVertically(editor, direction, range, isBefore, isAfter, isContentEditableFalse$2);\n };\n var createTextBlock = function (editor) {\n var textBlock = editor.dom.create(getForcedRootBlock(editor));\n if (!Env.ie || Env.ie >= 11) {\n textBlock.innerHTML = '
    ';\n }\n return textBlock;\n };\n var exitPreBlock = function (editor, direction, range) {\n var caretWalker = CaretWalker(editor.getBody());\n var getVisualCaretPosition$1 = curry(getVisualCaretPosition, direction === 1 ? caretWalker.next : caretWalker.prev);\n if (range.collapsed && hasForcedRootBlock(editor)) {\n var pre = editor.dom.getParent(range.startContainer, 'PRE');\n if (!pre) {\n return;\n }\n var caretPos = getVisualCaretPosition$1(CaretPosition.fromRangeStart(range));\n if (!caretPos) {\n var newBlock = createTextBlock(editor);\n if (direction === 1) {\n editor.$(pre).after(newBlock);\n } else {\n editor.$(pre).before(newBlock);\n }\n editor.selection.select(newBlock, true);\n editor.selection.collapse();\n }\n }\n };\n var getHorizontalRange = function (editor, forward) {\n var direction = forward ? HDirection.Forwards : HDirection.Backwards;\n var range = editor.selection.getRng();\n return moveToCeFalseHorizontally(direction, editor, range).orThunk(function () {\n exitPreBlock(editor, direction, range);\n return Optional.none();\n });\n };\n var getVerticalRange = function (editor, down) {\n var direction = down ? 1 : -1;\n var range = editor.selection.getRng();\n return moveToCeFalseVertically(direction, editor, range).orThunk(function () {\n exitPreBlock(editor, direction, range);\n return Optional.none();\n });\n };\n var moveH$2 = function (editor, forward) {\n return getHorizontalRange(editor, forward).exists(function (newRange) {\n moveToRange(editor, newRange);\n return true;\n });\n };\n var moveV$3 = function (editor, down) {\n return getVerticalRange(editor, down).exists(function (newRange) {\n moveToRange(editor, newRange);\n return true;\n });\n };\n var moveToLineEndPoint$1 = function (editor, forward) {\n var isCefPosition = forward ? isAfterContentEditableFalse : isBeforeContentEditableFalse;\n return moveToLineEndPoint$3(editor, forward, isCefPosition);\n };\n\n var isTarget = function (node) {\n return contains$3(['figcaption'], name(node));\n };\n var rangeBefore = function (target) {\n var rng = document.createRange();\n rng.setStartBefore(target.dom);\n rng.setEndBefore(target.dom);\n return rng;\n };\n var insertElement = function (root, elm, forward) {\n if (forward) {\n append$1(root, elm);\n } else {\n prepend(root, elm);\n }\n };\n var insertBr = function (root, forward) {\n var br = SugarElement.fromTag('br');\n insertElement(root, br, forward);\n return rangeBefore(br);\n };\n var insertBlock = function (root, forward, blockName, attrs) {\n var block = SugarElement.fromTag(blockName);\n var br = SugarElement.fromTag('br');\n setAll$1(block, attrs);\n append$1(block, br);\n insertElement(root, block, forward);\n return rangeBefore(br);\n };\n var insertEmptyLine = function (root, rootBlockName, attrs, forward) {\n if (rootBlockName === '') {\n return insertBr(root, forward);\n } else {\n return insertBlock(root, forward, rootBlockName, attrs);\n }\n };\n var getClosestTargetBlock = function (pos, root) {\n var isRoot = curry(eq, root);\n return closest$3(SugarElement.fromDom(pos.container()), isBlock$2, isRoot).filter(isTarget);\n };\n var isAtFirstOrLastLine = function (root, forward, pos) {\n return forward ? isAtLastLine(root.dom, pos) : isAtFirstLine(root.dom, pos);\n };\n var moveCaretToNewEmptyLine = function (editor, forward) {\n var root = SugarElement.fromDom(editor.getBody());\n var pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n var rootBlock = getForcedRootBlock(editor);\n var rootBlockAttrs = getForcedRootBlockAttrs(editor);\n return getClosestTargetBlock(pos, root).exists(function () {\n if (isAtFirstOrLastLine(root, forward, pos)) {\n var rng = insertEmptyLine(root, rootBlock, rootBlockAttrs, forward);\n editor.selection.setRng(rng);\n return true;\n } else {\n return false;\n }\n });\n };\n var moveV$2 = function (editor, forward) {\n if (editor.selection.isCollapsed()) {\n return moveCaretToNewEmptyLine(editor, forward);\n } else {\n return false;\n }\n };\n\n var defaultPatterns = function (patterns) {\n return map$3(patterns, function (pattern) {\n return __assign({\n shiftKey: false,\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n keyCode: 0,\n action: noop\n }, pattern);\n });\n };\n var matchesEvent = function (pattern, evt) {\n return evt.keyCode === pattern.keyCode && evt.shiftKey === pattern.shiftKey && evt.altKey === pattern.altKey && evt.ctrlKey === pattern.ctrlKey && evt.metaKey === pattern.metaKey;\n };\n var match$1 = function (patterns, evt) {\n return bind(defaultPatterns(patterns), function (pattern) {\n return matchesEvent(pattern, evt) ? [pattern] : [];\n });\n };\n var action = function (f) {\n var x = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n x[_i - 1] = arguments[_i];\n }\n return function () {\n return f.apply(null, x);\n };\n };\n var execute = function (patterns, evt) {\n return find$3(match$1(patterns, evt), function (pattern) {\n return pattern.action();\n });\n };\n\n var moveH$1 = function (editor, forward) {\n var direction = forward ? HDirection.Forwards : HDirection.Backwards;\n var range = editor.selection.getRng();\n return moveHorizontally(editor, direction, range, isBeforeMedia, isAfterMedia, isMedia$2).exists(function (newRange) {\n moveToRange(editor, newRange);\n return true;\n });\n };\n var moveV$1 = function (editor, down) {\n var direction = down ? 1 : -1;\n var range = editor.selection.getRng();\n return moveVertically(editor, direction, range, isBeforeMedia, isAfterMedia, isMedia$2).exists(function (newRange) {\n moveToRange(editor, newRange);\n return true;\n });\n };\n var moveToLineEndPoint = function (editor, forward) {\n var isNearMedia = forward ? isAfterMedia : isBeforeMedia;\n return moveToLineEndPoint$3(editor, forward, isNearMedia);\n };\n\n var deflate = function (rect, delta) {\n return {\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 };\n var getCorners = function (getYAxisValue, tds) {\n return bind(tds, function (td) {\n var rect = deflate(clone(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 };\n var findClosestCorner = function (corners, x, y) {\n return foldl(corners, function (acc, newCorner) {\n return acc.fold(function () {\n return Optional.some(newCorner);\n }, function (oldCorner) {\n var oldDist = Math.sqrt(Math.abs(oldCorner.x - x) + Math.abs(oldCorner.y - y));\n var newDist = Math.sqrt(Math.abs(newCorner.x - x) + Math.abs(newCorner.y - y));\n return Optional.some(newDist < oldDist ? newCorner : oldCorner);\n });\n }, Optional.none());\n };\n var getClosestCell = function (getYAxisValue, isTargetCorner, table, x, y) {\n var cells = descendants(SugarElement.fromDom(table), 'td,th,caption').map(function (e) {\n return e.dom;\n });\n var corners = filter$4(getCorners(getYAxisValue, cells), function (corner) {\n return isTargetCorner(corner, y);\n });\n return findClosestCorner(corners, x, y).map(function (corner) {\n return corner.cell;\n });\n };\n var getBottomValue = function (rect) {\n return rect.bottom;\n };\n var getTopValue = function (rect) {\n return rect.top;\n };\n var isAbove = function (corner, y) {\n return corner.y < y;\n };\n var isBelow = function (corner, y) {\n return corner.y > y;\n };\n var getClosestCellAbove = curry(getClosestCell, getBottomValue, isAbove);\n var getClosestCellBelow = curry(getClosestCell, getTopValue, isBelow);\n var findClosestPositionInAboveCell = function (table, pos) {\n return head(pos.getClientRects()).bind(function (rect) {\n return getClosestCellAbove(table, rect.left, rect.top);\n }).bind(function (cell) {\n return findClosestHorizontalPosition(getLastLinePositions(cell), pos);\n });\n };\n var findClosestPositionInBelowCell = function (table, pos) {\n return last$2(pos.getClientRects()).bind(function (rect) {\n return getClosestCellBelow(table, rect.left, rect.top);\n }).bind(function (cell) {\n return findClosestHorizontalPosition(getFirstLinePositions(cell), pos);\n });\n };\n\n var hasNextBreak = function (getPositionsUntil, scope, lineInfo) {\n return lineInfo.breakAt.exists(function (breakPos) {\n return getPositionsUntil(scope, breakPos).breakAt.isSome();\n });\n };\n var startsWithWrapBreak = function (lineInfo) {\n return lineInfo.breakType === BreakType.Wrap && lineInfo.positions.length === 0;\n };\n var startsWithBrBreak = function (lineInfo) {\n return lineInfo.breakType === BreakType.Br && lineInfo.positions.length === 1;\n };\n var isAtTableCellLine = function (getPositionsUntil, scope, pos) {\n var lineInfo = getPositionsUntil(scope, pos);\n if (startsWithWrapBreak(lineInfo) || !isBr$5(pos.getNode()) && startsWithBrBreak(lineInfo)) {\n return !hasNextBreak(getPositionsUntil, scope, lineInfo);\n } else {\n return lineInfo.breakAt.isNone();\n }\n };\n var isAtFirstTableCellLine = curry(isAtTableCellLine, getPositionsUntilPreviousLine);\n var isAtLastTableCellLine = curry(isAtTableCellLine, getPositionsUntilNextLine);\n var isCaretAtStartOrEndOfTable = function (forward, rng, table) {\n var caretPos = CaretPosition.fromRangeStart(rng);\n return positionIn(!forward, table).exists(function (pos) {\n return pos.isEqual(caretPos);\n });\n };\n var navigateHorizontally = function (editor, forward, table, _td) {\n var rng = editor.selection.getRng();\n var direction = forward ? 1 : -1;\n if (isFakeCaretTableBrowser() && isCaretAtStartOrEndOfTable(forward, rng, table)) {\n showCaret(direction, editor, table, !forward, false).each(function (newRng) {\n moveToRange(editor, newRng);\n });\n return true;\n }\n return false;\n };\n var getClosestAbovePosition = function (root, table, start) {\n return findClosestPositionInAboveCell(table, start).orThunk(function () {\n return head(start.getClientRects()).bind(function (rect) {\n return findClosestHorizontalPositionFromPoint(getPositionsAbove(root, CaretPosition.before(table)), rect.left);\n });\n }).getOr(CaretPosition.before(table));\n };\n var getClosestBelowPosition = function (root, table, start) {\n return findClosestPositionInBelowCell(table, start).orThunk(function () {\n return head(start.getClientRects()).bind(function (rect) {\n return findClosestHorizontalPositionFromPoint(getPositionsBelow(root, CaretPosition.after(table)), rect.left);\n });\n }).getOr(CaretPosition.after(table));\n };\n var getTable = function (previous, pos) {\n var node = pos.getNode(previous);\n return isElement$5(node) && node.nodeName === 'TABLE' ? Optional.some(node) : Optional.none();\n };\n var renderBlock = function (down, editor, table, pos) {\n var forcedRootBlock = getForcedRootBlock(editor);\n if (forcedRootBlock) {\n editor.undoManager.transact(function () {\n var element = SugarElement.fromTag(forcedRootBlock);\n setAll$1(element, getForcedRootBlockAttrs(editor));\n append$1(element, SugarElement.fromTag('br'));\n if (down) {\n after$3(SugarElement.fromDom(table), element);\n } else {\n before$4(SugarElement.fromDom(table), element);\n }\n var rng = editor.dom.createRng();\n rng.setStart(element.dom, 0);\n rng.setEnd(element.dom, 0);\n moveToRange(editor, rng);\n });\n } else {\n moveToRange(editor, pos.toRange());\n }\n };\n var moveCaret = function (editor, down, pos) {\n var table = down ? getTable(true, pos) : getTable(false, pos);\n var last = down === false;\n table.fold(function () {\n return moveToRange(editor, pos.toRange());\n }, function (table) {\n return positionIn(last, editor.getBody()).filter(function (lastPos) {\n return lastPos.isEqual(pos);\n }).fold(function () {\n return moveToRange(editor, pos.toRange());\n }, function (_) {\n return renderBlock(down, editor, table, pos);\n });\n });\n };\n var navigateVertically = function (editor, down, table, td) {\n var rng = editor.selection.getRng();\n var pos = CaretPosition.fromRangeStart(rng);\n var root = editor.getBody();\n if (!down && isAtFirstTableCellLine(td, pos)) {\n var newPos = getClosestAbovePosition(root, table, pos);\n moveCaret(editor, down, newPos);\n return true;\n } else if (down && isAtLastTableCellLine(td, pos)) {\n var newPos = getClosestBelowPosition(root, table, pos);\n moveCaret(editor, down, newPos);\n return true;\n } else {\n return false;\n }\n };\n var move$1 = function (editor, forward, mover) {\n return Optional.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {\n return Optional.from(editor.dom.getParent(td, 'table')).map(function (table) {\n return mover(editor, forward, table, td);\n });\n }).getOr(false);\n };\n var moveH = function (editor, forward) {\n return move$1(editor, forward, navigateHorizontally);\n };\n var moveV = function (editor, forward) {\n return move$1(editor, forward, navigateVertically);\n };\n\n var executeKeydownOverride$3 = function (editor, caret, evt) {\n var os = detect().os;\n execute([\n {\n keyCode: VK.RIGHT,\n action: action(moveH$2, editor, true)\n },\n {\n keyCode: VK.LEFT,\n action: action(moveH$2, editor, false)\n },\n {\n keyCode: VK.UP,\n action: action(moveV$3, editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: action(moveV$3, editor, true)\n },\n {\n keyCode: VK.RIGHT,\n action: action(moveH, editor, true)\n },\n {\n keyCode: VK.LEFT,\n action: action(moveH, editor, false)\n },\n {\n keyCode: VK.UP,\n action: action(moveV, editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: action(moveV, editor, true)\n },\n {\n keyCode: VK.RIGHT,\n action: action(moveH$1, editor, true)\n },\n {\n keyCode: VK.LEFT,\n action: action(moveH$1, editor, false)\n },\n {\n keyCode: VK.UP,\n action: action(moveV$1, editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: action(moveV$1, editor, true)\n },\n {\n keyCode: VK.RIGHT,\n action: action(move$2, editor, caret, true)\n },\n {\n keyCode: VK.LEFT,\n action: action(move$2, editor, caret, false)\n },\n {\n keyCode: VK.RIGHT,\n ctrlKey: !os.isOSX(),\n altKey: os.isOSX(),\n action: action(moveNextWord, editor, caret)\n },\n {\n keyCode: VK.LEFT,\n ctrlKey: !os.isOSX(),\n altKey: os.isOSX(),\n action: action(movePrevWord, editor, caret)\n },\n {\n keyCode: VK.UP,\n action: action(moveV$2, editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: action(moveV$2, editor, true)\n }\n ], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var setup$b = function (editor, caret) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride$3(editor, caret, evt);\n }\n });\n };\n\n var executeKeydownOverride$2 = function (editor, caret, evt) {\n execute([\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete, editor, false)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$5, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$5, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$6, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$6, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$3, editor, caret, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$3, editor, caret, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$9, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$9, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$4, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$4, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$1, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$1, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$7, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$7, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$8, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$8, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: action(backspaceDelete$2, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: action(backspaceDelete$2, editor, true)\n }\n ], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var executeKeyupOverride = function (editor, evt) {\n execute([\n {\n keyCode: VK.BACKSPACE,\n action: action(paddEmptyElement, editor)\n },\n {\n keyCode: VK.DELETE,\n action: action(paddEmptyElement, editor)\n }\n ], evt);\n };\n var setup$a = function (editor, caret) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride$2(editor, caret, evt);\n }\n });\n editor.on('keyup', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeyupOverride(editor, evt);\n }\n });\n };\n\n var firstNonWhiteSpaceNodeSibling = function (node) {\n while (node) {\n if (node.nodeType === 1 || node.nodeType === 3 && node.data && /[\\r\\n\\s]/.test(node.data)) {\n return node;\n }\n node = node.nextSibling;\n }\n };\n var moveToCaretPosition = function (editor, root) {\n var node, lastNode = root;\n var dom = editor.dom;\n var moveCaretBeforeOnEnterElementsMap = editor.schema.getMoveCaretBeforeOnEnterElements();\n if (!root) {\n return;\n }\n if (/^(LI|DT|DD)$/.test(root.nodeName)) {\n var 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 var rng = dom.createRng();\n root.normalize();\n if (root.hasChildNodes()) {\n var walker = new DomTreeWalker(root, root);\n while (node = walker.current()) {\n if (isText$7(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$5(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 var getEditableRoot$1 = function (dom, node) {\n var root = dom.getRoot();\n var parent, editableRoot;\n parent = node;\n while (parent !== root && dom.getContentEditable(parent) !== 'false') {\n if (dom.getContentEditable(parent) === 'true') {\n editableRoot = parent;\n }\n parent = parent.parentNode;\n }\n return parent !== root ? editableRoot : root;\n };\n var getParentBlock = function (editor) {\n return Optional.from(editor.dom.getParent(editor.selection.getStart(true), editor.dom.isBlock));\n };\n var getParentBlockName = function (editor) {\n return getParentBlock(editor).fold(constant(''), function (parentBlock) {\n return parentBlock.nodeName.toUpperCase();\n });\n };\n var isListItemParentBlock = function (editor) {\n return getParentBlock(editor).filter(function (elm) {\n return isListItem(SugarElement.fromDom(elm));\n }).isSome();\n };\n\n var hasFirstChild = function (elm, name) {\n return elm.firstChild && elm.firstChild.nodeName === name;\n };\n var isFirstChild = function (elm) {\n var _a;\n return ((_a = elm.parentNode) === null || _a === void 0 ? void 0 : _a.firstChild) === elm;\n };\n var hasParent = function (elm, parentName) {\n return elm && elm.parentNode && elm.parentNode.nodeName === parentName;\n };\n var isListBlock = function (elm) {\n return elm && /^(OL|UL|LI)$/.test(elm.nodeName);\n };\n var isNestedList = function (elm) {\n return isListBlock(elm) && isListBlock(elm.parentNode);\n };\n var getContainerBlock = function (containerBlock) {\n var containerBlockParent = containerBlock.parentNode;\n if (/^(LI|DT|DD)$/.test(containerBlockParent.nodeName)) {\n return containerBlockParent;\n }\n return containerBlock;\n };\n var isFirstOrLastLi = function (containerBlock, parentBlock, first) {\n var node = containerBlock[first ? 'firstChild' : 'lastChild'];\n while (node) {\n if (isElement$5(node)) {\n break;\n }\n node = node[first ? 'nextSibling' : 'previousSibling'];\n }\n return node === parentBlock;\n };\n var insert$3 = function (editor, createNewBlock, containerBlock, parentBlock, newBlockName) {\n var dom = editor.dom;\n var rng = editor.selection.getRng();\n if (containerBlock === editor.getBody()) {\n return;\n }\n if (isNestedList(containerBlock)) {\n newBlockName = 'LI';\n }\n var newBlock = newBlockName ? createNewBlock(newBlockName) : dom.create('BR');\n if (isFirstOrLastLi(containerBlock, parentBlock, true) && isFirstOrLastLi(containerBlock, parentBlock, false)) {\n if (hasParent(containerBlock, 'LI')) {\n var 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 containerBlock.parentNode.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 var tmpRng = rng.cloneRange();\n tmpRng.setStartAfter(parentBlock);\n tmpRng.setEndAfter(containerBlock);\n var fragment = tmpRng.extractContents();\n if (newBlockName === 'LI' && hasFirstChild(fragment, 'LI')) {\n newBlock = fragment.firstChild;\n dom.insertAfter(fragment, containerBlock);\n } else {\n dom.insertAfter(fragment, containerBlock);\n dom.insertAfter(newBlock, containerBlock);\n }\n dom.remove(parentBlock);\n }\n moveToCaretPosition(editor, newBlock);\n };\n\n var trimZwsp = function (fragment) {\n each$k(descendants$1(SugarElement.fromDom(fragment), isText$8), function (text) {\n var rawNode = text.dom;\n rawNode.nodeValue = trim$2(rawNode.nodeValue);\n });\n };\n var isEmptyAnchor = function (dom, elm) {\n return elm && elm.nodeName === 'A' && dom.isEmpty(elm);\n };\n var isTableCell = function (node) {\n return node && /^(TD|TH|CAPTION)$/.test(node.nodeName);\n };\n var emptyBlock = function (elm) {\n elm.innerHTML = '
    ';\n };\n var containerAndSiblingName = function (container, nodeName) {\n return container.nodeName === nodeName || container.previousSibling && container.previousSibling.nodeName === nodeName;\n };\n var canSplitBlock = function (dom, node) {\n return node && dom.isBlock(node) && !/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName) && !/^(fixed|absolute)/i.test(node.style.position) && dom.getContentEditable(node) !== 'true';\n };\n var trimInlineElementsOnLeftSideOfBlock = function (dom, nonEmptyElementsMap, block) {\n var node = block;\n var firstChilds = [];\n var i;\n if (!node) {\n return;\n }\n while (node = node.firstChild) {\n if (dom.isBlock(node)) {\n return;\n }\n if (isElement$5(node) && !nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\n firstChilds.push(node);\n }\n }\n i = firstChilds.length;\n while (i--) {\n node = firstChilds[i];\n if (!node.hasChildNodes() || node.firstChild === node.lastChild && node.firstChild.nodeValue === '') {\n dom.remove(node);\n } else {\n if (isEmptyAnchor(dom, node)) {\n dom.remove(node);\n }\n }\n }\n };\n var normalizeZwspOffset = function (start, container, offset) {\n if (isText$7(container) === false) {\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 var includeZwspInRange = function (rng) {\n var 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 var trimLeadingLineBreaks = function (node) {\n do {\n if (isText$7(node)) {\n node.nodeValue = node.nodeValue.replace(/^[\\r\\n]+/, '');\n }\n node = node.firstChild;\n } while (node);\n };\n var getEditableRoot = function (dom, node) {\n var root = dom.getRoot();\n var parent, editableRoot;\n parent = node;\n while (parent !== root && dom.getContentEditable(parent) !== 'false') {\n if (dom.getContentEditable(parent) === 'true') {\n editableRoot = parent;\n }\n parent = parent.parentNode;\n }\n return parent !== root ? editableRoot : root;\n };\n var applyAttributes = function (editor, node, forcedRootBlockAttrs) {\n var dom = editor.dom;\n Optional.from(forcedRootBlockAttrs.style).map(dom.parseStyle).each(function (attrStyles) {\n var currentStyles = getAllRaw(SugarElement.fromDom(node));\n var newStyles = __assign(__assign({}, currentStyles), attrStyles);\n dom.setStyles(node, newStyles);\n });\n var attrClassesOpt = Optional.from(forcedRootBlockAttrs.class).map(function (attrClasses) {\n return attrClasses.split(/\\s+/);\n });\n var currentClassesOpt = Optional.from(node.className).map(function (currentClasses) {\n return filter$4(currentClasses.split(/\\s+/), function (clazz) {\n return clazz !== '';\n });\n });\n lift2(attrClassesOpt, currentClassesOpt, function (attrClasses, currentClasses) {\n var filteredClasses = filter$4(currentClasses, function (clazz) {\n return !contains$3(attrClasses, clazz);\n });\n var newClasses = __spreadArray(__spreadArray([], attrClasses, true), filteredClasses, true);\n dom.setAttrib(node, 'class', newClasses.join(' '));\n });\n var appliedAttrs = [\n 'style',\n 'class'\n ];\n var remainingAttrs = filter$3(forcedRootBlockAttrs, function (_, attrs) {\n return !contains$3(appliedAttrs, attrs);\n });\n dom.setAttribs(node, remainingAttrs);\n };\n var setForcedBlockAttrs = function (editor, node) {\n var forcedRootBlockName = getForcedRootBlock(editor);\n if (forcedRootBlockName && forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) {\n var forcedRootBlockAttrs = getForcedRootBlockAttrs(editor);\n applyAttributes(editor, node, forcedRootBlockAttrs);\n }\n };\n var wrapSelfAndSiblingsInDefaultBlock = function (editor, newBlockName, rng, container, offset) {\n var newBlock, parentBlock, startNode, node, next, rootBlockName;\n var blockName = newBlockName || 'P';\n var dom = editor.dom, editableRoot = getEditableRoot(dom, container);\n parentBlock = dom.getParent(container, dom.isBlock);\n if (!parentBlock || !canSplitBlock(dom, parentBlock)) {\n parentBlock = parentBlock || editableRoot;\n if (parentBlock === editor.getBody() || isTableCell(parentBlock)) {\n rootBlockName = parentBlock.nodeName.toLowerCase();\n } else {\n rootBlockName = parentBlock.parentNode.nodeName.toLowerCase();\n }\n if (!parentBlock.hasChildNodes()) {\n newBlock = dom.create(blockName);\n setForcedBlockAttrs(editor, newBlock);\n parentBlock.appendChild(newBlock);\n rng.setStart(newBlock, 0);\n rng.setEnd(newBlock, 0);\n return newBlock;\n }\n node = container;\n while (node.parentNode !== parentBlock) {\n node = node.parentNode;\n }\n while (node && !dom.isBlock(node)) {\n startNode = node;\n node = node.previousSibling;\n }\n if (startNode && editor.schema.isValidChild(rootBlockName, blockName.toLowerCase())) {\n newBlock = dom.create(blockName);\n setForcedBlockAttrs(editor, newBlock);\n startNode.parentNode.insertBefore(newBlock, startNode);\n node = startNode;\n while (node && !dom.isBlock(node)) {\n 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 var addBrToBlockIfNeeded = function (dom, block) {\n block.normalize();\n var lastChild = block.lastChild;\n if (!lastChild || /^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true))) {\n dom.add(block, 'br');\n }\n };\n var insert$2 = function (editor, evt) {\n var tmpRng, container, offset, parentBlock;\n var newBlock, fragment, containerBlock, parentBlockName, newBlockName, isAfterLastNodeInContainer;\n var dom = editor.dom;\n var schema = editor.schema, nonEmptyElementsMap = schema.getNonEmptyElements();\n var rng = editor.selection.getRng();\n var createNewBlock = function (name) {\n var node = container, block, clonedNode, caretNode;\n var textInlineElements = schema.getTextInlineElements();\n if (name || parentBlockName === 'TABLE' || parentBlockName === 'HR') {\n block = dom.create(name || newBlockName);\n } else {\n block = parentBlock.cloneNode(false);\n }\n caretNode = block;\n if (shouldKeepStyles(editor) === false) {\n dom.setAttrib(block, 'style', null);\n dom.setAttrib(block, 'class', null);\n } else {\n do {\n if (textInlineElements[node.nodeName]) {\n if (isCaretNode(node) || isBookmarkNode$1(node)) {\n continue;\n }\n 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 var isCaretAtStartOrEndOfBlock = function (start) {\n var node, name;\n var normalizedOffset = normalizeZwspOffset(start, container, offset);\n if (isText$7(container) && (start ? normalizedOffset > 0 : normalizedOffset < container.nodeValue.length)) {\n return false;\n }\n if (container.parentNode === parentBlock && isAfterLastNodeInContainer && !start) {\n return true;\n }\n if (start && isElement$5(container) && container === parentBlock.firstChild) {\n return true;\n }\n if (containerAndSiblingName(container, 'TABLE') || containerAndSiblingName(container, 'HR')) {\n return isAfterLastNodeInContainer && !start || !isAfterLastNodeInContainer && start;\n }\n var walker = new DomTreeWalker(container, parentBlock);\n if (isText$7(container)) {\n if (start && normalizedOffset === 0) {\n walker.prev();\n } else if (!start && normalizedOffset === container.nodeValue.length) {\n walker.next();\n }\n }\n while (node = walker.current()) {\n if (isElement$5(node)) {\n if (!node.getAttribute('data-mce-bogus')) {\n name = node.nodeName.toLowerCase();\n if (nonEmptyElementsMap[name] && name !== 'br') {\n return false;\n }\n }\n } else if (isText$7(node) && !isWhitespaceText(node.nodeValue)) {\n return false;\n }\n if (start) {\n walker.prev();\n } else {\n walker.next();\n }\n }\n return true;\n };\n var insertNewBlockAfter = function () {\n if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName !== 'HGROUP') {\n newBlock = createNewBlock(newBlockName);\n } else {\n newBlock = createNewBlock();\n }\n if (shouldEndContainerOnEmptyBlock(editor) && canSplitBlock(dom, containerBlock) && dom.isEmpty(parentBlock)) {\n newBlock = dom.split(containerBlock, parentBlock);\n } else {\n dom.insertAfter(newBlock, parentBlock);\n }\n moveToCaretPosition(editor, newBlock);\n };\n normalize$2(dom, rng).each(function (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 newBlockName = getForcedRootBlock(editor);\n var shiftKey = !!(evt && evt.shiftKey);\n var ctrlKey = !!(evt && evt.ctrlKey);\n if (isElement$5(container) && container.hasChildNodes()) {\n isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n if (isAfterLastNodeInContainer && isText$7(container)) {\n offset = container.nodeValue.length;\n } else {\n offset = 0;\n }\n }\n var editableRoot = getEditableRoot(dom, container);\n if (!editableRoot) {\n return;\n }\n if (newBlockName && !shiftKey || !newBlockName && shiftKey) {\n container = wrapSelfAndSiblingsInDefaultBlock(editor, newBlockName, rng, container, offset);\n }\n parentBlock = dom.getParent(container, dom.isBlock);\n containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : '';\n var containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n if (containerBlockName === 'LI' && !ctrlKey) {\n parentBlock = containerBlock;\n containerBlock = containerBlock.parentNode;\n parentBlockName = containerBlockName;\n }\n if (/^(LI|DT|DD)$/.test(parentBlockName)) {\n if (dom.isEmpty(parentBlock)) {\n insert$3(editor, createNewBlock, containerBlock, parentBlock, newBlockName);\n return;\n }\n }\n if (newBlockName && parentBlock === editor.getBody()) {\n return;\n }\n newBlockName = newBlockName || 'P';\n if (isCaretContainerBlock$1(parentBlock)) {\n newBlock = showCaretContainerBlock(parentBlock);\n if (dom.isEmpty(parentBlock)) {\n emptyBlock(parentBlock);\n }\n setForcedBlockAttrs(editor, newBlock);\n moveToCaretPosition(editor, newBlock);\n } else if (isCaretAtStartOrEndOfBlock()) {\n insertNewBlockAfter();\n } else if (isCaretAtStartOrEndOfBlock(true)) {\n newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock);\n moveToCaretPosition(editor, containerAndSiblingName(parentBlock, 'HR') ? newBlock : parentBlock);\n } else {\n tmpRng = includeZwspInRange(rng).cloneRange();\n tmpRng.setEndAfter(parentBlock);\n 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.fire('NewBlock', { newBlock: newBlock });\n };\n\n var hasRightSideContent = function (schema, container, parentBlock) {\n var walker = new DomTreeWalker(container, parentBlock);\n var node;\n var nonEmptyElementsMap = schema.getNonEmptyElements();\n while (node = walker.next()) {\n if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || node.length > 0) {\n return true;\n }\n }\n };\n var moveSelectionToBr = function (editor, brElm, extraBr) {\n var 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 var insertBrAtCaret = function (editor, evt) {\n var selection = editor.selection;\n var dom = editor.dom;\n var rng = selection.getRng();\n var brElm;\n var extraBr;\n normalize$2(dom, rng).each(function (normRng) {\n rng.setStart(normRng.startContainer, normRng.startOffset);\n rng.setEnd(normRng.endContainer, normRng.endOffset);\n });\n var offset = rng.startOffset;\n var container = rng.startContainer;\n if (container.nodeType === 1 && container.hasChildNodes()) {\n var isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n if (isAfterLastNodeInContainer && container.nodeType === 3) {\n offset = container.nodeValue.length;\n } else {\n offset = 0;\n }\n }\n var parentBlock = dom.getParent(container, dom.isBlock);\n var containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n var containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n var isControlKey = !!(evt && evt.ctrlKey);\n if (containerBlockName === 'LI' && !isControlKey) {\n parentBlock = containerBlock;\n }\n if (container && container.nodeType === 3 && offset >= container.nodeValue.length) {\n if (!hasRightSideContent(editor.schema, container, parentBlock)) {\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 var insertBrBefore = function (editor, inline) {\n var br = SugarElement.fromTag('br');\n before$4(SugarElement.fromDom(inline), br);\n editor.undoManager.add();\n };\n var insertBrAfter = function (editor, inline) {\n if (!hasBrAfter(editor.getBody(), inline)) {\n after$3(SugarElement.fromDom(inline), SugarElement.fromTag('br'));\n }\n var br = SugarElement.fromTag('br');\n after$3(SugarElement.fromDom(inline), br);\n moveSelectionToBr(editor, br.dom, false);\n editor.undoManager.add();\n };\n var isBeforeBr = function (pos) {\n return isBr$5(pos.getNode());\n };\n var hasBrAfter = function (rootNode, startNode) {\n if (isBeforeBr(CaretPosition.after(startNode))) {\n return true;\n } else {\n return nextPosition(rootNode, CaretPosition.after(startNode)).map(function (pos) {\n return isBr$5(pos.getNode());\n }).getOr(false);\n }\n };\n var isAnchorLink = function (elm) {\n return elm && elm.nodeName === 'A' && 'href' in elm;\n };\n var isInsideAnchor = function (location) {\n return location.fold(never, isAnchorLink, isAnchorLink, never);\n };\n var readInlineAnchorLocation = function (editor) {\n var isInlineTarget$1 = curry(isInlineTarget, editor);\n var position = CaretPosition.fromRangeStart(editor.selection.getRng());\n return readLocation(isInlineTarget$1, editor.getBody(), position).filter(isInsideAnchor);\n };\n var insertBrOutsideAnchor = function (editor, location) {\n location.fold(noop, curry(insertBrBefore, editor), curry(insertBrAfter, editor), noop);\n };\n var insert$1 = function (editor, evt) {\n var anchorLocation = readInlineAnchorLocation(editor);\n if (anchorLocation.isSome()) {\n anchorLocation.each(curry(insertBrOutsideAnchor, editor));\n } else {\n insertBrAtCaret(editor, evt);\n }\n };\n\n var matchesSelector = function (editor, selector) {\n return getParentBlock(editor).filter(function (parentBlock) {\n return selector.length > 0 && is$2(SugarElement.fromDom(parentBlock), selector);\n }).isSome();\n };\n var shouldInsertBr = function (editor) {\n return matchesSelector(editor, getBrNewLineSelector(editor));\n };\n var shouldBlockNewLine$1 = function (editor) {\n return matchesSelector(editor, getNoNewLineSelector(editor));\n };\n\n var newLineAction = Adt.generate([\n { br: [] },\n { block: [] },\n { none: [] }\n ]);\n var shouldBlockNewLine = function (editor, _shiftKey) {\n return shouldBlockNewLine$1(editor);\n };\n var isBrMode = function (requiredState) {\n return function (editor, _shiftKey) {\n var brMode = getForcedRootBlock(editor) === '';\n return brMode === requiredState;\n };\n };\n var inListBlock = function (requiredState) {\n return function (editor, _shiftKey) {\n return isListItemParentBlock(editor) === requiredState;\n };\n };\n var inBlock = function (blockName, requiredState) {\n return function (editor, _shiftKey) {\n var state = getParentBlockName(editor) === blockName.toUpperCase();\n return state === requiredState;\n };\n };\n var inPreBlock = function (requiredState) {\n return inBlock('pre', requiredState);\n };\n var inSummaryBlock = function () {\n return inBlock('summary', true);\n };\n var shouldPutBrInPre = function (requiredState) {\n return function (editor, _shiftKey) {\n return shouldPutBrInPre$1(editor) === requiredState;\n };\n };\n var inBrContext = function (editor, _shiftKey) {\n return shouldInsertBr(editor);\n };\n var hasShiftKey = function (_editor, shiftKey) {\n return shiftKey;\n };\n var canInsertIntoEditableRoot = function (editor) {\n var forcedRootBlock = getForcedRootBlock(editor);\n var rootEditable = getEditableRoot$1(editor.dom, editor.selection.getStart());\n return rootEditable && editor.schema.isValidChild(rootEditable.nodeName, forcedRootBlock ? forcedRootBlock : 'P');\n };\n var match = function (predicates, action) {\n return function (editor, shiftKey) {\n var isMatch = foldl(predicates, function (res, p) {\n return res && p(editor, shiftKey);\n }, true);\n return isMatch ? Optional.some(action) : Optional.none();\n };\n };\n var getAction = function (editor, evt) {\n return evaluateUntil([\n match([shouldBlockNewLine], 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([\n isBrMode(true),\n hasShiftKey,\n canInsertIntoEditableRoot\n ], newLineAction.block()),\n match([isBrMode(true)], newLineAction.br()),\n match([inBrContext], newLineAction.br()),\n match([\n isBrMode(false),\n hasShiftKey\n ], newLineAction.br()),\n match([canInsertIntoEditableRoot], newLineAction.block())\n ], [\n editor,\n !!(evt && evt.shiftKey)\n ]).getOr(newLineAction.none());\n };\n\n var insert = function (editor, evt) {\n getAction(editor, evt).fold(function () {\n insert$1(editor, evt);\n }, function () {\n insert$2(editor, evt);\n }, noop);\n };\n\n var handleEnterKeyEvent = function (editor, event) {\n if (event.isDefaultPrevented()) {\n return;\n }\n event.preventDefault();\n endTypingLevelIgnoreLocks(editor.undoManager);\n editor.undoManager.transact(function () {\n if (editor.selection.isCollapsed() === false) {\n editor.execCommand('Delete');\n }\n insert(editor, event);\n });\n };\n var setup$9 = function (editor) {\n editor.on('keydown', function (event) {\n if (event.keyCode === VK.ENTER) {\n handleEnterKeyEvent(editor, event);\n }\n });\n };\n\n var executeKeydownOverride$1 = function (editor, caret, evt) {\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 {\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(function (_) {\n evt.preventDefault();\n });\n };\n var setup$8 = function (editor, caret) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride$1(editor, caret, evt);\n }\n });\n };\n\n var browser = detect().browser;\n var setupIeInput = function (editor) {\n var keypressThrotter = first(function () {\n if (!editor.composing) {\n normalizeNbspsInEditor(editor);\n }\n }, 0);\n if (browser.isIE()) {\n editor.on('keypress', function (_e) {\n keypressThrotter.throttle();\n });\n editor.on('remove', function (_e) {\n keypressThrotter.cancel();\n });\n }\n };\n var setup$7 = function (editor) {\n setupIeInput(editor);\n editor.on('input', function (e) {\n if (e.isComposing === false) {\n normalizeNbspsInEditor(editor);\n }\n });\n };\n\n var platform = detect();\n var executeKeyupAction = function (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 var stopImmediatePropagation = function (e) {\n return e.stopImmediatePropagation();\n };\n var isPageUpDown = function (evt) {\n return evt.keyCode === VK.PAGE_UP || evt.keyCode === VK.PAGE_DOWN;\n };\n var setNodeChangeBlocker = function (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 var setup$6 = function (editor, caret) {\n if (platform.os.isOSX()) {\n return;\n }\n var blocked = Cell(false);\n editor.on('keydown', function (evt) {\n if (isPageUpDown(evt)) {\n setNodeChangeBlocker(blocked, editor, true);\n }\n });\n editor.on('keyup', function (evt) {\n if (evt.isDefaultPrevented() === false) {\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 var insertTextAtPosition = function (text, pos) {\n var container = pos.container();\n var offset = pos.offset();\n if (isText$7(container)) {\n container.insertData(offset, text);\n return Optional.some(CaretPosition(container, offset + text.length));\n } else {\n return getElementFromPosition(pos).map(function (elm) {\n var textNode = SugarElement.fromText(text);\n if (pos.isAtEnd()) {\n after$3(elm, textNode);\n } else {\n before$4(elm, textNode);\n }\n return CaretPosition(textNode.dom, text.length);\n });\n }\n };\n var insertNbspAtPosition = curry(insertTextAtPosition, nbsp);\n var insertSpaceAtPosition = curry(insertTextAtPosition, ' ');\n\n var locationToCaretPosition = function (root) {\n return function (location) {\n return location.fold(function (element) {\n return prevPosition(root.dom, CaretPosition.before(element));\n }, function (element) {\n return firstPositionIn(element);\n }, function (element) {\n return lastPositionIn(element);\n }, function (element) {\n return nextPosition(root.dom, CaretPosition.after(element));\n });\n };\n };\n var insertInlineBoundarySpaceOrNbsp = function (root, pos) {\n return function (checkPos) {\n return needsToHaveNbsp(root, checkPos) ? insertNbspAtPosition(pos) : insertSpaceAtPosition(pos);\n };\n };\n var setSelection = function (editor) {\n return function (pos) {\n editor.selection.setRng(pos.toRange());\n editor.nodeChanged();\n return true;\n };\n };\n var insertSpaceOrNbspAtSelection = function (editor) {\n var pos = CaretPosition.fromRangeStart(editor.selection.getRng());\n var root = SugarElement.fromDom(editor.getBody());\n if (editor.selection.isCollapsed()) {\n var isInlineTarget$1 = curry(isInlineTarget, editor);\n var caretPosition = CaretPosition.fromRangeStart(editor.selection.getRng());\n return readLocation(isInlineTarget$1, editor.getBody(), caretPosition).bind(locationToCaretPosition(root)).bind(insertInlineBoundarySpaceOrNbsp(root, pos)).exists(setSelection(editor));\n } else {\n return false;\n }\n };\n\n var executeKeydownOverride = function (editor, evt) {\n execute([{\n keyCode: VK.SPACEBAR,\n action: action(insertSpaceOrNbspAtSelection, editor)\n }], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var setup$5 = function (editor) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride(editor, evt);\n }\n });\n };\n\n var registerKeyboardOverrides = function (editor) {\n var caret = setupSelectedState(editor);\n setup$c(editor);\n setup$b(editor, caret);\n setup$a(editor, caret);\n setup$9(editor);\n setup$5(editor);\n setup$7(editor);\n setup$8(editor, caret);\n setup$6(editor, caret);\n return caret;\n };\n var setup$4 = function (editor) {\n if (!isRtc(editor)) {\n return registerKeyboardOverrides(editor);\n } else {\n return Cell(null);\n }\n };\n\n var NodeChange = function () {\n function NodeChange(editor) {\n this.lastPath = [];\n this.editor = editor;\n var lastRng;\n var self = this;\n if (!('onselectionchange' in editor.getDoc())) {\n editor.on('NodeChange click mouseup keyup focus', function (e) {\n var nativeRng = editor.selection.getRng();\n var 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.fire('SelectionChange');\n }\n lastRng = fakeRng;\n });\n }\n editor.on('contextmenu', function () {\n editor.fire('SelectionChange');\n });\n editor.on('SelectionChange', function () {\n var startElm = editor.selection.getStart(true);\n if (!startElm || !Env.range && editor.selection.isCollapsed()) {\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', function (e) {\n if (!e.isDefaultPrevented() && hasAnyRanges(editor)) {\n if (editor.selection.getNode().nodeName === 'IMG') {\n Delay.setEditorTimeout(editor, function () {\n editor.nodeChanged();\n });\n } else {\n editor.nodeChanged();\n }\n }\n });\n }\n NodeChange.prototype.nodeChanged = function (args) {\n var selection = this.editor.selection;\n var node, parents, root;\n if (this.editor.initialized && selection && !shouldDisableNodeChange(this.editor) && !this.editor.mode.isReadOnly()) {\n root = this.editor.getBody();\n node = selection.getStart(true) || root;\n if (node.ownerDocument !== this.editor.getDoc() || !this.editor.dom.isChildOf(node, root)) {\n node = root;\n }\n parents = [];\n this.editor.dom.getParent(node, function (node) {\n if (node === root) {\n return true;\n }\n parents.push(node);\n });\n args = args || {};\n args.element = node;\n args.parents = parents;\n this.editor.fire('NodeChange', args);\n }\n };\n NodeChange.prototype.isSameElementPath = function (startElm) {\n var i;\n var currentPath = this.editor.$(startElm).parentsUntil(this.editor.getBody()).add(startElm);\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 return NodeChange;\n }();\n\n var preventSummaryToggle = function (editor) {\n editor.on('click', function (e) {\n if (editor.dom.getParent(e.target, 'details')) {\n e.preventDefault();\n }\n });\n };\n var filterDetails = function (editor) {\n editor.parser.addNodeFilter('details', function (elms) {\n each$k(elms, function (details) {\n details.attr('data-mce-open', details.attr('open'));\n details.attr('open', 'open');\n });\n });\n editor.serializer.addNodeFilter('details', function (elms) {\n each$k(elms, function (details) {\n var open = details.attr('data-mce-open');\n details.attr('open', isString$1(open) ? open : null);\n details.attr('data-mce-open', null);\n });\n });\n };\n var setup$3 = function (editor) {\n preventSummaryToggle(editor);\n filterDetails(editor);\n };\n\n var isTextBlockNode = function (node) {\n return isElement$5(node) && isTextBlock$2(SugarElement.fromDom(node));\n };\n var normalizeSelection = function (editor) {\n var rng = editor.selection.getRng();\n var startPos = CaretPosition.fromRangeStart(rng);\n var endPos = CaretPosition.fromRangeEnd(rng);\n if (CaretPosition.isElementPosition(startPos)) {\n var container = startPos.container();\n if (isTextBlockNode(container)) {\n firstPositionIn(container).each(function (pos) {\n return rng.setStart(pos.container(), pos.offset());\n });\n }\n }\n if (CaretPosition.isElementPosition(endPos)) {\n var container = startPos.container();\n if (isTextBlockNode(container)) {\n lastPositionIn(container).each(function (pos) {\n return rng.setEnd(pos.container(), pos.offset());\n });\n }\n }\n editor.selection.setRng(normalize(rng));\n };\n var setup$2 = function (editor) {\n editor.on('click', function (e) {\n if (e.detail >= 3) {\n normalizeSelection(editor);\n }\n });\n };\n\n var getAbsolutePosition = function (elm) {\n var clientRect = elm.getBoundingClientRect();\n var doc = elm.ownerDocument;\n var docElem = doc.documentElement;\n var win = doc.defaultView;\n return {\n top: clientRect.top + win.pageYOffset - docElem.clientTop,\n left: clientRect.left + win.pageXOffset - docElem.clientLeft\n };\n };\n var getBodyPosition = function (editor) {\n return editor.inline ? getAbsolutePosition(editor.getBody()) : {\n left: 0,\n top: 0\n };\n };\n var getScrollPosition = function (editor) {\n var 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 var getBodyScroll = function (editor) {\n var body = editor.getBody(), docElm = editor.getDoc().documentElement;\n var inlineScroll = {\n left: body.scrollLeft,\n top: body.scrollTop\n };\n var iframeScroll = {\n left: body.scrollLeft || docElm.scrollLeft,\n top: body.scrollTop || docElm.scrollTop\n };\n return editor.inline ? inlineScroll : iframeScroll;\n };\n var getMousePosition = function (editor, event) {\n if (event.target.ownerDocument !== editor.getDoc()) {\n var iframePosition = getAbsolutePosition(editor.getContentAreaContainer());\n var 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 var calculatePosition = function (bodyPosition, scrollPosition, mousePosition) {\n return {\n pageX: mousePosition.left - bodyPosition.left + scrollPosition.left,\n pageY: mousePosition.top - bodyPosition.top + scrollPosition.top\n };\n };\n var calc = function (editor, event) {\n return calculatePosition(getBodyPosition(editor), getScrollPosition(editor), getMousePosition(editor, event));\n };\n\n var isContentEditableFalse$1 = isContentEditableFalse$b, isContentEditableTrue$1 = isContentEditableTrue$4;\n var isDraggable = function (rootElm, elm) {\n return isContentEditableFalse$1(elm) && elm !== rootElm;\n };\n var isValidDropTarget = function (editor, targetElement, dragElement) {\n if (targetElement === dragElement || editor.dom.isChildOf(targetElement, dragElement)) {\n return false;\n }\n return !isContentEditableFalse$1(targetElement);\n };\n var cloneElement = function (elm) {\n var cloneElm = elm.cloneNode(true);\n cloneElm.removeAttribute('data-mce-selected');\n return cloneElm;\n };\n var createGhost = function (editor, elm, width, height) {\n var dom = editor.dom;\n var clonedElm = elm.cloneNode(true);\n dom.setStyles(clonedElm, {\n width: width,\n height: height\n });\n dom.setAttrib(clonedElm, 'data-mce-selected', null);\n var 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: width,\n height: height\n });\n dom.setStyles(clonedElm, {\n margin: 0,\n boxSizing: 'border-box'\n });\n ghostElm.appendChild(clonedElm);\n return ghostElm;\n };\n var appendGhostToBody = function (ghostElm, bodyElm) {\n if (ghostElm.parentNode !== bodyElm) {\n bodyElm.appendChild(ghostElm);\n }\n };\n var moveGhost = function (ghostElm, position, width, height, maxX, maxY) {\n var 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 };\n var removeElement = function (elm) {\n if (elm && elm.parentNode) {\n elm.parentNode.removeChild(elm);\n }\n };\n var isLeftMouseButtonPressed = function (e) {\n return e.button === 0;\n };\n var applyRelPos = function (state, position) {\n return {\n pageX: position.pageX - state.relX,\n pageY: position.pageY + 5\n };\n };\n var start = function (state, editor) {\n return function (e) {\n if (isLeftMouseButtonPressed(e)) {\n var ceElm = find$3(editor.dom.getParents(e.target), or(isContentEditableFalse$1, isContentEditableTrue$1)).getOr(null);\n if (isDraggable(editor.getBody(), ceElm)) {\n var elmPos = editor.dom.getPos(ceElm);\n var bodyElm = editor.getBody();\n var docElm = editor.getDoc().documentElement;\n state.set({\n element: ceElm,\n dragging: false,\n screenX: e.screenX,\n screenY: e.screenY,\n maxX: (editor.inline ? bodyElm.scrollWidth : docElm.offsetWidth) - 2,\n maxY: (editor.inline ? bodyElm.scrollHeight : docElm.offsetHeight) - 2,\n relX: e.pageX - elmPos.x,\n relY: e.pageY - elmPos.y,\n width: ceElm.offsetWidth,\n height: ceElm.offsetHeight,\n ghost: createGhost(editor, ceElm, ceElm.offsetWidth, ceElm.offsetHeight)\n });\n }\n }\n };\n };\n var move = function (state, editor) {\n var throttledPlaceCaretAt = Delay.throttle(function (clientX, clientY) {\n editor._selectionOverrides.hideFakeCaret();\n editor.selection.placeCaretAt(clientX, clientY);\n }, 0);\n editor.on('remove', throttledPlaceCaretAt.stop);\n return function (e) {\n return state.on(function (state) {\n var movement = Math.max(Math.abs(e.screenX - state.screenX), Math.abs(e.screenY - state.screenY));\n if (!state.dragging && movement > 10) {\n var args = editor.fire('dragstart', { target: state.element });\n if (args.isDefaultPrevented()) {\n return;\n }\n state.dragging = true;\n editor.focus();\n }\n if (state.dragging) {\n var 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);\n throttledPlaceCaretAt(e.clientX, e.clientY);\n }\n });\n };\n };\n var getRawTarget = function (selection) {\n var rng = selection.getSel().getRangeAt(0);\n var startContainer = rng.startContainer;\n return startContainer.nodeType === 3 ? startContainer.parentNode : startContainer;\n };\n var drop = function (state, editor) {\n return function (e) {\n state.on(function (state) {\n if (state.dragging) {\n if (isValidDropTarget(editor, getRawTarget(editor.selection), state.element)) {\n var targetClone_1 = cloneElement(state.element);\n var args = editor.fire('drop', {\n clientX: e.clientX,\n clientY: e.clientY\n });\n if (!args.isDefaultPrevented()) {\n editor.undoManager.transact(function () {\n removeElement(state.element);\n editor.insertContent(editor.dom.getOuterHTML(targetClone_1));\n editor._selectionOverrides.hideFakeCaret();\n });\n }\n }\n editor.fire('dragend');\n }\n });\n removeDragState(state);\n };\n };\n var stop = function (state, editor) {\n return function () {\n state.on(function (state) {\n if (state.dragging) {\n editor.fire('dragend');\n }\n });\n removeDragState(state);\n };\n };\n var removeDragState = function (state) {\n state.on(function (state) {\n removeElement(state.ghost);\n });\n state.clear();\n };\n var bindFakeDragEvents = function (editor) {\n var state = value();\n var pageDom = DOMUtils.DOM;\n var rootDocument = document;\n var dragStartHandler = start(state, editor);\n var dragHandler = move(state, editor);\n var dropHandler = drop(state, editor);\n var 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', function () {\n pageDom.unbind(rootDocument, 'mousemove', dragHandler);\n pageDom.unbind(rootDocument, 'mouseup', dragEndHandler);\n });\n editor.on('keydown', function (e) {\n if (e.keyCode === VK.ESC) {\n dragEndHandler();\n }\n });\n };\n var blockIeDrop = function (editor) {\n editor.on('drop', function (e) {\n var realTarget = typeof e.clientX !== 'undefined' ? editor.getDoc().elementFromPoint(e.clientX, e.clientY) : null;\n if (isContentEditableFalse$1(realTarget) || editor.dom.getContentEditableParent(realTarget) === 'false') {\n e.preventDefault();\n }\n });\n };\n var blockUnsupportedFileDrop = function (editor) {\n var preventFileDrop = function (e) {\n if (!e.isDefaultPrevented()) {\n var dataTransfer = e.dataTransfer;\n if (dataTransfer && (contains$3(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 var preventFileDropIfUIElement = function (e) {\n if (isUIElement(editor, e.target)) {\n preventFileDrop(e);\n }\n };\n var setup = function () {\n var pageDom = DOMUtils.DOM;\n var dom = editor.dom;\n var doc = document;\n var editorRoot = editor.inline ? editor.getBody() : editor.getDoc();\n var eventNames = [\n 'drop',\n 'dragover'\n ];\n each$k(eventNames, function (name) {\n pageDom.bind(doc, name, preventFileDropIfUIElement);\n dom.bind(editorRoot, name, preventFileDrop);\n });\n editor.on('remove', function () {\n each$k(eventNames, function (name) {\n pageDom.unbind(doc, name, preventFileDropIfUIElement);\n dom.unbind(editorRoot, name, preventFileDrop);\n });\n });\n };\n editor.on('init', function () {\n Delay.setEditorTimeout(editor, setup, 0);\n });\n };\n var init$2 = function (editor) {\n bindFakeDragEvents(editor);\n blockIeDrop(editor);\n if (shouldBlockUnsupportedDrop(editor)) {\n blockUnsupportedFileDrop(editor);\n }\n };\n\n var setup$1 = function (editor) {\n var renderFocusCaret = first(function () {\n if (!editor.removed && editor.getBody().contains(document.activeElement)) {\n var rng = editor.selection.getRng();\n if (rng.collapsed) {\n var caretRange = renderRangeCaret(editor, rng, false);\n editor.selection.setRng(caretRange);\n }\n }\n }, 0);\n editor.on('focus', function () {\n renderFocusCaret.throttle();\n });\n editor.on('blur', function () {\n renderFocusCaret.cancel();\n });\n };\n\n var setup = function (editor) {\n editor.on('init', function () {\n editor.on('focusin', function (e) {\n var target = e.target;\n if (isMedia$2(target)) {\n var ceRoot = getContentEditableRoot$1(editor.getBody(), target);\n var node = isContentEditableFalse$b(ceRoot) ? ceRoot : target;\n if (editor.selection.getNode() !== node) {\n selectNode(editor, node).each(function (rng) {\n return editor.selection.setRng(rng);\n });\n }\n }\n });\n });\n };\n\n var isContentEditableTrue = isContentEditableTrue$4;\n var isContentEditableFalse = isContentEditableFalse$b;\n var getContentEditableRoot = function (editor, node) {\n return getContentEditableRoot$1(editor.getBody(), node);\n };\n var SelectionOverrides = function (editor) {\n var selection = editor.selection, dom = editor.dom;\n var isBlock = dom.isBlock;\n var rootNode = editor.getBody();\n var fakeCaret = FakeCaret(editor, rootNode, isBlock, function () {\n return hasFocus(editor);\n });\n var realSelectionId = 'sel-' + dom.uniqueId();\n var elementSelectionAttr = 'data-mce-selected';\n var selectedElement;\n var isFakeSelectionElement = function (node) {\n return dom.hasClass(node, 'mce-offscreen-selection');\n };\n var isFakeSelectionTargetElement = function (node) {\n return node !== rootNode && (isContentEditableFalse(node) || isMedia$2(node)) && dom.isChildOf(node, rootNode);\n };\n var isNearFakeSelectionElement = function (pos) {\n return isBeforeContentEditableFalse(pos) || isAfterContentEditableFalse(pos) || isBeforeMedia(pos) || isAfterMedia(pos);\n };\n var getRealSelectionElement = function () {\n var container = dom.get(realSelectionId);\n return container ? container.getElementsByTagName('*')[0] : container;\n };\n var setRange = function (range) {\n if (range) {\n selection.setRng(range);\n }\n };\n var getRange = selection.getRng;\n var showCaret = function (direction, node, before, scrollIntoView) {\n if (scrollIntoView === void 0) {\n scrollIntoView = true;\n }\n var e = editor.fire('ShowCaret', {\n target: node,\n direction: direction,\n before: 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 var showBlockCaretContainer = function (blockCaretContainer) {\n if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n showCaretContainerBlock(blockCaretContainer);\n setRange(getRange());\n selection.scrollIntoView(blockCaretContainer);\n }\n };\n var registerEvents = function () {\n editor.on('mouseup', function (e) {\n var range = getRange();\n if (range.collapsed && isXYInContentArea(editor, e.clientX, e.clientY)) {\n renderCaretAtRange(editor, range, false).each(setRange);\n }\n });\n editor.on('click', function (e) {\n var contentEditableRoot = getContentEditableRoot(editor, e.target);\n if (contentEditableRoot) {\n if (isContentEditableFalse(contentEditableRoot)) {\n e.preventDefault();\n editor.focus();\n }\n if (isContentEditableTrue(contentEditableRoot)) {\n if (dom.isChildOf(contentEditableRoot, selection.getNode())) {\n removeElementSelection();\n }\n }\n }\n });\n editor.on('blur NewBlock', removeElementSelection);\n editor.on('ResizeWindow FullscreenStateChanged', fakeCaret.reposition);\n var hasNormalCaretPosition = function (elm) {\n var start = elm.firstChild;\n if (isNullable(start)) {\n return false;\n }\n var startPos = CaretPosition.before(start);\n if (isBr$5(startPos.getNode()) && elm.childNodes.length === 1) {\n return !isNearFakeSelectionElement(startPos);\n } else {\n var caretWalker = CaretWalker(elm);\n var newPos = caretWalker.next(startPos);\n return newPos && !isNearFakeSelectionElement(newPos);\n }\n };\n var isInSameBlock = function (node1, node2) {\n var block1 = dom.getParent(node1, isBlock);\n var block2 = dom.getParent(node2, isBlock);\n return block1 === block2;\n };\n var hasBetterMouseTarget = function (targetNode, caretNode) {\n var targetBlock = dom.getParent(targetNode, isBlock);\n var caretBlock = dom.getParent(caretNode, isBlock);\n if (isNullable(targetBlock)) {\n return false;\n }\n if (targetNode !== caretBlock && dom.isChildOf(targetBlock, caretBlock) && isContentEditableFalse(getContentEditableRoot(editor, targetBlock)) === false) {\n return true;\n }\n return !dom.isChildOf(caretBlock, targetBlock) && !isInSameBlock(targetBlock, caretBlock) && hasNormalCaretPosition(targetBlock);\n };\n editor.on('tap', function (e) {\n var targetElm = e.target;\n var 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', function (e) {\n var 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) === false) {\n return;\n }\n var contentEditableRoot = getContentEditableRoot(editor, targetElm);\n if (contentEditableRoot) {\n if (isContentEditableFalse(contentEditableRoot)) {\n e.preventDefault();\n selectNode(editor, contentEditableRoot).each(setElementSelection);\n } else {\n removeElementSelection();\n if (!(isContentEditableTrue(contentEditableRoot) && e.shiftKey) && !isXYWithinRange(e.clientX, e.clientY, selection.getRng())) {\n hideFakeCaret();\n selection.placeCaretAt(e.clientX, e.clientY);\n }\n }\n } else if (isFakeSelectionTargetElement(targetElm)) {\n selectNode(editor, targetElm).each(setElementSelection);\n } else if (isFakeCaretTarget(targetElm) === false) {\n removeElementSelection();\n hideFakeCaret();\n var fakeCaretInfo = closestFakeCaret(rootNode, e.clientX, e.clientY);\n if (fakeCaretInfo) {\n if (!hasBetterMouseTarget(targetElm, fakeCaretInfo.node)) {\n e.preventDefault();\n var range = showCaret(1, fakeCaretInfo.node, fakeCaretInfo.before, false);\n setRange(range);\n editor.getBody().focus();\n }\n }\n }\n });\n editor.on('keypress', function (e) {\n if (VK.modifierPressed(e)) {\n return;\n }\n if (isContentEditableFalse(selection.getNode())) {\n e.preventDefault();\n }\n });\n editor.on('GetSelectionRange', function (e) {\n var 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', function (e) {\n e.range = normalizeShortEndedElementSelection(e.range);\n var rng = setElementSelection(e.range, e.forward);\n if (rng) {\n e.range = rng;\n }\n });\n var isPasteBin = function (node) {\n return node.id === 'mcepastebin';\n };\n editor.on('AfterSetSelectionRange', function (e) {\n var rng = e.range;\n var parentNode = rng.startContainer.parentNode;\n if (!isRangeInCaretContainer(rng) && !isPasteBin(parentNode)) {\n hideFakeCaret();\n }\n if (!isFakeSelectionElement(parentNode)) {\n removeElementSelection();\n }\n });\n editor.on('copy', function (e) {\n var clipboardData = e.clipboardData;\n if (!e.isDefaultPrevented() && e.clipboardData && !Env.ie) {\n var realSelectionElement = getRealSelectionElement();\n if (realSelectionElement) {\n e.preventDefault();\n clipboardData.clearData();\n clipboardData.setData('text/html', realSelectionElement.outerHTML);\n clipboardData.setData('text/plain', realSelectionElement.outerText || realSelectionElement.innerText);\n }\n }\n });\n init$2(editor);\n setup$1(editor);\n setup(editor);\n };\n var isWithinCaretContainer = function (node) {\n return isCaretContainer$2(node) || startsWithCaretContainer$1(node) || endsWithCaretContainer$1(node);\n };\n var isRangeInCaretContainer = function (rng) {\n return isWithinCaretContainer(rng.startContainer) || isWithinCaretContainer(rng.endContainer);\n };\n var normalizeShortEndedElementSelection = function (rng) {\n var shortEndedElements = editor.schema.getShortEndedElements();\n var newRng = dom.createRng();\n var startContainer = rng.startContainer;\n var startOffset = rng.startOffset;\n var endContainer = rng.endContainer;\n var endOffset = rng.endOffset;\n if (has$2(shortEndedElements, 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(shortEndedElements, 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 var setupOffscreenSelection = function (node, targetClone, origTargetClone) {\n var $ = editor.$;\n var $realSelectionContainer = descendant(SugarElement.fromDom(editor.getBody()), '#' + realSelectionId).fold(function () {\n return $([]);\n }, function (elm) {\n return $([elm.dom]);\n });\n if ($realSelectionContainer.length === 0) {\n $realSelectionContainer = $('
    ').attr('id', realSelectionId);\n $realSelectionContainer.appendTo(editor.getBody());\n }\n var newRange = dom.createRng();\n if (targetClone === origTargetClone && Env.ie) {\n $realSelectionContainer.empty().append('

    \\xA0

    ').append(targetClone);\n newRange.setStartAfter($realSelectionContainer[0].firstChild.firstChild);\n newRange.setEndAfter(targetClone);\n } else {\n $realSelectionContainer.empty().append(nbsp).append(targetClone).append(nbsp);\n newRange.setStart($realSelectionContainer[0].firstChild, 1);\n newRange.setEnd($realSelectionContainer[0].lastChild, 0);\n }\n $realSelectionContainer.css({ top: dom.getPos(node, editor.getBody()).y });\n $realSelectionContainer[0].focus();\n var sel = selection.getSel();\n sel.removeAllRanges();\n sel.addRange(newRange);\n return newRange;\n };\n var selectElement = function (elm) {\n var targetClone = elm.cloneNode(true);\n var e = editor.fire('ObjectSelected', {\n target: elm,\n targetClone: targetClone\n });\n if (e.isDefaultPrevented()) {\n return null;\n }\n var range = setupOffscreenSelection(elm, e.targetClone, targetClone);\n var nodeElm = SugarElement.fromDom(elm);\n each$k(descendants(SugarElement.fromDom(editor.getBody()), '*[data-mce-selected]'), function (elm) {\n if (!eq(nodeElm, elm)) {\n remove$6(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 var setElementSelection = function (range, forward) {\n if (!range) {\n return null;\n }\n if (range.collapsed) {\n if (!isRangeInCaretContainer(range)) {\n var dir = forward ? 1 : -1;\n var caretPosition = getNormalizedRangeEndPoint(dir, rootNode, range);\n var beforeNode = caretPosition.getNode(!forward);\n if (isFakeCaretTarget(beforeNode)) {\n return showCaret(dir, beforeNode, forward ? !caretPosition.isAtEnd() : false, false);\n }\n var afterNode = caretPosition.getNode(forward);\n if (isFakeCaretTarget(afterNode)) {\n return showCaret(dir, afterNode, forward ? false : !caretPosition.isAtEnd(), false);\n }\n }\n return null;\n }\n var startContainer = range.startContainer;\n var startOffset = range.startOffset;\n var endOffset = range.endOffset;\n if (startContainer.nodeType === 3 && startOffset === 0 && isContentEditableFalse(startContainer.parentNode)) {\n startContainer = startContainer.parentNode;\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (startContainer.nodeType !== 1) {\n return null;\n }\n if (endOffset === startOffset + 1 && startContainer === range.endContainer) {\n var node = startContainer.childNodes[startOffset];\n if (isFakeSelectionTargetElement(node)) {\n return selectElement(node);\n }\n }\n return null;\n };\n var removeElementSelection = function () {\n if (selectedElement) {\n selectedElement.removeAttribute(elementSelectionAttr);\n }\n descendant(SugarElement.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$7);\n selectedElement = null;\n };\n var destroy = function () {\n fakeCaret.destroy();\n selectedElement = null;\n };\n var hideFakeCaret = function () {\n fakeCaret.hide();\n };\n if (Env.ceFalse && !isRtc(editor)) {\n registerEvents();\n }\n return {\n showCaret: showCaret,\n showBlockCaretContainer: showBlockCaretContainer,\n hideFakeCaret: hideFakeCaret,\n destroy: destroy\n };\n };\n\n var Quirks = function (editor) {\n var each = Tools.each;\n var BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, parser = editor.parser;\n var isGecko = Env.gecko, isIE = Env.ie, isWebKit = Env.webkit;\n var mceInternalUrlPrefix = 'data:text/mce-internal,';\n var mceInternalDataType = isIE ? 'Text' : 'URL';\n var setEditorCommandState = function (cmd, state) {\n try {\n editor.getDoc().execCommand(cmd, false, state);\n } catch (ex) {\n }\n };\n var isDefaultPrevented = function (e) {\n return e.isDefaultPrevented();\n };\n var setMceInternalContent = function (e) {\n var selectionHtml, internalContent;\n if (e.dataTransfer) {\n if (editor.selection.isCollapsed() && e.target.tagName === 'IMG') {\n selection.select(e.target);\n }\n selectionHtml = editor.selection.getContent();\n if (selectionHtml.length > 0) {\n internalContent = mceInternalUrlPrefix + escape(editor.id) + ',' + escape(selectionHtml);\n e.dataTransfer.setData(mceInternalDataType, internalContent);\n }\n }\n };\n var getMceInternalContent = function (e) {\n var internalContent;\n if (e.dataTransfer) {\n internalContent = e.dataTransfer.getData(mceInternalDataType);\n if (internalContent && internalContent.indexOf(mceInternalUrlPrefix) >= 0) {\n internalContent = internalContent.substr(mceInternalUrlPrefix.length).split(',');\n return {\n id: unescape(internalContent[0]),\n html: unescape(internalContent[1])\n };\n }\n }\n return null;\n };\n var insertClipboardContents = function (content, internal) {\n if (editor.queryCommandSupported('mceInsertClipboardContent')) {\n editor.execCommand('mceInsertClipboardContent', false, {\n content: content,\n internal: internal\n });\n } else {\n editor.execCommand('mceInsertContent', false, content);\n }\n };\n var emptyEditorWhenDeleting = function () {\n var serializeRng = function (rng) {\n var body = dom.create('body');\n var contents = rng.cloneContents();\n body.appendChild(contents);\n return selection.serializer.serialize(body, { format: 'html' });\n };\n var allContentsSelected = function (rng) {\n var selection = serializeRng(rng);\n var allRng = dom.createRng();\n allRng.selectNode(editor.getBody());\n var allSelection = serializeRng(allRng);\n return selection === allSelection;\n };\n editor.on('keydown', function (e) {\n var keyCode = e.keyCode;\n var isCollapsed, body;\n if (!isDefaultPrevented(e) && (keyCode === DELETE || keyCode === BACKSPACE)) {\n isCollapsed = editor.selection.isCollapsed();\n body = editor.getBody();\n if (isCollapsed && !dom.isEmpty(body)) {\n return;\n }\n if (!isCollapsed && !allContentsSelected(editor.selection.getRng())) {\n return;\n }\n e.preventDefault();\n editor.setContent('');\n if (body.firstChild && dom.isBlock(body.firstChild)) {\n editor.selection.setCursorLocation(body.firstChild, 0);\n } else {\n editor.selection.setCursorLocation(body, 0);\n }\n editor.nodeChanged();\n }\n });\n };\n var selectAll = function () {\n editor.shortcuts.add('meta+a', null, 'SelectAll');\n };\n var documentElementEditingFocus = function () {\n if (!editor.inline) {\n dom.bind(editor.getDoc(), 'mousedown mouseup', function (e) {\n var 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 var removeHrOnBackspace = function () {\n editor.on('keydown', function (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 var node = selection.getNode();\n var 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 var focusBody = function () {\n if (!Range.prototype.getClientRects) {\n editor.on('mousedown', function (e) {\n if (!isDefaultPrevented(e) && e.target.nodeName === 'HTML') {\n var body_1 = editor.getBody();\n body_1.blur();\n Delay.setEditorTimeout(editor, function () {\n body_1.focus();\n });\n }\n });\n }\n };\n var selectControlElements = function () {\n editor.on('click', function (e) {\n var target = e.target;\n if (/^(IMG|HR)$/.test(target.nodeName) && dom.getContentEditableParent(target) !== 'false') {\n e.preventDefault();\n editor.selection.select(target);\n editor.nodeChanged();\n }\n if (target.nodeName === 'A' && dom.hasClass(target, 'mce-item-anchor')) {\n e.preventDefault();\n selection.select(target);\n }\n });\n };\n var removeStylesWhenDeletingAcrossBlockElements = function () {\n var getAttributeApplyFunction = function () {\n var template = dom.getAttribs(selection.getStart().cloneNode(false));\n return function () {\n var target = selection.getStart();\n if (target !== editor.getBody()) {\n dom.setAttrib(target, 'style', null);\n each(template, function (attr) {\n target.setAttributeNode(attr.cloneNode(true));\n });\n }\n };\n };\n var isSelectionAcrossElements = function () {\n return !selection.isCollapsed() && dom.getParent(selection.getStart(), dom.isBlock) !== dom.getParent(selection.getEnd(), dom.isBlock);\n };\n editor.on('keypress', function (e) {\n var applyAttributes;\n if (!isDefaultPrevented(e) && (e.keyCode === 8 || e.keyCode === 46) && isSelectionAcrossElements()) {\n applyAttributes = getAttributeApplyFunction();\n editor.getDoc().execCommand('delete', false, null);\n applyAttributes();\n e.preventDefault();\n return false;\n }\n });\n dom.bind(editor.getDoc(), 'cut', function (e) {\n var applyAttributes;\n if (!isDefaultPrevented(e) && isSelectionAcrossElements()) {\n applyAttributes = getAttributeApplyFunction();\n Delay.setEditorTimeout(editor, function () {\n applyAttributes();\n });\n }\n });\n };\n var disableBackspaceIntoATable = function () {\n editor.on('keydown', function (e) {\n if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n var previousSibling = selection.getNode().previousSibling;\n if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'table') {\n e.preventDefault();\n return false;\n }\n }\n }\n });\n };\n var removeBlockQuoteOnBackSpace = function () {\n editor.on('keydown', function (e) {\n var rng, parent;\n if (isDefaultPrevented(e) || e.keyCode !== VK.BACKSPACE) {\n return;\n }\n rng = selection.getRng();\n var container = rng.startContainer;\n var offset = rng.startOffset;\n var root = dom.getRoot();\n parent = container;\n if (!rng.collapsed || offset !== 0) {\n return;\n }\n while (parent && parent.parentNode && parent.parentNode.firstChild === parent && parent.parentNode !== root) {\n parent = parent.parentNode;\n }\n if (parent.tagName === 'BLOCKQUOTE') {\n editor.formatter.toggle('blockquote', null, parent);\n rng = dom.createRng();\n rng.setStart(container, 0);\n rng.setEnd(container, 0);\n selection.setRng(rng);\n }\n });\n };\n var setGeckoEditingOptions = function () {\n var setOpts = function () {\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 var addBrAfterLastLinks = function () {\n var fixLinks = function () {\n each(dom.select('a'), function (node) {\n var parentNode = node.parentNode;\n var root = dom.getRoot();\n if (parentNode.lastChild === node) {\n while (parentNode && !dom.isBlock(parentNode)) {\n if (parentNode.parentNode.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', function (e) {\n if (e.type === 'setcontent' || e.command === 'mceInsertLink') {\n fixLinks();\n }\n });\n };\n var setDefaultBlockType = function () {\n if (getForcedRootBlock(editor)) {\n editor.on('init', function () {\n setEditorCommandState('DefaultParagraphSeparator', getForcedRootBlock(editor));\n });\n }\n };\n var normalizeSelection = function () {\n editor.on('keyup focusin mouseup', function (e) {\n if (!VK.modifierPressed(e)) {\n selection.normalize();\n }\n }, true);\n };\n var showBrokenImageIcon = function () {\n editor.contentStyles.push('img:-moz-broken {' + '-moz-force-broken-image-icon:1;' + 'min-width:24px;' + 'min-height:24px' + '}');\n };\n var restoreFocusOnKeyDown = function () {\n if (!editor.inline) {\n editor.on('keydown', function () {\n if (document.activeElement === document.body) {\n editor.getWin().focus();\n }\n });\n }\n };\n var bodyHeight = function () {\n if (!editor.inline) {\n editor.contentStyles.push('body {min-height: 150px}');\n editor.on('click', function (e) {\n var rng;\n if (e.target.nodeName === 'HTML') {\n if (Env.ie > 11) {\n editor.getBody().focus();\n return;\n }\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 var blockCmdArrowNavigation = function () {\n if (Env.mac) {\n editor.on('keydown', function (e) {\n if (VK.metaKeyPressed(e) && !e.shiftKey && (e.keyCode === 37 || e.keyCode === 39)) {\n e.preventDefault();\n var selection_1 = editor.selection.getSel();\n selection_1.modify('move', e.keyCode === 37 ? 'backward' : 'forward', 'lineboundary');\n }\n });\n }\n };\n var disableAutoUrlDetect = function () {\n setEditorCommandState('AutoUrlDetect', false);\n };\n var tapLinksAndImages = function () {\n editor.on('click', function (e) {\n var 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 var blockFormSubmitInsideEditor = function () {\n editor.on('init', function () {\n editor.dom.bind(editor.getBody(), 'submit', function (e) {\n e.preventDefault();\n });\n });\n };\n var removeAppleInterchangeBrs = function () {\n parser.addNodeFilter('br', function (nodes) {\n var i = nodes.length;\n while (i--) {\n if (nodes[i].attr('class') === 'Apple-interchange-newline') {\n nodes[i].remove();\n }\n }\n });\n };\n var ieInternalDragAndDrop = function () {\n editor.on('dragstart', function (e) {\n setMceInternalContent(e);\n });\n editor.on('drop', function (e) {\n if (!isDefaultPrevented(e)) {\n var internalContent = getMceInternalContent(e);\n if (internalContent && internalContent.id !== editor.id) {\n e.preventDefault();\n var rng = fromPoint(e.x, e.y, editor.getDoc());\n selection.setRng(rng);\n insertClipboardContents(internalContent.html, true);\n }\n }\n });\n };\n var refreshContentEditable = noop;\n var isHidden = function () {\n if (!isGecko || editor.removed) {\n return false;\n }\n var sel = editor.selection.getSel();\n return !sel || !sel.rangeCount || sel.rangeCount === 0;\n };\n var setupRtc = function () {\n if (isWebKit) {\n documentElementEditingFocus();\n selectControlElements();\n blockFormSubmitInsideEditor();\n selectAll();\n if (Env.iOS) {\n restoreFocusOnKeyDown();\n bodyHeight();\n tapLinksAndImages();\n }\n }\n if (isGecko) {\n focusBody();\n setGeckoEditingOptions();\n showBrokenImageIcon();\n blockCmdArrowNavigation();\n }\n };\n var setup = function () {\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 (Env.iOS) {\n restoreFocusOnKeyDown();\n bodyHeight();\n tapLinksAndImages();\n } else {\n selectAll();\n }\n }\n if (Env.ie >= 11) {\n bodyHeight();\n disableBackspaceIntoATable();\n }\n if (Env.ie) {\n selectAll();\n disableAutoUrlDetect();\n ieInternalDragAndDrop();\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: refreshContentEditable,\n isHidden: isHidden\n };\n };\n\n var DOM$6 = DOMUtils.DOM;\n var appendStyle = function (editor, text) {\n var body = SugarElement.fromDom(editor.getBody());\n var container = getStyleContainer(getRootNode(body));\n var style = SugarElement.fromTag('style');\n set$1(style, 'type', 'text/css');\n append$1(style, SugarElement.fromText(text));\n append$1(container, style);\n editor.on('remove', function () {\n remove$7(style);\n });\n };\n var getRootName = function (editor) {\n return editor.inline ? editor.getElement().nodeName.toLowerCase() : undefined;\n };\n var removeUndefined = function (obj) {\n return filter$3(obj, function (v) {\n return isUndefined(v) === false;\n });\n };\n var mkSchemaSettings = function (editor) {\n var settings = editor.settings;\n return removeUndefined({\n block_elements: settings.block_elements,\n boolean_attributes: settings.boolean_attributes,\n custom_elements: settings.custom_elements,\n extended_valid_elements: settings.extended_valid_elements,\n invalid_elements: settings.invalid_elements,\n invalid_styles: settings.invalid_styles,\n move_caret_before_on_enter_elements: settings.move_caret_before_on_enter_elements,\n non_empty_elements: settings.non_empty_elements,\n schema: settings.schema,\n self_closing_elements: settings.self_closing_elements,\n short_ended_elements: settings.short_ended_elements,\n special: settings.special,\n text_block_elements: settings.text_block_elements,\n text_inline_elements: settings.text_inline_elements,\n valid_children: settings.valid_children,\n valid_classes: settings.valid_classes,\n valid_elements: settings.valid_elements,\n valid_styles: settings.valid_styles,\n verify_html: settings.verify_html,\n whitespace_elements: settings.whitespace_elements,\n padd_empty_block_inline_children: settings.format_empty_lines\n });\n };\n var mkParserSettings = function (editor) {\n var settings = editor.settings;\n var blobCache = editor.editorUpload.blobCache;\n return removeUndefined({\n allow_conditional_comments: settings.allow_conditional_comments,\n allow_html_data_urls: settings.allow_html_data_urls,\n allow_svg_data_urls: settings.allow_svg_data_urls,\n allow_html_in_named_anchor: settings.allow_html_in_named_anchor,\n allow_script_urls: settings.allow_script_urls,\n allow_unsafe_link_target: settings.allow_unsafe_link_target,\n convert_fonts_to_spans: settings.convert_fonts_to_spans,\n fix_list_elements: settings.fix_list_elements,\n font_size_legacy_values: settings.font_size_legacy_values,\n forced_root_block: settings.forced_root_block,\n forced_root_block_attrs: settings.forced_root_block_attrs,\n padd_empty_with_br: settings.padd_empty_with_br,\n preserve_cdata: settings.preserve_cdata,\n remove_trailing_brs: settings.remove_trailing_brs,\n inline_styles: settings.inline_styles,\n root_name: getRootName(editor),\n validate: true,\n blob_cache: blobCache,\n document: editor.getDoc(),\n images_dataimg_filter: settings.images_dataimg_filter\n });\n };\n var mkSerializerSettings = function (editor) {\n var settings = editor.settings;\n return __assign(__assign(__assign({}, mkParserSettings(editor)), mkSchemaSettings(editor)), removeUndefined({\n url_converter: settings.url_converter,\n url_converter_scope: settings.url_converter_scope,\n element_format: settings.element_format,\n entities: settings.entities,\n entity_encoding: settings.entity_encoding,\n indent: settings.indent,\n indent_after: settings.indent_after,\n indent_before: settings.indent_before\n }));\n };\n var createParser = function (editor) {\n var parser = DomParser(mkParserSettings(editor), editor.schema);\n parser.addAttributeFilter('src,href,style,tabindex', function (nodes, name) {\n var i = nodes.length, node, value;\n var dom = editor.dom;\n var internalName = 'data-mce-' + name;\n while (i--) {\n node = nodes[i];\n 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', function (nodes) {\n var i = nodes.length;\n while (i--) {\n var node = nodes[i];\n var type = node.attr('type') || 'no/type';\n if (type.indexOf('mce-') !== 0) {\n node.attr('type', 'mce-' + type);\n }\n }\n });\n if (editor.settings.preserve_cdata) {\n parser.addNodeFilter('#cdata', function (nodes) {\n var i = nodes.length;\n while (i--) {\n var node = nodes[i];\n node.type = 8;\n node.name = '#comment';\n node.value = '[CDATA[' + editor.dom.encode(node.value) + ']]';\n }\n });\n }\n parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function (nodes) {\n var i = nodes.length;\n var nonEmptyElements = editor.schema.getNonEmptyElements();\n while (i--) {\n var node = nodes[i];\n if (node.isEmpty(nonEmptyElements) && node.getAll('br').length === 0) {\n node.append(new AstNode('br', 1)).shortEnded = true;\n }\n }\n });\n return parser;\n };\n var autoFocus = function (editor) {\n if (editor.settings.auto_focus) {\n Delay.setEditorTimeout(editor, function () {\n var focusEditor;\n if (editor.settings.auto_focus === true) {\n focusEditor = editor;\n } else {\n focusEditor = editor.editorManager.get(editor.settings.auto_focus);\n }\n if (!focusEditor.destroyed) {\n focusEditor.focus();\n }\n }, 100);\n }\n };\n var moveSelectionToFirstCaretPosition = function (editor) {\n var root = editor.dom.getRoot();\n if (!editor.inline && (!hasAnyRanges(editor) || editor.selection.getStart(true) === root)) {\n firstPositionIn(root).each(function (pos) {\n var node = pos.getNode();\n var caretPos = isTable$3(node) ? firstPositionIn(node).getOr(pos) : pos;\n if (Env.browser.isIE()) {\n storeNative(editor, caretPos.toRange());\n } else {\n editor.selection.setRng(caretPos.toRange());\n }\n });\n }\n };\n var initEditor = function (editor) {\n editor.bindPendingEventDelegates();\n editor.initialized = true;\n fireInit(editor);\n editor.focus(true);\n moveSelectionToFirstCaretPosition(editor);\n editor.nodeChanged({ initial: true });\n editor.execCallback('init_instance_callback', editor);\n autoFocus(editor);\n };\n var getStyleSheetLoader$1 = function (editor) {\n return editor.inline ? editor.ui.styleSheetLoader : editor.dom.styleSheetLoader;\n };\n var makeStylesheetLoadingPromises = function (editor, css, framedFonts) {\n var promises = [new promiseObj(function (resolve, reject) {\n return getStyleSheetLoader$1(editor).loadAll(css, resolve, reject);\n })];\n if (editor.inline) {\n return promises;\n } else {\n return promises.concat([new promiseObj(function (resolve, reject) {\n return editor.ui.styleSheetLoader.loadAll(framedFonts, resolve, reject);\n })]);\n }\n };\n var loadContentCss = function (editor) {\n var styleSheetLoader = getStyleSheetLoader$1(editor);\n var fontCss = getFontCss(editor);\n var css = editor.contentCSS;\n var removeCss = function () {\n styleSheetLoader.unloadAll(css);\n if (!editor.inline) {\n editor.ui.styleSheetLoader.unloadAll(fontCss);\n }\n };\n var loaded = function () {\n if (editor.removed) {\n removeCss();\n } else {\n editor.on('remove', removeCss);\n }\n };\n if (editor.contentStyles.length > 0) {\n var contentCssText_1 = '';\n Tools.each(editor.contentStyles, function (style) {\n contentCssText_1 += style + '\\r\\n';\n });\n editor.dom.addStyle(contentCssText_1);\n }\n var allStylesheets = promiseObj.all(makeStylesheetLoadingPromises(editor, css, fontCss)).then(loaded).catch(loaded);\n if (editor.settings.content_style) {\n appendStyle(editor, editor.settings.content_style);\n }\n return allStylesheets;\n };\n var preInit = function (editor) {\n var settings = editor.settings, doc = editor.getDoc(), body = editor.getBody();\n firePreInit(editor);\n if (!settings.browser_spellcheck && !settings.gecko_spellcheck) {\n doc.body.spellcheck = false;\n DOM$6.setAttrib(body, 'spellcheck', 'false');\n }\n editor.quirks = Quirks(editor);\n firePostRender(editor);\n var directionality = getDirectionality(editor);\n if (directionality !== undefined) {\n body.dir = directionality;\n }\n if (settings.protect) {\n editor.on('BeforeSetContent', function (e) {\n Tools.each(settings.protect, function (pattern) {\n e.content = e.content.replace(pattern, function (str) {\n return '';\n });\n });\n });\n }\n editor.on('SetContent', function () {\n editor.addVisual(editor.getBody());\n });\n editor.on('compositionstart compositionend', function (e) {\n editor.composing = e.type === 'compositionstart';\n });\n };\n var loadInitialContent = function (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 var initEditorWithInitialContent = function (editor) {\n if (editor.removed !== true) {\n loadInitialContent(editor);\n initEditor(editor);\n }\n };\n var initContentBody = function (editor, skipWrite) {\n var settings = editor.settings;\n var targetElm = editor.getElement();\n var doc = editor.getDoc();\n if (!settings.inline) {\n editor.getElement().style.visibility = editor.orgVisibility;\n }\n if (!skipWrite && !editor.inline) {\n doc.open();\n doc.write(editor.iframeHTML);\n doc.close();\n }\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 var body = editor.getBody();\n body.disabled = true;\n editor.readonly = !!settings.readonly;\n if (!editor.readonly) {\n if (editor.inline && DOM$6.getStyle(body, 'position', true) === 'static') {\n body.style.position = 'relative';\n }\n body.contentEditable = editor.getParam('content_editable_state', 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 hex_colors: settings.force_hex_style_colors,\n update_styles: true,\n root_element: editor.inline ? editor.getBody() : null,\n collect: function () {\n return editor.inline;\n },\n schema: editor.schema,\n contentCssCors: shouldUseContentCssCors(editor),\n referrerPolicy: getReferrerPolicy(editor),\n onSetAttrib: function (e) {\n editor.fire('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$e(editor);\n setup$3(editor);\n if (!isRtc(editor)) {\n setup$2(editor);\n }\n var caret = setup$4(editor);\n setup$f(editor, caret);\n setup$d(editor);\n setup$g(editor);\n var setupRtcThunk = setup$i(editor);\n preInit(editor);\n setupRtcThunk.fold(function () {\n loadContentCss(editor).then(function () {\n return initEditorWithInitialContent(editor);\n });\n }, function (setupRtc) {\n editor.setProgressState(true);\n loadContentCss(editor).then(function () {\n setupRtc().then(function (_rtcMode) {\n editor.setProgressState(false);\n initEditorWithInitialContent(editor);\n }, function (err) {\n editor.notificationManager.open({\n type: 'error',\n text: String(err)\n });\n initEditorWithInitialContent(editor);\n });\n });\n });\n };\n\n var DOM$5 = DOMUtils.DOM;\n var relaxDomain = function (editor, ifr) {\n if (document.domain !== window.location.hostname && Env.browser.isIE()) {\n var bodyUuid = uuid('mce');\n editor[bodyUuid] = function () {\n initContentBody(editor);\n };\n var domainRelaxUrl = 'javascript:(function(){' + 'document.open();document.domain=\"' + document.domain + '\";' + 'var ed = window.parent.tinymce.get(\"' + editor.id + '\");document.write(ed.iframeHTML);' + 'document.close();ed.' + bodyUuid + '(true);})()';\n DOM$5.setAttrib(ifr, 'src', domainRelaxUrl);\n return true;\n }\n return false;\n };\n var createIframeElement = function (id, title, height, customAttrs) {\n var iframe = SugarElement.fromTag('iframe');\n setAll$1(iframe, customAttrs);\n setAll$1(iframe, {\n id: id + '_ifr',\n frameBorder: '0',\n allowTransparency: 'true',\n title: title\n });\n add$1(iframe, 'tox-edit-area__iframe');\n return iframe;\n };\n var getIframeHtml = function (editor) {\n var iframeHTML = getDocType(editor) + '';\n if (getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {\n iframeHTML += '';\n }\n iframeHTML += '';\n var bodyId = getBodyId(editor);\n var bodyClass = getBodyClass(editor);\n var translatedAriaText = editor.translate(getIframeAriaText(editor));\n if (getContentSecurityPolicy(editor)) {\n iframeHTML += '';\n }\n iframeHTML += '' + ('') + '
    ' + '';\n return iframeHTML;\n };\n var createIframe = function (editor, o) {\n var iframeTitle = editor.translate('Rich Text Area');\n var ifr = createIframeElement(editor.id, iframeTitle, o.height, getIframeAttrs(editor)).dom;\n ifr.onload = function () {\n ifr.onload = null;\n editor.fire('load');\n };\n var isDomainRelaxed = relaxDomain(editor, ifr);\n editor.contentAreaContainer = o.iframeContainer;\n editor.iframeElement = ifr;\n editor.iframeHTML = getIframeHtml(editor);\n DOM$5.add(o.iframeContainer, ifr);\n return isDomainRelaxed;\n };\n var init$1 = function (editor, boxInfo) {\n var isDomainRelaxed = createIframe(editor, boxInfo);\n if (boxInfo.editorContainer) {\n DOM$5.get(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 if (!isDomainRelaxed) {\n initContentBody(editor);\n }\n };\n\n var DOM$4 = DOMUtils.DOM;\n var initPlugin = function (editor, initializedPlugins, plugin) {\n var Plugin = PluginManager.get(plugin);\n var pluginUrl = PluginManager.urls[plugin] || editor.documentBaseUrl.replace(/\\/$/, '');\n plugin = Tools.trim(plugin);\n if (Plugin && Tools.inArray(initializedPlugins, plugin) === -1) {\n Tools.each(PluginManager.dependencies(plugin), function (dep) {\n initPlugin(editor, initializedPlugins, dep);\n });\n if (editor.plugins[plugin]) {\n return;\n }\n try {\n var pluginInstance = new Plugin(editor, pluginUrl, editor.$);\n editor.plugins[plugin] = pluginInstance;\n if (pluginInstance.init) {\n pluginInstance.init(editor, pluginUrl);\n initializedPlugins.push(plugin);\n }\n } catch (e) {\n pluginInitError(editor, plugin, e);\n }\n }\n };\n var trimLegacyPrefix = function (name) {\n return name.replace(/^\\-/, '');\n };\n var initPlugins = function (editor) {\n var initializedPlugins = [];\n Tools.each(getPlugins(editor).split(/[ ,]/), function (name) {\n initPlugin(editor, initializedPlugins, trimLegacyPrefix(name));\n });\n };\n var initIcons = function (editor) {\n var iconPackName = Tools.trim(getIconPackName(editor));\n var currentIcons = editor.ui.registry.getAll().icons;\n var loadIcons = __assign(__assign({}, IconManager.get('default').icons), IconManager.get(iconPackName).icons);\n each$j(loadIcons, function (svgData, icon) {\n if (!has$2(currentIcons, icon)) {\n editor.ui.registry.addIcon(icon, svgData);\n }\n });\n };\n var initTheme = function (editor) {\n var theme = getTheme(editor);\n if (isString$1(theme)) {\n editor.settings.theme = trimLegacyPrefix(theme);\n var Theme = ThemeManager.get(theme);\n editor.theme = new Theme(editor, ThemeManager.urls[theme]);\n if (editor.theme.init) {\n editor.theme.init(editor, ThemeManager.urls[theme] || editor.documentBaseUrl.replace(/\\/$/, ''), editor.$);\n }\n } else {\n editor.theme = {};\n }\n };\n var renderFromLoadedTheme = function (editor) {\n return editor.theme.renderUI();\n };\n var renderFromThemeFunc = function (editor) {\n var elm = editor.getElement();\n var theme = getTheme(editor);\n var 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 var createThemeFalseResult = function (element) {\n return {\n editorContainer: element,\n iframeContainer: element,\n api: {}\n };\n };\n var renderThemeFalseIframe = function (targetElement) {\n var iframeContainer = DOM$4.create('div');\n DOM$4.insertAfter(iframeContainer, targetElement);\n return createThemeFalseResult(iframeContainer);\n };\n var renderThemeFalse = function (editor) {\n var targetElement = editor.getElement();\n return editor.inline ? createThemeFalseResult(null) : renderThemeFalseIframe(targetElement);\n };\n var renderThemeUi = function (editor) {\n var elm = editor.getElement();\n editor.orgDisplay = elm.style.display;\n if (isString$1(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 var augmentEditorUiApi = function (editor, api) {\n var uiApiFacade = {\n show: Optional.from(api.show).getOr(noop),\n hide: Optional.from(api.hide).getOr(noop),\n disable: Optional.from(api.disable).getOr(noop),\n isDisabled: Optional.from(api.isDisabled).getOr(never),\n enable: function () {\n if (!editor.mode.isReadOnly()) {\n Optional.from(api.enable).map(call);\n }\n }\n };\n editor.ui = __assign(__assign({}, editor.ui), uiApiFacade);\n };\n var init = function (editor) {\n editor.fire('ScriptsLoaded');\n initIcons(editor);\n initTheme(editor);\n initPlugins(editor);\n var renderInfo = renderThemeUi(editor);\n augmentEditorUiApi(editor, Optional.from(renderInfo.api).getOr({}));\n var boxInfo = {\n editorContainer: renderInfo.editorContainer,\n iframeContainer: renderInfo.iframeContainer\n };\n editor.editorContainer = boxInfo.editorContainer ? boxInfo.editorContainer : null;\n appendContentCssFromSettings(editor);\n if (editor.inline) {\n return initContentBody(editor);\n } else {\n return init$1(editor, boxInfo);\n }\n };\n\n var DOM$3 = DOMUtils.DOM;\n var hasSkipLoadPrefix = function (name) {\n return name.charAt(0) === '-';\n };\n var loadLanguage = function (scriptLoader, editor) {\n var languageCode = getLanguageCode(editor);\n var languageUrl = getLanguageUrl(editor);\n if (I18n.hasCode(languageCode) === false && languageCode !== 'en') {\n var url_1 = languageUrl !== '' ? languageUrl : editor.editorManager.baseURL + '/langs/' + languageCode + '.js';\n scriptLoader.add(url_1, noop, undefined, function () {\n languageLoadError(editor, url_1, languageCode);\n });\n }\n };\n var loadTheme = function (scriptLoader, editor, suffix, callback) {\n var theme = getTheme(editor);\n if (isString$1(theme)) {\n if (!hasSkipLoadPrefix(theme) && !has$2(ThemeManager.urls, theme)) {\n var themeUrl = getThemeUrl(editor);\n if (themeUrl) {\n ThemeManager.load(theme, editor.documentBaseURI.toAbsolute(themeUrl));\n } else {\n ThemeManager.load(theme, 'themes/' + theme + '/theme' + suffix + '.js');\n }\n }\n scriptLoader.loadQueue(function () {\n ThemeManager.waitFor(theme, callback);\n });\n } else {\n callback();\n }\n };\n var getIconsUrlMetaFromUrl = function (editor) {\n return Optional.from(getIconsUrl(editor)).filter(function (url) {\n return url.length > 0;\n }).map(function (url) {\n return {\n url: url,\n name: Optional.none()\n };\n });\n };\n var getIconsUrlMetaFromName = function (editor, name, suffix) {\n return Optional.from(name).filter(function (name) {\n return name.length > 0 && !IconManager.has(name);\n }).map(function (name) {\n return {\n url: editor.editorManager.baseURL + '/icons/' + name + '/icons' + suffix + '.js',\n name: Optional.some(name)\n };\n });\n };\n var loadIcons = function (scriptLoader, editor, suffix) {\n var defaultIconsUrl = getIconsUrlMetaFromName(editor, 'default', suffix);\n var customIconsUrl = getIconsUrlMetaFromUrl(editor).orThunk(function () {\n return getIconsUrlMetaFromName(editor, getIconPackName(editor), '');\n });\n each$k(cat([\n defaultIconsUrl,\n customIconsUrl\n ]), function (urlMeta) {\n scriptLoader.add(urlMeta.url, noop, undefined, function () {\n iconsLoadError(editor, urlMeta.url, urlMeta.name.getOrUndefined());\n });\n });\n };\n var loadPlugins = function (editor, suffix) {\n Tools.each(getExternalPlugins$1(editor), function (url, name) {\n PluginManager.load(name, url, noop, undefined, function () {\n pluginLoadError(editor, url, name);\n });\n editor.settings.plugins += ' ' + name;\n });\n Tools.each(getPlugins(editor).split(/[ ,]/), function (plugin) {\n plugin = Tools.trim(plugin);\n if (plugin && !PluginManager.urls[plugin]) {\n if (hasSkipLoadPrefix(plugin)) {\n plugin = plugin.substr(1, plugin.length);\n var dependencies = PluginManager.dependencies(plugin);\n Tools.each(dependencies, function (depPlugin) {\n var defaultSettings = {\n prefix: 'plugins/',\n resource: depPlugin,\n suffix: '/plugin' + suffix + '.js'\n };\n var dep = PluginManager.createUrl(defaultSettings, depPlugin);\n PluginManager.load(dep.resource, dep, noop, undefined, function () {\n pluginLoadError(editor, dep.prefix + dep.resource + dep.suffix, dep.resource);\n });\n });\n } else {\n var url_2 = {\n prefix: 'plugins/',\n resource: plugin,\n suffix: '/plugin' + suffix + '.js'\n };\n PluginManager.load(plugin, url_2, noop, undefined, function () {\n pluginLoadError(editor, url_2.prefix + url_2.resource + url_2.suffix, plugin);\n });\n }\n }\n });\n };\n var loadScripts = function (editor, suffix) {\n var scriptLoader = ScriptLoader.ScriptLoader;\n loadTheme(scriptLoader, editor, suffix, function () {\n loadLanguage(scriptLoader, editor);\n loadIcons(scriptLoader, editor, suffix);\n loadPlugins(editor, suffix);\n scriptLoader.loadQueue(function () {\n if (!editor.removed) {\n init(editor);\n }\n }, editor, function () {\n if (!editor.removed) {\n init(editor);\n }\n });\n });\n };\n var getStyleSheetLoader = function (element, editor) {\n return instance.forElement(element, {\n contentCssCors: hasContentCssCors(editor),\n referrerPolicy: getReferrerPolicy(editor)\n });\n };\n var render = function (editor) {\n var id = editor.id;\n I18n.setCode(getLanguageCode(editor));\n var readyHandler = function () {\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 if (!Env.contentEditable) {\n return;\n }\n var element = SugarElement.fromDom(editor.getElement());\n var snapshot = clone$3(element);\n editor.on('remove', function () {\n eachr(element.dom.attributes, function (attr) {\n return remove$6(element, attr.name);\n });\n setAll$1(element, snapshot);\n });\n editor.ui.styleSheetLoader = getStyleSheetLoader(element, editor);\n if (!isInline(editor)) {\n editor.orgVisibility = editor.getElement().style.visibility;\n editor.getElement().style.visibility = 'hidden';\n } else {\n editor.inline = true;\n }\n var 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 = function (e) {\n editor.fire(e.type, e);\n };\n DOM$3.bind(form, 'submit reset', editor.formEventDelegate);\n editor.on('reset', function () {\n editor.resetContent();\n });\n if (shouldPatchSubmit(editor) && !form.submit.nodeType && !form.submit.length && !form._mceOldSubmit) {\n form._mceOldSubmit = form.submit;\n form.submit = function () {\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', function (e) {\n if (e.save) {\n e.content = DOM$3.encode(e.content);\n }\n });\n }\n if (shouldAddFormSubmitTrigger(editor)) {\n editor.on('submit', function () {\n if (editor.initialized) {\n editor.save();\n }\n });\n }\n if (shouldAddUnloadTrigger(editor)) {\n editor._beforeUnload = function () {\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 var addVisual = function (editor, elm) {\n return addVisual$1(editor, elm);\n };\n\n var legacyPropNames = {\n 'font-size': 'size',\n 'font-family': 'face'\n };\n var getSpecifiedFontProp = function (propName, rootElm, elm) {\n var getProperty = function (elm) {\n return getRaw(elm, propName).orThunk(function () {\n if (name(elm) === 'font') {\n return get$9(legacyPropNames, propName).bind(function (legacyPropName) {\n return getOpt(elm, legacyPropName);\n });\n } else {\n return Optional.none();\n }\n });\n };\n var isRoot = function (elm) {\n return eq(SugarElement.fromDom(rootElm), elm);\n };\n return closest$1(SugarElement.fromDom(elm), function (elm) {\n return getProperty(elm);\n }, isRoot);\n };\n var normalizeFontFamily = function (fontFamily) {\n return fontFamily.replace(/[\\'\\\"\\\\]/g, '').replace(/,\\s+/g, ',');\n };\n var getComputedFontProp = function (propName, elm) {\n return Optional.from(DOMUtils.DOM.getStyle(elm, propName, true));\n };\n var getFontProp = function (propName) {\n return function (rootElm, elm) {\n return Optional.from(elm).map(SugarElement.fromDom).filter(isElement$6).bind(function (element) {\n return getSpecifiedFontProp(propName, rootElm, element.dom).or(getComputedFontProp(propName, element.dom));\n }).getOr('');\n };\n };\n var getFontSize = getFontProp('font-size');\n var getFontFamily = compose(normalizeFontFamily, getFontProp('font-family'));\n\n var findFirstCaretElement = function (editor) {\n return firstPositionIn(editor.getBody()).map(function (caret) {\n var container = caret.container();\n return isText$7(container) ? container.parentNode : container;\n });\n };\n var getCaretElement = function (editor) {\n return Optional.from(editor.selection.getRng()).bind(function (rng) {\n var root = editor.getBody();\n var atStartOfNode = rng.startContainer === root && rng.startOffset === 0;\n return atStartOfNode ? Optional.none() : Optional.from(editor.selection.getStart(true));\n });\n };\n var bindRange = function (editor, binder) {\n return getCaretElement(editor).orThunk(curry(findFirstCaretElement, editor)).map(SugarElement.fromDom).filter(isElement$6).bind(binder);\n };\n var mapRange = function (editor, mapper) {\n return bindRange(editor, compose1(Optional.some, mapper));\n };\n\n var fromFontSizeNumber = function (editor, value) {\n if (/^[0-9.]+$/.test(value)) {\n var fontSizeNumber = parseInt(value, 10);\n if (fontSizeNumber >= 1 && fontSizeNumber <= 7) {\n var fontSizes = getFontStyleValues(editor);\n var fontClasses = getFontSizeClasses(editor);\n if (fontClasses) {\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 var normalizeFontNames = function (font) {\n var fonts = font.split(/\\s*,\\s*/);\n return map$3(fonts, function (font) {\n if (font.indexOf(' ') !== -1 && !(startsWith(font, '\"') || startsWith(font, '\\''))) {\n return '\\'' + font + '\\'';\n } else {\n return font;\n }\n }).join(',');\n };\n var fontNameAction = function (editor, value) {\n var font = fromFontSizeNumber(editor, value);\n editor.formatter.toggle('fontname', { value: normalizeFontNames(font) });\n editor.nodeChanged();\n };\n var fontNameQuery = function (editor) {\n return mapRange(editor, function (elm) {\n return getFontFamily(editor.getBody(), elm.dom);\n }).getOr('');\n };\n var fontSizeAction = function (editor, value) {\n editor.formatter.toggle('fontsize', { value: fromFontSizeNumber(editor, value) });\n editor.nodeChanged();\n };\n var fontSizeQuery = function (editor) {\n return mapRange(editor, function (elm) {\n return getFontSize(editor.getBody(), elm.dom);\n }).getOr('');\n };\n\n var lineHeightQuery = function (editor) {\n return mapRange(editor, function (elm) {\n var root = SugarElement.fromDom(editor.getBody());\n var specifiedStyle = closest$1(elm, function (elm) {\n return getRaw(elm, 'line-height');\n }, curry(eq, root));\n var computedStyle = function () {\n var lineHeight = parseFloat(get$5(elm, 'line-height'));\n var fontSize = parseFloat(get$5(elm, 'font-size'));\n return String(lineHeight / fontSize);\n };\n return specifiedStyle.getOrThunk(computedStyle);\n }).getOr('');\n };\n var lineHeightAction = function (editor, lineHeight) {\n editor.formatter.toggle('lineheight', { value: String(lineHeight) });\n editor.nodeChanged();\n };\n\n var processValue = function (value) {\n if (typeof value !== 'string') {\n var details = Tools.extend({\n paste: value.paste,\n data: { paste: value.paste }\n }, value);\n return {\n content: value.content,\n details: details\n };\n }\n return {\n content: value,\n details: {}\n };\n };\n var insertAtCaret = function (editor, value) {\n var result = processValue(value);\n insertContent(editor, result.content, result.details);\n };\n\n var each$4 = Tools.each;\n var map = Tools.map, inArray = Tools.inArray;\n var EditorCommands = function () {\n function EditorCommands(editor) {\n this.commands = {\n state: {},\n exec: {},\n value: {}\n };\n this.editor = editor;\n this.setupCommands(editor);\n }\n EditorCommands.prototype.execCommand = function (command, ui, value, args) {\n var func, state = false;\n var self = this;\n if (self.editor.removed) {\n return;\n }\n if (command.toLowerCase() !== 'mcefocus') {\n if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(command) && (!args || !args.skip_focus)) {\n self.editor.focus();\n } else {\n restore(self.editor);\n }\n }\n args = self.editor.fire('BeforeExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n if (args.isDefaultPrevented()) {\n return false;\n }\n var customCommand = command.toLowerCase();\n if (func = self.commands.exec[customCommand]) {\n func(customCommand, ui, value);\n self.editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n each$4(this.editor.plugins, function (p) {\n if (p.execCommand && p.execCommand(command, ui, value)) {\n self.editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n state = true;\n return false;\n }\n });\n if (state) {\n return state;\n }\n if (self.editor.theme && self.editor.theme.execCommand && self.editor.theme.execCommand(command, ui, value)) {\n self.editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n try {\n state = self.editor.getDoc().execCommand(command, ui, value);\n } catch (ex) {\n }\n if (state) {\n self.editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n return false;\n };\n EditorCommands.prototype.queryCommandState = function (command) {\n var func;\n if (this.editor.quirks.isHidden() || this.editor.removed) {\n return;\n }\n command = command.toLowerCase();\n if (func = this.commands.state[command]) {\n return func(command);\n }\n try {\n return this.editor.getDoc().queryCommandState(command);\n } catch (ex) {\n }\n return false;\n };\n EditorCommands.prototype.queryCommandValue = function (command) {\n var func;\n if (this.editor.quirks.isHidden() || this.editor.removed) {\n return;\n }\n command = command.toLowerCase();\n if (func = this.commands.value[command]) {\n return func(command);\n }\n try {\n return this.editor.getDoc().queryCommandValue(command);\n } catch (ex) {\n }\n };\n EditorCommands.prototype.addCommands = function (commandList, type) {\n if (type === void 0) {\n type = 'exec';\n }\n var self = this;\n each$4(commandList, function (callback, command) {\n each$4(command.toLowerCase().split(','), function (command) {\n self.commands[type][command] = callback;\n });\n });\n };\n EditorCommands.prototype.addCommand = function (command, callback, scope) {\n var _this = this;\n command = command.toLowerCase();\n this.commands.exec[command] = function (command, ui, value, args) {\n return callback.call(scope || _this.editor, ui, value, args);\n };\n };\n EditorCommands.prototype.queryCommandSupported = function (command) {\n command = command.toLowerCase();\n if (this.commands.exec[command]) {\n return true;\n }\n try {\n return this.editor.getDoc().queryCommandSupported(command);\n } catch (ex) {\n }\n return false;\n };\n EditorCommands.prototype.addQueryStateHandler = function (command, callback, scope) {\n var _this = this;\n command = command.toLowerCase();\n this.commands.state[command] = function () {\n return callback.call(scope || _this.editor);\n };\n };\n EditorCommands.prototype.addQueryValueHandler = function (command, callback, scope) {\n var _this = this;\n command = command.toLowerCase();\n this.commands.value[command] = function () {\n return callback.call(scope || _this.editor);\n };\n };\n EditorCommands.prototype.hasCustomCommand = function (command) {\n command = command.toLowerCase();\n return !!this.commands.exec[command];\n };\n EditorCommands.prototype.execNativeCommand = function (command, ui, value) {\n if (ui === undefined) {\n ui = false;\n }\n if (value === undefined) {\n value = null;\n }\n return this.editor.getDoc().execCommand(command, ui, value);\n };\n EditorCommands.prototype.isFormatMatch = function (name) {\n return this.editor.formatter.match(name);\n };\n EditorCommands.prototype.toggleFormat = function (name, value) {\n this.editor.formatter.toggle(name, value);\n this.editor.nodeChanged();\n };\n EditorCommands.prototype.storeSelection = function (type) {\n this.selectionBookmark = this.editor.selection.getBookmark(type);\n };\n EditorCommands.prototype.restoreSelection = function () {\n this.editor.selection.moveToBookmark(this.selectionBookmark);\n };\n EditorCommands.prototype.setupCommands = function (editor) {\n var self = this;\n this.addCommands({\n 'mceResetDesignMode,mceBeginUndoLevel': noop,\n 'mceEndUndoLevel,mceAddUndoLevel': function () {\n editor.undoManager.add();\n },\n 'mceFocus': function (_command, _ui, value) {\n focus(editor, value);\n },\n 'Cut,Copy,Paste': function (command) {\n var doc = editor.getDoc();\n var failed;\n try {\n self.execNativeCommand(command);\n } catch (ex) {\n failed = true;\n }\n if (command === 'paste' && !doc.queryCommandEnabled(command)) {\n failed = true;\n }\n if (failed || !doc.queryCommandSupported(command)) {\n var 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.mac) {\n msg = msg.replace(/Ctrl\\+/g, '\\u2318+');\n }\n editor.notificationManager.open({\n text: msg,\n type: 'error'\n });\n }\n },\n 'unlink': function () {\n if (editor.selection.isCollapsed()) {\n var 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 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone': function (command) {\n var align = command.substring(7);\n if (align === 'full') {\n align = 'justify';\n }\n each$4('left,center,right,justify'.split(','), function (name) {\n if (align !== name) {\n editor.formatter.remove('align' + name);\n }\n });\n if (align !== 'none') {\n self.toggleFormat('align' + align);\n }\n },\n 'InsertUnorderedList,InsertOrderedList': function (command) {\n var listParent;\n self.execNativeCommand(command);\n var listElm = editor.dom.getParent(editor.selection.getNode(), 'ol,ul');\n if (listElm) {\n listParent = listElm.parentNode;\n if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {\n self.storeSelection();\n editor.dom.split(listParent, listElm);\n self.restoreSelection();\n }\n }\n },\n 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {\n self.toggleFormat(command);\n },\n 'ForeColor,HiliteColor': function (command, ui, value) {\n self.toggleFormat(command, { value: value });\n },\n 'FontName': function (command, ui, value) {\n fontNameAction(editor, value);\n },\n 'FontSize': function (command, ui, value) {\n fontSizeAction(editor, value);\n },\n 'LineHeight': function (command, ui, value) {\n lineHeightAction(editor, value);\n },\n 'Lang': function (command, ui, lang) {\n self.toggleFormat(command, {\n value: lang.code,\n customValue: lang.customCode\n });\n },\n 'RemoveFormat': function (command) {\n editor.formatter.remove(command);\n },\n 'mceBlockQuote': function () {\n self.toggleFormat('blockquote');\n },\n 'FormatBlock': function (command, ui, value) {\n return self.toggleFormat(value || 'p');\n },\n 'mceCleanup': function () {\n var bookmark = editor.selection.getBookmark();\n editor.setContent(editor.getContent());\n editor.selection.moveToBookmark(bookmark);\n },\n 'mceRemoveNode': function (command, ui, value) {\n var node = value || editor.selection.getNode();\n if (node !== editor.getBody()) {\n self.storeSelection();\n editor.dom.remove(node, true);\n self.restoreSelection();\n }\n },\n 'mceSelectNodeDepth': function (command, ui, value) {\n var counter = 0;\n editor.dom.getParent(editor.selection.getNode(), function (node) {\n if (node.nodeType === 1 && counter++ === value) {\n editor.selection.select(node);\n return false;\n }\n }, editor.getBody());\n },\n 'mceSelectNode': function (command, ui, value) {\n editor.selection.select(value);\n },\n 'mceInsertContent': function (command, ui, value) {\n insertAtCaret(editor, value);\n },\n 'mceInsertRawHTML': function (command, ui, value) {\n editor.selection.setContent('tiny_mce_marker');\n var content = editor.getContent();\n editor.setContent(content.replace(/tiny_mce_marker/g, function () {\n return value;\n }));\n },\n 'mceInsertNewLine': function (command, ui, value) {\n insert(editor, value);\n },\n 'mceToggleFormat': function (command, ui, value) {\n self.toggleFormat(value);\n },\n 'mceSetContent': function (command, ui, value) {\n editor.setContent(value);\n },\n 'Indent,Outdent': function (command) {\n handle(editor, command);\n },\n 'mceRepaint': noop,\n 'InsertHorizontalRule': function () {\n editor.execCommand('mceInsertContent', false, '
    ');\n },\n 'mceToggleVisualAid': function () {\n editor.hasVisual = !editor.hasVisual;\n editor.addVisual();\n },\n 'mceReplaceContent': function (command, ui, value) {\n editor.execCommand('mceInsertContent', false, value.replace(/\\{\\$selection\\}/g, editor.selection.getContent({ format: 'text' })));\n },\n 'mceInsertLink': function (command, ui, value) {\n if (typeof value === 'string') {\n value = { href: value };\n }\n var anchor = editor.dom.getParent(editor.selection.getNode(), 'a');\n value.href = value.href.replace(/ /g, '%20');\n if (!anchor || !value.href) {\n editor.formatter.remove('link');\n }\n if (value.href) {\n editor.formatter.apply('link', value, anchor);\n }\n },\n 'selectAll': function () {\n var editingHost = editor.dom.getParent(editor.selection.getStart(), isContentEditableTrue$4);\n if (editingHost) {\n var rng = editor.dom.createRng();\n rng.selectNodeContents(editingHost);\n editor.selection.setRng(rng);\n }\n },\n 'mceNewDocument': function () {\n editor.setContent('');\n },\n 'InsertLineBreak': function (command, ui, value) {\n insert$1(editor, value);\n return true;\n }\n });\n var alignStates = function (name) {\n return function () {\n var selection = editor.selection;\n var nodes = selection.isCollapsed() ? [editor.dom.getParent(selection.getNode(), editor.dom.isBlock)] : selection.getSelectedBlocks();\n var matches = map(nodes, function (node) {\n return !!editor.formatter.matchNode(node, name);\n });\n return inArray(matches, true) !== -1;\n };\n };\n self.addCommands({\n 'JustifyLeft': alignStates('alignleft'),\n 'JustifyCenter': alignStates('aligncenter'),\n 'JustifyRight': alignStates('alignright'),\n 'JustifyFull': alignStates('alignjustify'),\n 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {\n return self.isFormatMatch(command);\n },\n 'mceBlockQuote': function () {\n return self.isFormatMatch('blockquote');\n },\n 'Outdent': function () {\n return canOutdent(editor);\n },\n 'InsertUnorderedList,InsertOrderedList': function (command) {\n var list = editor.dom.getParent(editor.selection.getNode(), 'ul,ol');\n return list && (command === 'insertunorderedlist' && list.tagName === 'UL' || command === 'insertorderedlist' && list.tagName === 'OL');\n }\n }, 'state');\n self.addCommands({\n Undo: function () {\n editor.undoManager.undo();\n },\n Redo: function () {\n editor.undoManager.redo();\n }\n });\n self.addQueryValueHandler('FontName', function () {\n return fontNameQuery(editor);\n }, this);\n self.addQueryValueHandler('FontSize', function () {\n return fontSizeQuery(editor);\n }, this);\n self.addQueryValueHandler('LineHeight', function () {\n return lineHeightQuery(editor);\n }, this);\n };\n return EditorCommands;\n }();\n\n var internalContentEditableAttr = 'data-mce-contenteditable';\n var toggleClass = function (elm, cls, state) {\n if (has(elm, cls) && state === false) {\n remove$3(elm, cls);\n } else if (state) {\n add$1(elm, cls);\n }\n };\n var setEditorCommandState = function (editor, cmd, state) {\n try {\n editor.getDoc().execCommand(cmd, false, String(state));\n } catch (ex) {\n }\n };\n var setContentEditable = function (elm, state) {\n elm.dom.contentEditable = state ? 'true' : 'false';\n };\n var switchOffContentEditableTrue = function (elm) {\n each$k(descendants(elm, '*[contenteditable=\"true\"]'), function (elm) {\n set$1(elm, internalContentEditableAttr, 'true');\n setContentEditable(elm, false);\n });\n };\n var switchOnContentEditableTrue = function (elm) {\n each$k(descendants(elm, '*[' + internalContentEditableAttr + '=\"true\"]'), function (elm) {\n remove$6(elm, internalContentEditableAttr);\n setContentEditable(elm, true);\n });\n };\n var removeFakeSelection = function (editor) {\n Optional.from(editor.selection.getNode()).each(function (elm) {\n elm.removeAttribute('data-mce-selected');\n });\n };\n var restoreFakeSelection = function (editor) {\n editor.selection.setRng(editor.selection.getRng());\n };\n var toggleReadOnly = function (editor, state) {\n var body = SugarElement.fromDom(editor.getBody());\n toggleClass(body, 'mce-content-readonly', state);\n if (state) {\n editor.selection.controlSelection.hideResizeRect();\n editor._selectionOverrides.hideFakeCaret();\n removeFakeSelection(editor);\n editor.readonly = true;\n setContentEditable(body, false);\n switchOffContentEditableTrue(body);\n } else {\n editor.readonly = false;\n setContentEditable(body, true);\n switchOnContentEditableTrue(body);\n setEditorCommandState(editor, 'StyleWithCSS', false);\n setEditorCommandState(editor, 'enableInlineTableEditing', false);\n setEditorCommandState(editor, 'enableObjectResizing', false);\n if (hasEditorOrUiFocus(editor)) {\n editor.focus();\n }\n restoreFakeSelection(editor);\n editor.nodeChanged();\n }\n };\n var isReadOnly = function (editor) {\n return editor.readonly;\n };\n var registerFilters = function (editor) {\n editor.parser.addAttributeFilter('contenteditable', function (nodes) {\n if (isReadOnly(editor)) {\n each$k(nodes, function (node) {\n node.attr(internalContentEditableAttr, node.attr('contenteditable'));\n node.attr('contenteditable', 'false');\n });\n }\n });\n editor.serializer.addAttributeFilter(internalContentEditableAttr, function (nodes) {\n if (isReadOnly(editor)) {\n each$k(nodes, function (node) {\n node.attr('contenteditable', node.attr(internalContentEditableAttr));\n });\n }\n });\n editor.serializer.addTempAttr(internalContentEditableAttr);\n };\n var registerReadOnlyContentFilters = function (editor) {\n if (editor.serializer) {\n registerFilters(editor);\n } else {\n editor.on('PreInit', function () {\n registerFilters(editor);\n });\n }\n };\n var isClickEvent = function (e) {\n return e.type === 'click';\n };\n var getAnchorHrefOpt = function (editor, elm) {\n var isRoot = function (elm) {\n return eq(elm, SugarElement.fromDom(editor.getBody()));\n };\n return closest$2(elm, 'a', isRoot).bind(function (a) {\n return getOpt(a, 'href');\n });\n };\n var processReadonlyEvents = function (editor, e) {\n if (isClickEvent(e) && !VK.metaKeyPressed(e)) {\n var elm = SugarElement.fromDom(e.target);\n getAnchorHrefOpt(editor, elm).each(function (href) {\n e.preventDefault();\n if (/^#/.test(href)) {\n var 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 }\n };\n var registerReadOnlySelectionBlockers = function (editor) {\n editor.on('ShowCaret', function (e) {\n if (isReadOnly(editor)) {\n e.preventDefault();\n }\n });\n editor.on('ObjectSelected', function (e) {\n if (isReadOnly(editor)) {\n e.preventDefault();\n }\n });\n };\n\n var 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 var EventDispatcher = function () {\n function EventDispatcher(settings) {\n this.bindings = {};\n this.settings = settings || {};\n this.scope = this.settings.scope || this;\n this.toggleEvent = this.settings.toggleEvent || never;\n }\n EventDispatcher.isNative = function (name) {\n return !!nativeEvents[name.toLowerCase()];\n };\n EventDispatcher.prototype.fire = function (name, args) {\n var lcName = name.toLowerCase();\n var event = normalize$3(lcName, args || {}, this.scope);\n if (this.settings.beforeFire) {\n this.settings.beforeFire(event);\n }\n var handlers = this.bindings[lcName];\n if (handlers) {\n for (var i = 0, l = handlers.length; i < l; i++) {\n var 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 EventDispatcher.prototype.on = function (name, callback, prepend, extra) {\n if (callback === false) {\n callback = never;\n }\n if (callback) {\n var wrappedCallback = {\n func: callback,\n removed: false\n };\n if (extra) {\n Tools.extend(wrappedCallback, extra);\n }\n var names = name.toLowerCase().split(' ');\n var i = names.length;\n while (i--) {\n var currentName = names[i];\n var handlers = this.bindings[currentName];\n if (!handlers) {\n handlers = [];\n this.toggleEvent(currentName, true);\n }\n if (prepend) {\n handlers = __spreadArray([wrappedCallback], handlers, true);\n } else {\n handlers = __spreadArray(__spreadArray([], handlers, true), [wrappedCallback], false);\n }\n this.bindings[currentName] = handlers;\n }\n }\n return this;\n };\n EventDispatcher.prototype.off = function (name, callback) {\n var _this = this;\n if (name) {\n var names = name.toLowerCase().split(' ');\n var i = names.length;\n while (i--) {\n var currentName = names[i];\n var handlers = this.bindings[currentName];\n if (!currentName) {\n each$j(this.bindings, function (_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 var filteredHandlers = partition(handlers, function (handler) {\n return handler.func === callback;\n });\n handlers = filteredHandlers.fail;\n this.bindings[currentName] = handlers;\n each$k(filteredHandlers.pass, function (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$j(this.bindings, function (_value, name) {\n _this.toggleEvent(name, false);\n });\n this.bindings = {};\n }\n return this;\n };\n EventDispatcher.prototype.once = function (name, callback, prepend) {\n return this.on(name, callback, prepend, { once: true });\n };\n EventDispatcher.prototype.has = function (name) {\n name = name.toLowerCase();\n return !(!this.bindings[name] || this.bindings[name].length === 0);\n };\n return EventDispatcher;\n }();\n\n var getEventDispatcher = function (obj) {\n if (!obj._eventDispatcher) {\n obj._eventDispatcher = new EventDispatcher({\n scope: obj,\n toggleEvent: function (name, state) {\n if (EventDispatcher.isNative(name) && obj.toggleNativeEvent) {\n obj.toggleNativeEvent(name, state);\n }\n }\n });\n }\n return obj._eventDispatcher;\n };\n var Observable = {\n fire: function (name, args, bubble) {\n var self = this;\n if (self.removed && name !== 'remove' && name !== 'detach') {\n return args;\n }\n var dispatcherArgs = getEventDispatcher(self).fire(name, args);\n if (bubble !== false && self.parent) {\n var parent_1 = self.parent();\n while (parent_1 && !dispatcherArgs.isPropagationStopped()) {\n parent_1.fire(name, dispatcherArgs, false);\n parent_1 = parent_1.parent();\n }\n }\n return dispatcherArgs;\n },\n on: function (name, callback, prepend) {\n return getEventDispatcher(this).on(name, callback, prepend);\n },\n off: function (name, callback) {\n return getEventDispatcher(this).off(name, callback);\n },\n once: function (name, callback) {\n return getEventDispatcher(this).once(name, callback);\n },\n hasEventListeners: function (name) {\n return getEventDispatcher(this).has(name);\n }\n };\n\n var DOM$2 = DOMUtils.DOM;\n var customEventRootDelegates;\n var getEventTarget = function (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 var 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 var isListening = function (editor) {\n return !editor.hidden && !isReadOnly(editor);\n };\n var fireEvent = function (editor, eventName, e) {\n if (isListening(editor)) {\n editor.fire(eventName, e);\n } else if (isReadOnly(editor)) {\n processReadonlyEvents(editor, e);\n }\n };\n var bindEventDelegate = function (editor, eventName) {\n var delegate;\n if (!editor.delegates) {\n editor.delegates = {};\n }\n if (editor.delegates[eventName] || editor.removed) {\n return;\n }\n var eventRootElm = getEventTarget(editor, eventName);\n if (getEventRoot(editor)) {\n if (!customEventRootDelegates) {\n customEventRootDelegates = {};\n editor.editorManager.on('removeEditor', function () {\n if (!editor.editorManager.activeEditor) {\n if (customEventRootDelegates) {\n each$j(customEventRootDelegates, function (_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 delegate = function (e) {\n var target = e.target;\n var editors = editor.editorManager.get();\n var i = editors.length;\n while (i--) {\n var 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 delegate = function (e) {\n fireEvent(editor, eventName, e);\n };\n DOM$2.bind(eventRootElm, eventName, delegate);\n editor.delegates[eventName] = delegate;\n }\n };\n var EditorObservable = __assign(__assign({}, Observable), {\n bindPendingEventDelegates: function () {\n var self = this;\n Tools.each(self._pendingNativeEvents, function (name) {\n bindEventDelegate(self, name);\n });\n },\n toggleNativeEvent: function (name, state) {\n var 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) {\n self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);\n delete self.delegates[name];\n }\n },\n unbindAllNativeEvents: function () {\n var self = this;\n var body = self.getBody();\n var dom = self.dom;\n if (self.delegates) {\n each$j(self.delegates, function (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 var defaultModes = [\n 'design',\n 'readonly'\n ];\n var switchToMode = function (editor, activeMode, availableModes, mode) {\n var oldMode = availableModes[activeMode.get()];\n var 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 var setMode = function (editor, availableModes, activeMode, mode) {\n if (mode === activeMode.get()) {\n return;\n } else if (!has$2(availableModes, mode)) {\n throw new Error('Editor mode \\'' + mode + '\\' is invalid');\n }\n if (editor.initialized) {\n switchToMode(editor, activeMode, availableModes, mode);\n } else {\n editor.on('init', function () {\n return switchToMode(editor, activeMode, availableModes, mode);\n });\n }\n };\n var registerMode = function (availableModes, mode, api) {\n var _a;\n if (contains$3(defaultModes, mode)) {\n throw new Error('Cannot override default mode ' + mode);\n }\n return __assign(__assign({}, availableModes), (_a = {}, _a[mode] = __assign(__assign({}, api), {\n deactivate: function () {\n try {\n api.deactivate();\n } catch (e) {\n console.error('problem while deactivating editor mode ' + mode + ':', e);\n }\n }\n }), _a));\n };\n\n var create$4 = function (editor) {\n var activeMode = Cell('design');\n var availableModes = Cell({\n design: {\n activate: noop,\n deactivate: noop,\n editorReadOnly: false\n },\n readonly: {\n activate: noop,\n deactivate: noop,\n editorReadOnly: true\n }\n });\n registerReadOnlyContentFilters(editor);\n registerReadOnlySelectionBlockers(editor);\n return {\n isReadOnly: function () {\n return isReadOnly(editor);\n },\n set: function (mode) {\n return setMode(editor, availableModes.get(), activeMode, mode);\n },\n get: function () {\n return activeMode.get();\n },\n register: function (mode, api) {\n availableModes.set(registerMode(availableModes.get(), mode, api));\n }\n };\n };\n\n var each$3 = Tools.each, explode$1 = Tools.explode;\n var 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 var modifierNames = Tools.makeMap('alt,ctrl,shift,meta,access');\n var parseShortcut = function (pattern) {\n var key;\n var shortcut = {};\n each$3(explode$1(pattern.toLowerCase(), '+'), function (value) {\n if (value in modifierNames) {\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 var id = [shortcut.keyCode];\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 (Env.mac) {\n shortcut.ctrl = true;\n } else {\n shortcut.shift = true;\n }\n }\n if (shortcut.meta) {\n if (Env.mac) {\n shortcut.meta = true;\n } else {\n shortcut.ctrl = true;\n shortcut.meta = false;\n }\n }\n return shortcut;\n };\n var Shortcuts = function () {\n function Shortcuts(editor) {\n this.shortcuts = {};\n this.pendingPatterns = [];\n this.editor = editor;\n var self = this;\n editor.on('keyup keypress keydown', function (e) {\n if ((self.hasModifier(e) || self.isFunctionKey(e)) && !e.isDefaultPrevented()) {\n each$3(self.shortcuts, function (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 return true;\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 Shortcuts.prototype.add = function (pattern, desc, cmdFunc, scope) {\n var self = this;\n var func = self.normalizeCommandFunc(cmdFunc);\n each$3(explode$1(Tools.trim(pattern)), function (pattern) {\n var shortcut = self.createShortcut(pattern, desc, func, scope);\n self.shortcuts[shortcut.id] = shortcut;\n });\n return true;\n };\n Shortcuts.prototype.remove = function (pattern) {\n var 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 Shortcuts.prototype.normalizeCommandFunc = function (cmdFunc) {\n var self = this;\n var cmd = cmdFunc;\n if (typeof cmd === 'string') {\n return function () {\n self.editor.execCommand(cmd, false, null);\n };\n } else if (Tools.isArray(cmd)) {\n return function () {\n self.editor.execCommand(cmd[0], cmd[1], cmd[2]);\n };\n } else {\n return cmd;\n }\n };\n Shortcuts.prototype.createShortcut = function (pattern, desc, cmdFunc, scope) {\n var shortcuts = Tools.map(explode$1(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 Shortcuts.prototype.hasModifier = function (e) {\n return e.altKey || e.ctrlKey || e.metaKey;\n };\n Shortcuts.prototype.isFunctionKey = function (e) {\n return e.type === 'keydown' && e.keyCode >= 112 && e.keyCode <= 123;\n };\n Shortcuts.prototype.matchShortcut = function (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 Shortcuts.prototype.executeShortcutAction = function (shortcut) {\n return shortcut.func ? shortcut.func.call(shortcut.scope) : null;\n };\n return Shortcuts;\n }();\n\n var create$3 = function () {\n var buttons = {};\n var menuItems = {};\n var popups = {};\n var icons = {};\n var contextMenus = {};\n var contextToolbars = {};\n var sidebars = {};\n var add = function (collection, type) {\n return function (name, spec) {\n return collection[name.toLowerCase()] = __assign(__assign({}, spec), { type: type });\n };\n };\n var addIcon = function (name, svgData) {\n return icons[name.toLowerCase()] = svgData;\n };\n return {\n addButton: add(buttons, 'button'),\n addGroupToolbarButton: add(buttons, 'grouptoolbarbutton'),\n addToggleButton: add(buttons, 'togglebutton'),\n addMenuButton: add(buttons, 'menubutton'),\n addSplitButton: add(buttons, 'splitbutton'),\n addMenuItem: add(menuItems, 'menuitem'),\n addNestedMenuItem: add(menuItems, 'nestedmenuitem'),\n addToggleMenuItem: add(menuItems, 'togglemenuitem'),\n addAutocompleter: add(popups, 'autocompleter'),\n addContextMenu: add(contextMenus, 'contextmenu'),\n addContextToolbar: add(contextToolbars, 'contexttoolbar'),\n addContextForm: add(contextToolbars, 'contextform'),\n addSidebar: add(sidebars, 'sidebar'),\n addIcon: addIcon,\n getAll: function () {\n return {\n buttons: buttons,\n menuItems: menuItems,\n icons: icons,\n popups: popups,\n contextMenus: contextMenus,\n contextToolbars: contextToolbars,\n sidebars: sidebars\n };\n }\n };\n };\n\n var registry = function () {\n var 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 getAll: bridge.getAll\n };\n };\n\n var DOM$1 = DOMUtils.DOM;\n var extend$3 = Tools.extend, each$2 = Tools.each;\n var resolve = Tools.resolve;\n var ie = Env.ie;\n var Editor = function () {\n function Editor(id, settings, editorManager) {\n var _this = this;\n this.plugins = {};\n this.contentCSS = [];\n this.contentStyles = [];\n this.loadedCSS = {};\n this.isNotDirty = false;\n this.editorManager = editorManager;\n this.documentBaseUrl = editorManager.documentBaseURL;\n extend$3(this, EditorObservable);\n this.settings = getEditorSettings(this, id, this.documentBaseUrl, editorManager.defaultSettings, settings);\n if (this.settings.suffix) {\n editorManager.suffix = this.settings.suffix;\n }\n this.suffix = editorManager.suffix;\n if (this.settings.base_url) {\n editorManager._setBaseUrl(this.settings.base_url);\n }\n this.baseUri = editorManager.baseURI;\n if (this.settings.referrer_policy) {\n ScriptLoader.ScriptLoader._setReferrerPolicy(this.settings.referrer_policy);\n DOMUtils.DOM.styleSheetLoader._setReferrerPolicy(this.settings.referrer_policy);\n }\n AddOnManager.languageLoad = this.settings.language_load;\n AddOnManager.baseURL = editorManager.baseURL;\n this.id = id;\n this.setDirty(false);\n this.documentBaseURI = new URI(this.settings.document_base_url, { base_uri: this.baseUri });\n this.baseURI = this.baseUri;\n this.inline = !!this.settings.inline;\n this.shortcuts = new Shortcuts(this);\n this.editorCommands = new EditorCommands(this);\n if (this.settings.cache_suffix) {\n Env.cacheSuffix = this.settings.cache_suffix.replace(/^[\\?\\&]+/, '');\n }\n this.ui = {\n registry: registry(),\n styleSheetLoader: undefined,\n show: noop,\n hide: noop,\n enable: noop,\n disable: noop,\n isDisabled: never\n };\n var self = this;\n var modeInstance = create$4(self);\n this.mode = modeInstance;\n this.setMode = modeInstance.set;\n editorManager.fire('SetupEditor', { editor: this });\n this.execCallback('setup', this);\n this.$ = DomQuery.overrideDefaults(function () {\n return {\n context: _this.inline ? _this.getBody() : _this.getDoc(),\n element: _this.getBody()\n };\n });\n }\n Editor.prototype.render = function () {\n render(this);\n };\n Editor.prototype.focus = function (skipFocus) {\n this.execCommand('mceFocus', false, skipFocus);\n };\n Editor.prototype.hasFocus = function () {\n return hasFocus(this);\n };\n Editor.prototype.execCallback = function (name) {\n var x = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n x[_i - 1] = arguments[_i];\n }\n var self = this;\n var callback = self.settings[name], scope;\n if (!callback) {\n return;\n }\n if (self.callbackLookup && (scope = self.callbackLookup[name])) {\n callback = scope.func;\n scope = scope.scope;\n }\n if (typeof callback === 'string') {\n scope = callback.replace(/\\.\\w+$/, '');\n scope = scope ? resolve(scope) : 0;\n callback = resolve(callback);\n self.callbackLookup = self.callbackLookup || {};\n self.callbackLookup[name] = {\n func: callback,\n scope: scope\n };\n }\n return callback.apply(scope || self, x);\n };\n Editor.prototype.translate = function (text) {\n return I18n.translate(text);\n };\n Editor.prototype.getParam = function (name, defaultVal, type) {\n return getParam(this, name, defaultVal, type);\n };\n Editor.prototype.hasPlugin = function (name, loaded) {\n var hasPlugin = contains$3(getPlugins(this).split(/[ ,]/), name);\n if (hasPlugin) {\n return loaded ? PluginManager.get(name) !== undefined : true;\n } else {\n return false;\n }\n };\n Editor.prototype.nodeChanged = function (args) {\n this._nodeChangeDispatcher.nodeChanged(args);\n };\n Editor.prototype.addCommand = function (name, callback, scope) {\n this.editorCommands.addCommand(name, callback, scope);\n };\n Editor.prototype.addQueryStateHandler = function (name, callback, scope) {\n this.editorCommands.addQueryStateHandler(name, callback, scope);\n };\n Editor.prototype.addQueryValueHandler = function (name, callback, scope) {\n this.editorCommands.addQueryValueHandler(name, callback, scope);\n };\n Editor.prototype.addShortcut = function (pattern, desc, cmdFunc, scope) {\n this.shortcuts.add(pattern, desc, cmdFunc, scope);\n };\n Editor.prototype.execCommand = function (cmd, ui, value, args) {\n return this.editorCommands.execCommand(cmd, ui, value, args);\n };\n Editor.prototype.queryCommandState = function (cmd) {\n return this.editorCommands.queryCommandState(cmd);\n };\n Editor.prototype.queryCommandValue = function (cmd) {\n return this.editorCommands.queryCommandValue(cmd);\n };\n Editor.prototype.queryCommandSupported = function (cmd) {\n return this.editorCommands.queryCommandSupported(cmd);\n };\n Editor.prototype.show = function () {\n var 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.fire('show');\n }\n };\n Editor.prototype.hide = function () {\n var self = this, doc = self.getDoc();\n if (!self.hidden) {\n if (ie && doc && !self.inline) {\n doc.execCommand('SelectAll');\n }\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.fire('hide');\n }\n };\n Editor.prototype.isHidden = function () {\n return !!this.hidden;\n };\n Editor.prototype.setProgressState = function (state, time) {\n this.fire('ProgressState', {\n state: state,\n time: time\n });\n };\n Editor.prototype.load = function (args) {\n var self = this;\n var elm = self.getElement(), html;\n if (self.removed) {\n return '';\n }\n if (elm) {\n args = args || {};\n args.load = true;\n var value = isTextareaOrInput(elm) ? elm.value : elm.innerHTML;\n html = self.setContent(value, args);\n args.element = elm;\n if (!args.no_events) {\n self.fire('LoadContent', args);\n }\n args.element = elm = null;\n return html;\n }\n };\n Editor.prototype.save = function (args) {\n var self = this;\n var elm = self.getElement(), html, form;\n if (!elm || !self.initialized || self.removed) {\n return;\n }\n args = args || {};\n args.save = true;\n args.element = elm;\n html = args.content = self.getContent(args);\n if (!args.no_events) {\n self.fire('SaveContent', args);\n }\n if (args.format === 'raw') {\n self.fire('RawSaveContent', args);\n }\n html = args.content;\n if (!isTextareaOrInput(elm)) {\n if (args.is_removing || !self.inline) {\n elm.innerHTML = html;\n }\n if (form = DOM$1.getParent(self.id, 'form')) {\n each$2(form.elements, function (elm) {\n if (elm.name === self.id) {\n elm.value = html;\n return false;\n }\n });\n }\n } else {\n elm.value = html;\n }\n args.element = elm = null;\n if (args.set_dirty !== false) {\n self.setDirty(false);\n }\n return html;\n };\n Editor.prototype.setContent = function (content, args) {\n return setContent(this, content, args);\n };\n Editor.prototype.getContent = function (args) {\n return getContent(this, args);\n };\n Editor.prototype.insertContent = function (content, args) {\n if (args) {\n content = extend$3({ content: content }, args);\n }\n this.execCommand('mceInsertContent', false, content);\n };\n Editor.prototype.resetContent = function (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 Editor.prototype.isDirty = function () {\n return !this.isNotDirty;\n };\n Editor.prototype.setDirty = function (state) {\n var oldState = !this.isNotDirty;\n this.isNotDirty = !state;\n if (state && state !== oldState) {\n this.fire('dirty');\n }\n };\n Editor.prototype.getContainer = function () {\n var self = this;\n if (!self.container) {\n self.container = DOM$1.get(self.editorContainer || self.id + '_parent');\n }\n return self.container;\n };\n Editor.prototype.getContentAreaContainer = function () {\n return this.contentAreaContainer;\n };\n Editor.prototype.getElement = function () {\n if (!this.targetElm) {\n this.targetElm = DOM$1.get(this.id);\n }\n return this.targetElm;\n };\n Editor.prototype.getWin = function () {\n var self = this;\n var elm;\n if (!self.contentWindow) {\n elm = self.iframeElement;\n if (elm) {\n self.contentWindow = elm.contentWindow;\n }\n }\n return self.contentWindow;\n };\n Editor.prototype.getDoc = function () {\n var self = this;\n var win;\n if (!self.contentDocument) {\n win = self.getWin();\n if (win) {\n self.contentDocument = win.document;\n }\n }\n return self.contentDocument;\n };\n Editor.prototype.getBody = function () {\n var doc = this.getDoc();\n return this.bodyElement || (doc ? doc.body : null);\n };\n Editor.prototype.convertURL = function (url, name, elm) {\n var self = this, settings = self.settings;\n if (settings.urlconverter_callback) {\n return self.execCallback('urlconverter_callback', url, elm, true, name);\n }\n if (!settings.convert_urls || elm && elm.nodeName === 'LINK' || url.indexOf('file:') === 0 || url.length === 0) {\n return url;\n }\n if (settings.relative_urls) {\n return self.documentBaseURI.toRelative(url);\n }\n url = self.documentBaseURI.toAbsolute(url, settings.remove_script_host);\n return url;\n };\n Editor.prototype.addVisual = function (elm) {\n addVisual(this, elm);\n };\n Editor.prototype.remove = function () {\n remove(this);\n };\n Editor.prototype.destroy = function (automatic) {\n destroy(this, automatic);\n };\n Editor.prototype.uploadImages = function (callback) {\n return this.editorUpload.uploadImages(callback);\n };\n Editor.prototype._scanForImages = function () {\n return this.editorUpload.scanForImages();\n };\n Editor.prototype.addButton = function () {\n throw new Error('editor.addButton has been removed in tinymce 5x, use editor.ui.registry.addButton or editor.ui.registry.addToggleButton or editor.ui.registry.addSplitButton instead');\n };\n Editor.prototype.addSidebar = function () {\n throw new Error('editor.addSidebar has been removed in tinymce 5x, use editor.ui.registry.addSidebar instead');\n };\n Editor.prototype.addMenuItem = function () {\n throw new Error('editor.addMenuItem has been removed in tinymce 5x, use editor.ui.registry.addMenuItem instead');\n };\n Editor.prototype.addContextToolbar = function () {\n throw new Error('editor.addContextToolbar has been removed in tinymce 5x, use editor.ui.registry.addContextToolbar instead');\n };\n return Editor;\n }();\n\n var DOM = DOMUtils.DOM;\n var explode = Tools.explode, each$1 = Tools.each, extend$2 = Tools.extend;\n var instanceCounter = 0, boundGlobalEvents = false;\n var beforeUnloadDelegate;\n var legacyEditors = [];\n var editors = [];\n var isValidLegacyKey = function (id) {\n return id !== 'length';\n };\n var globalEventDelegate = function (e) {\n var type = e.type;\n each$1(EditorManager.get(), function (editor) {\n switch (type) {\n case 'scroll':\n editor.fire('ScrollWindow', e);\n break;\n case 'resize':\n editor.fire('ResizeWindow', e);\n break;\n }\n });\n };\n var toggleGlobalEvents = function (state) {\n if (state !== boundGlobalEvents) {\n if (state) {\n DomQuery(window).on('resize scroll', globalEventDelegate);\n } else {\n DomQuery(window).off('resize scroll', globalEventDelegate);\n }\n boundGlobalEvents = state;\n }\n };\n var removeEditorFromList = function (targetEditor) {\n var oldEditors = editors;\n delete legacyEditors[targetEditor.id];\n for (var i = 0; i < legacyEditors.length; i++) {\n if (legacyEditors[i] === targetEditor) {\n legacyEditors.splice(i, 1);\n break;\n }\n }\n editors = filter$4(editors, function (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 var purgeDestroyedEditor = function (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 editor = null;\n }\n return editor;\n };\n var isQuirksMode = document.compatMode !== 'CSS1Compat';\n var EditorManager = __assign(__assign({}, Observable), {\n baseURI: null,\n baseURL: null,\n defaultSettings: {},\n documentBaseURL: null,\n suffix: null,\n $: DomQuery,\n majorVersion: '5',\n minorVersion: '10.7',\n releaseDate: '2022-12-06',\n editors: legacyEditors,\n i18n: I18n,\n activeEditor: null,\n focusedEditor: null,\n settings: {},\n setup: function () {\n var self = this;\n var baseURL, documentBaseURL, suffix = '';\n documentBaseURL = URI.getDocumentBaseUrl(document.location);\n if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(documentBaseURL)) {\n documentBaseURL = documentBaseURL.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n if (!/[\\/\\\\]$/.test(documentBaseURL)) {\n documentBaseURL += '/';\n }\n }\n var preInit = window.tinymce || window.tinyMCEPreInit;\n if (preInit) {\n baseURL = preInit.base || preInit.baseURL;\n suffix = preInit.suffix;\n } else {\n var scripts = document.getElementsByTagName('script');\n for (var i = 0; i < scripts.length; i++) {\n var src = scripts[i].src || '';\n if (src === '') {\n continue;\n }\n var 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 var 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$l(self);\n },\n overrideDefaults: function (defaultSettings) {\n var baseUrl = defaultSettings.base_url;\n if (baseUrl) {\n this._setBaseUrl(baseUrl);\n }\n var suffix = defaultSettings.suffix;\n if (defaultSettings.suffix) {\n this.suffix = suffix;\n }\n this.defaultSettings = defaultSettings;\n var pluginBaseUrls = defaultSettings.plugin_base_urls;\n if (pluginBaseUrls !== undefined) {\n each$j(pluginBaseUrls, function (pluginBaseUrl, pluginName) {\n AddOnManager.PluginManager.urls[pluginName] = pluginBaseUrl;\n });\n }\n },\n init: function (settings) {\n var self = this;\n var result;\n var 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 var isInvalidInlineTarget = function (settings, elm) {\n return settings.inline && elm.tagName.toLowerCase() in invalidInlineTargets;\n };\n var createId = function (elm) {\n var id = elm.id;\n if (!id) {\n id = get$9(elm, 'name').filter(function (name) {\n return !DOM.get(name);\n }).getOrThunk(DOM.uniqueId);\n elm.setAttribute('id', id);\n }\n return id;\n };\n var execCallback = function (name) {\n var callback = settings[name];\n if (!callback) {\n return;\n }\n return callback.apply(self, []);\n };\n var hasClass = function (elm, className) {\n return className.constructor === RegExp ? className.test(elm.className) : DOM.hasClass(elm, className);\n };\n var findTargets = function (settings) {\n var targets = [];\n if (Env.browser.isIE() && Env.browser.version.major < 11) {\n initError('TinyMCE does not support the browser you are using. For a list of supported' + ' browsers please see: https://www.tinymce.com/docs/get-started/system-requirements/');\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 }\n if (settings.types) {\n each$1(settings.types, function (type) {\n targets = targets.concat(DOM.select(type.selector));\n });\n return targets;\n } else if (settings.selector) {\n return DOM.select(settings.selector);\n } else if (settings.target) {\n return [settings.target];\n }\n switch (settings.mode) {\n case 'exact':\n var l = settings.elements || '';\n if (l.length > 0) {\n each$1(explode(l), function (id) {\n var elm = DOM.get(id);\n if (elm) {\n targets.push(elm);\n } else {\n each$1(document.forms, function (f) {\n each$1(f.elements, function (e) {\n if (e.name === id) {\n id = 'mce_editor_' + instanceCounter++;\n DOM.setAttrib(e, 'id', id);\n targets.push(e);\n }\n });\n });\n }\n });\n }\n break;\n case 'textareas':\n case 'specific_textareas':\n each$1(DOM.select('textarea'), function (elm) {\n if (settings.editor_deselector && hasClass(elm, settings.editor_deselector)) {\n return;\n }\n if (!settings.editor_selector || hasClass(elm, settings.editor_selector)) {\n targets.push(elm);\n }\n });\n break;\n }\n return targets;\n };\n var provideResults = function (editors) {\n result = editors;\n };\n var initEditors = function () {\n var initCount = 0;\n var editors = [];\n var targets;\n var createEditor = function (id, settings, targetElm) {\n var editor = new Editor(id, settings, self);\n editors.push(editor);\n editor.on('init', function () {\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 = DomQuery.unique(findTargets(settings));\n if (settings.types) {\n each$1(settings.types, function (type) {\n Tools.each(targets, function (elm) {\n if (DOM.is(elm, type.selector)) {\n createEditor(createId(elm), extend$2({}, settings, type), elm);\n return false;\n }\n return true;\n });\n });\n return;\n }\n Tools.each(targets, function (elm) {\n purgeDestroyedEditor(self.get(elm.id));\n });\n targets = Tools.grep(targets, function (elm) {\n return !self.get(elm.id);\n });\n if (targets.length === 0) {\n provideResults([]);\n } else {\n each$1(targets, function (elm) {\n if (isInvalidInlineTarget(settings, elm)) {\n initError('Could not initialize inline editor on invalid inline target element', elm);\n } else {\n createEditor(createId(elm), settings, elm);\n }\n });\n }\n };\n self.settings = settings;\n DOM.bind(window, 'ready', initEditors);\n return new promiseObj(function (resolve) {\n if (result) {\n resolve(result);\n } else {\n provideResults = function (editors) {\n resolve(editors);\n };\n }\n });\n },\n get: function (id) {\n if (arguments.length === 0) {\n return editors.slice(0);\n } else if (isString$1(id)) {\n return find$3(editors, function (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: function (editor) {\n var self = this;\n var existingEditor = legacyEditors[editor.id];\n if (existingEditor === editor) {\n return editor;\n }\n if (self.get(editor.id) === null) {\n if (isValidLegacyKey(editor.id)) {\n legacyEditors[editor.id] = editor;\n }\n legacyEditors.push(editor);\n editors.push(editor);\n }\n toggleGlobalEvents(true);\n self.activeEditor = editor;\n self.fire('AddEditor', { editor: editor });\n if (!beforeUnloadDelegate) {\n beforeUnloadDelegate = function (e) {\n var event = self.fire('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: function (id, settings) {\n return this.add(new Editor(id, settings, this));\n },\n remove: function (selector) {\n var self = this;\n var i, editor;\n if (!selector) {\n for (i = editors.length - 1; i >= 0; i--) {\n self.remove(editors[i]);\n }\n return;\n }\n if (isString$1(selector)) {\n each$1(DOM.select(selector), function (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.fire('RemoveEditor', { editor: 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: function (cmd, ui, value) {\n var self = this, editor = self.get(value);\n switch (cmd) {\n case 'mceAddEditor':\n if (!self.get(value)) {\n new Editor(value, self.settings, self).render();\n }\n return true;\n case 'mceRemoveEditor':\n if (editor) {\n editor.remove();\n }\n return true;\n case 'mceToggleEditor':\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 if (self.activeEditor) {\n return self.activeEditor.execCommand(cmd, ui, value);\n }\n return false;\n },\n triggerSave: function () {\n each$1(editors, function (editor) {\n editor.save();\n });\n },\n addI18n: function (code, items) {\n I18n.add(code, items);\n },\n translate: function (text) {\n return I18n.translate(text);\n },\n setActive: function (editor) {\n var activeEditor = this.activeEditor;\n if (this.activeEditor !== editor) {\n if (activeEditor) {\n activeEditor.fire('deactivate', { relatedTarget: editor });\n }\n editor.fire('activate', { relatedTarget: activeEditor });\n }\n this.activeEditor = editor;\n },\n _setBaseUrl: function (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 var min$1 = Math.min, max$1 = Math.max, round$1 = Math.round;\n var relativePosition = function (rect, targetRect, rel) {\n var x = targetRect.x;\n var y = targetRect.y;\n var w = rect.w;\n var h = rect.h;\n var targetW = targetRect.w;\n var targetH = targetRect.h;\n var 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$1(targetH / 2);\n }\n if (relChars[1] === 'c') {\n x += round$1(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$1(h / 2);\n }\n if (relChars[4] === 'c') {\n x -= round$1(w / 2);\n }\n return create$2(x, y, w, h);\n };\n var findBestRelativePosition = function (rect, targetRect, constrainRect, rels) {\n var pos, i;\n for (i = 0; i < rels.length; i++) {\n 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 var inflate = function (rect, w, h) {\n return create$2(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2);\n };\n var intersect = function (rect, cropRect) {\n var x1 = max$1(rect.x, cropRect.x);\n var y1 = max$1(rect.y, cropRect.y);\n var x2 = min$1(rect.x + rect.w, cropRect.x + cropRect.w);\n var y2 = min$1(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 var clamp = function (rect, clampRect, fixedSize) {\n var x1 = rect.x;\n var y1 = rect.y;\n var x2 = rect.x + rect.w;\n var y2 = rect.y + rect.h;\n var cx2 = clampRect.x + clampRect.w;\n var cy2 = clampRect.y + clampRect.h;\n var underflowX1 = max$1(0, clampRect.x - x1);\n var underflowY1 = max$1(0, clampRect.y - y1);\n var overflowX2 = max$1(0, x2 - cx2);\n var overflowY2 = max$1(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 var create$2 = function (x, y, w, h) {\n return {\n x: x,\n y: y,\n w: w,\n h: h\n };\n };\n var fromClientRect = function (clientRect) {\n return create$2(clientRect.left, clientRect.top, clientRect.width, clientRect.height);\n };\n var Rect = {\n inflate: inflate,\n relativePosition: relativePosition,\n findBestRelativePosition: findBestRelativePosition,\n intersect: intersect,\n clamp: clamp,\n create: create$2,\n fromClientRect: fromClientRect\n };\n\n var awaiter = function (resolveCb, rejectCb, timeout) {\n if (timeout === void 0) {\n timeout = 1000;\n }\n var done = false;\n var timer = null;\n var complete = function (completer) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\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 };\n var resolve = complete(resolveCb);\n var reject = complete(rejectCb);\n var start = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!done && timer === null) {\n timer = setTimeout(function () {\n return reject.apply(null, args);\n }, timeout);\n }\n };\n return {\n start: start,\n resolve: resolve,\n reject: reject\n };\n };\n var create$1 = function () {\n var tasks = {};\n var resultFns = {};\n var load = function (id, url) {\n var loadErrMsg = 'Script at URL \"' + url + '\" failed to load';\n var 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 var task = new promiseObj(function (resolve, reject) {\n var waiter = awaiter(resolve, reject);\n resultFns[id] = waiter.resolve;\n ScriptLoader.ScriptLoader.loadScript(url, function () {\n return waiter.start(runErrMsg);\n }, function () {\n return waiter.reject(loadErrMsg);\n });\n });\n tasks[id] = task;\n return task;\n }\n };\n var add = function (id, data) {\n if (resultFns[id] !== undefined) {\n resultFns[id](data);\n delete resultFns[id];\n }\n tasks[id] = promiseObj.resolve(data);\n };\n return {\n load: load,\n add: add\n };\n };\n var Resource = create$1();\n\n var each = Tools.each, extend$1 = Tools.extend;\n var extendClass, initializing;\n var Class = function () {\n };\n Class.extend = extendClass = function (props) {\n var self = this;\n var _super = self.prototype;\n var Class = function () {\n var i, mixins, mixin;\n var self = this;\n if (!initializing) {\n if (self.init) {\n self.init.apply(self, arguments);\n }\n mixins = self.Mixins;\n if (mixins) {\n i = mixins.length;\n while (i--) {\n mixin = mixins[i];\n if (mixin.init) {\n mixin.init.apply(self, arguments);\n }\n }\n }\n }\n };\n var dummy = function () {\n return this;\n };\n var createMethod = function (name, fn) {\n return function () {\n var self = this;\n var tmp = self._super;\n self._super = _super[name];\n var ret = fn.apply(self, arguments);\n self._super = tmp;\n return ret;\n };\n };\n initializing = true;\n var prototype = new self();\n initializing = false;\n if (props.Mixins) {\n each(props.Mixins, function (mixin) {\n for (var name_1 in mixin) {\n if (name_1 !== 'init') {\n props[name_1] = mixin[name_1];\n }\n }\n });\n if (_super.Mixins) {\n props.Mixins = _super.Mixins.concat(props.Mixins);\n }\n }\n if (props.Methods) {\n each(props.Methods.split(','), function (name) {\n props[name] = dummy;\n });\n }\n if (props.Properties) {\n each(props.Properties.split(','), function (name) {\n var fieldName = '_' + name;\n props[name] = function (value) {\n var self = this;\n if (value !== undefined) {\n self[fieldName] = value;\n return self;\n }\n return self[fieldName];\n };\n });\n }\n if (props.Statics) {\n each(props.Statics, function (func, name) {\n Class[name] = func;\n });\n }\n if (props.Defaults && _super.Defaults) {\n props.Defaults = extend$1({}, _super.Defaults, props.Defaults);\n }\n each$j(props, function (member, name) {\n if (typeof member === 'function' && _super[name]) {\n prototype[name] = createMethod(name, member);\n } else {\n prototype[name] = member;\n }\n });\n Class.prototype = prototype;\n Class.constructor = Class;\n Class.extend = extendClass;\n return Class;\n };\n\n var min = Math.min, max = Math.max, round = Math.round;\n var Color = function (value) {\n var self = {};\n var r = 0, g = 0, b = 0;\n var rgb2hsv = function (r, g, b) {\n var h, s, v;\n h = 0;\n s = 0;\n v = 0;\n r = r / 255;\n g = g / 255;\n b = b / 255;\n var minRGB = min(r, min(g, b));\n var maxRGB = max(r, max(g, b));\n if (minRGB === maxRGB) {\n v = minRGB;\n return {\n h: 0,\n s: 0,\n v: v * 100\n };\n }\n var 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 {\n h: round(h),\n s: round(s * 100),\n v: round(v * 100)\n };\n };\n var hsvToRgb = function (hue, saturation, brightness) {\n hue = (parseInt(hue, 10) || 0) % 360;\n saturation = parseInt(saturation, 10) / 100;\n brightness = parseInt(brightness, 10) / 100;\n saturation = max(0, min(saturation, 1));\n brightness = max(0, min(brightness, 1));\n if (saturation === 0) {\n r = g = b = round(255 * brightness);\n return;\n }\n var side = hue / 60;\n var chroma = brightness * saturation;\n var x = chroma * (1 - Math.abs(side % 2 - 1));\n var 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(255 * (r + match));\n g = round(255 * (g + match));\n b = round(255 * (b + match));\n };\n var toHex = function () {\n var hex = function (val) {\n val = parseInt(val, 10).toString(16);\n return val.length > 1 ? val : '0' + val;\n };\n return '#' + hex(r) + hex(g) + hex(b);\n };\n var toRgb = function () {\n return {\n r: r,\n g: g,\n b: b\n };\n };\n var toHsv = function () {\n return rgb2hsv(r, g, b);\n };\n var parse = function (value) {\n var matches;\n if (typeof value === 'object') {\n if ('r' in value) {\n r = value.r;\n g = value.g;\n b = value.b;\n } else if ('v' in value) {\n hsvToRgb(value.h, value.s, value.v);\n }\n } else {\n if (matches = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)[^\\)]*\\)/gi.exec(value)) {\n r = parseInt(matches[1], 10);\n g = parseInt(matches[2], 10);\n b = parseInt(matches[3], 10);\n } else if (matches = /#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(value)) {\n r = parseInt(matches[1], 16);\n g = parseInt(matches[2], 16);\n b = parseInt(matches[3], 16);\n } else if (matches = /#([0-F])([0-F])([0-F])/gi.exec(value)) {\n r = parseInt(matches[1] + matches[1], 16);\n g = parseInt(matches[2] + matches[2], 16);\n b = parseInt(matches[3] + matches[3], 16);\n }\n }\n r = r < 0 ? 0 : r > 255 ? 255 : r;\n g = g < 0 ? 0 : g > 255 ? 255 : g;\n b = b < 0 ? 0 : b > 255 ? 255 : b;\n return self;\n };\n if (value) {\n parse(value);\n }\n self.toRgb = toRgb;\n self.toHsv = toHsv;\n self.toHex = toHex;\n self.parse = parse;\n return self;\n };\n\n var serialize = function (obj) {\n var data = JSON.stringify(obj);\n if (!isString$1(data)) {\n return data;\n }\n return data.replace(/[\\u0080-\\uFFFF]/g, function (match) {\n var hexCode = match.charCodeAt(0).toString(16);\n return '\\\\u' + '0000'.substring(hexCode.length) + hexCode;\n });\n };\n var JSONUtils = {\n serialize: serialize,\n parse: function (text) {\n try {\n return JSON.parse(text);\n } catch (ex) {\n }\n }\n };\n\n var JSONP = {\n callbacks: {},\n count: 0,\n send: function (settings) {\n var self = this, dom = DOMUtils.DOM, count = settings.count !== undefined ? settings.count : self.count;\n var id = 'tinymce_jsonp_' + count;\n self.callbacks[count] = function (json) {\n dom.remove(id);\n delete self.callbacks[count];\n settings.callback(json);\n };\n dom.add(dom.doc.body, 'script', {\n id: id,\n src: settings.url,\n type: 'text/javascript'\n });\n self.count++;\n }\n };\n\n var XHR = __assign(__assign({}, Observable), {\n send: function (settings) {\n var xhr, count = 0;\n var ready = function () {\n if (!settings.async || xhr.readyState === 4 || count++ > 10000) {\n if (settings.success && count < 10000 && xhr.status === 200) {\n settings.success.call(settings.success_scope, '' + xhr.responseText, xhr, settings);\n } else if (settings.error) {\n settings.error.call(settings.error_scope, count > 10000 ? 'TIMED_OUT' : 'GENERAL', xhr, settings);\n }\n xhr = null;\n } else {\n Delay.setTimeout(ready, 10);\n }\n };\n settings.scope = settings.scope || this;\n settings.success_scope = settings.success_scope || settings.scope;\n settings.error_scope = settings.error_scope || settings.scope;\n settings.async = settings.async !== false;\n settings.data = settings.data || '';\n XHR.fire('beforeInitialize', { settings: settings });\n xhr = new XMLHttpRequest();\n if (xhr.overrideMimeType) {\n xhr.overrideMimeType(settings.content_type);\n }\n xhr.open(settings.type || (settings.data ? 'POST' : 'GET'), settings.url, settings.async);\n if (settings.crossDomain) {\n xhr.withCredentials = true;\n }\n if (settings.content_type) {\n xhr.setRequestHeader('Content-Type', settings.content_type);\n }\n if (settings.requestheaders) {\n Tools.each(settings.requestheaders, function (header) {\n xhr.setRequestHeader(header.key, header.value);\n });\n }\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr = XHR.fire('beforeSend', {\n xhr: xhr,\n settings: settings\n }).xhr;\n xhr.send(settings.data);\n if (!settings.async) {\n return ready();\n }\n Delay.setTimeout(ready, 10);\n }\n });\n\n var extend = Tools.extend;\n var JSONRequest = function () {\n function JSONRequest(settings) {\n this.settings = extend({}, settings);\n this.count = 0;\n }\n JSONRequest.sendRPC = function (o) {\n return new JSONRequest().send(o);\n };\n JSONRequest.prototype.send = function (args) {\n var ecb = args.error, scb = args.success;\n var xhrArgs = extend(this.settings, args);\n xhrArgs.success = function (c, x) {\n c = JSONUtils.parse(c);\n if (typeof c === 'undefined') {\n c = { error: 'JSON Parse error.' };\n }\n if (c.error) {\n ecb.call(xhrArgs.error_scope || xhrArgs.scope, c.error, x);\n } else {\n scb.call(xhrArgs.success_scope || xhrArgs.scope, c.result);\n }\n };\n xhrArgs.error = function (ty, x) {\n if (ecb) {\n ecb.call(xhrArgs.error_scope || xhrArgs.scope, ty, x);\n }\n };\n xhrArgs.data = JSONUtils.serialize({\n id: args.id || 'c' + this.count++,\n method: args.method,\n params: args.params\n });\n xhrArgs.content_type = 'application/json';\n XHR.send(xhrArgs);\n };\n return JSONRequest;\n }();\n\n var create = function () {\n return function () {\n var data = {};\n var keys = [];\n var storage = {\n getItem: function (key) {\n var item = data[key];\n return item ? item : null;\n },\n setItem: function (key, value) {\n keys.push(key);\n data[key] = String(value);\n },\n key: function (index) {\n return keys[index];\n },\n removeItem: function (key) {\n keys = keys.filter(function (k) {\n return k === key;\n });\n delete data[key];\n },\n clear: function () {\n keys = [];\n data = {};\n },\n length: 0\n };\n Object.defineProperty(storage, 'length', {\n get: function () {\n return keys.length;\n },\n configurable: false,\n enumerable: false\n });\n return storage;\n }();\n };\n\n var localStorage;\n try {\n var test = '__storage_test__';\n localStorage = window.localStorage;\n localStorage.setItem(test, test);\n localStorage.removeItem(test);\n } catch (e) {\n localStorage = create();\n }\n var LocalStorage = localStorage;\n\n var publicApi = {\n geom: { Rect: Rect },\n util: {\n Promise: promiseObj,\n Delay: Delay,\n Tools: Tools,\n VK: VK,\n URI: URI,\n Class: Class,\n EventDispatcher: EventDispatcher,\n Observable: Observable,\n I18n: I18n,\n XHR: XHR,\n JSON: JSONUtils,\n JSONRequest: JSONRequest,\n JSONP: JSONP,\n LocalStorage: LocalStorage,\n Color: Color,\n ImageUploader: ImageUploader\n },\n dom: {\n EventUtils: EventUtils,\n Sizzle: Sizzle,\n DomQuery: DomQuery,\n TreeWalker: DomTreeWalker,\n TextSeeker: TextSeeker,\n DOMUtils: DOMUtils,\n ScriptLoader: ScriptLoader,\n RangeUtils: RangeUtils,\n Serializer: DomSerializer,\n StyleSheetLoader: StyleSheetLoader,\n ControlSelection: ControlSelection,\n BookmarkManager: BookmarkManager,\n Selection: EditorSelection,\n Event: EventUtils.Event\n },\n html: {\n Styles: Styles,\n Entities: Entities,\n Node: AstNode,\n Schema: Schema,\n SaxParser: SaxParser,\n DomParser: DomParser,\n Writer: Writer,\n Serializer: HtmlSerializer\n },\n Env: Env,\n AddOnManager: AddOnManager,\n Annotator: Annotator,\n Formatter: Formatter,\n UndoManager: UndoManager,\n EditorCommands: EditorCommands,\n WindowManager: WindowManager,\n NotificationManager: NotificationManager,\n EditorObservable: EditorObservable,\n Shortcuts: Shortcuts,\n Editor: Editor,\n FocusManager: FocusManager,\n EditorManager: EditorManager,\n DOM: DOMUtils.DOM,\n ScriptLoader: ScriptLoader.ScriptLoader,\n PluginManager: PluginManager,\n ThemeManager: ThemeManager,\n IconManager: IconManager,\n Resource: Resource,\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 create: Tools.create,\n walk: Tools.walk,\n createNS: Tools.createNS,\n resolve: Tools.resolve,\n explode: Tools.explode,\n _addCacheSuffix: Tools._addCacheSuffix,\n isOpera: Env.opera,\n isWebKit: Env.webkit,\n isIE: Env.ie,\n isGecko: Env.gecko,\n isMac: Env.mac\n };\n var tinymce = Tools.extend(EditorManager, publicApi);\n\n var exportToModuleLoaders = function (tinymce) {\n if (typeof module === 'object') {\n try {\n module.exports = tinymce;\n } catch (_) {\n }\n }\n };\n var exportToWindowGlobal = function (tinymce) {\n window.tinymce = tinymce;\n window.tinyMCE = tinymce;\n };\n exportToWindowGlobal(tinymce);\n exportToModuleLoaders(tinymce);\n\n}());\n","/**\n * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n * Licensed under the LGPL or a commercial license.\n * For LGPL see License.txt in the project root for license information.\n * For commercial licenses see https://www.tiny.cloud/\n *\n * Version: 5.10.7 (2022-12-06)\n */\n(function () {\n 'use strict';\n\n var typeOf = function (x) {\n var t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n } else {\n return t;\n }\n };\n var isType$1 = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isSimpleType = function (type) {\n return function (value) {\n return typeof value === type;\n };\n };\n var eq$1 = function (t) {\n return function (a) {\n return t === a;\n };\n };\n var isString = isType$1('string');\n var isObject = isType$1('object');\n var isArray = isType$1('array');\n var isNull = eq$1(null);\n var isBoolean = isSimpleType('boolean');\n var isUndefined = eq$1(undefined);\n var isNullable = function (a) {\n return a === null || a === undefined;\n };\n var isNonNullable = function (a) {\n return !isNullable(a);\n };\n var isFunction = isSimpleType('function');\n var isNumber = isSimpleType('number');\n var isArrayOf = function (value, pred) {\n if (isArray(value)) {\n for (var 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 var noop = function () {\n };\n var noarg = function (f) {\n return function () {\n return f();\n };\n };\n var compose = function (fa, fb) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fa(fb.apply(null, args));\n };\n };\n var compose1 = function (fbc, fab) {\n return function (a) {\n return fbc(fab(a));\n };\n };\n var constant$1 = function (value) {\n return function () {\n return value;\n };\n };\n var identity$1 = function (x) {\n return x;\n };\n var tripleEquals = function (a, b) {\n return a === b;\n };\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n var not = function (f) {\n return function (t) {\n return !f(t);\n };\n };\n var die = function (msg) {\n return function () {\n throw new Error(msg);\n };\n };\n var never = constant$1(false);\n var always = constant$1(true);\n\n var global$g = tinymce.util.Tools.resolve('tinymce.ThemeManager');\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n function __rest(s, e) {\n var t = {};\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === 'function')\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n }\n function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2)\n for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar)\n ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n }\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var call = function (thunk) {\n return thunk();\n };\n var id = identity$1;\n var me = {\n fold: function (n, _s) {\n return n();\n },\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant$1(null),\n getOrUndefined: constant$1(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: function () {\n return none();\n },\n toArray: function () {\n return [];\n },\n toString: constant$1('none()')\n };\n return me;\n }();\n var some = function (a) {\n var constant_a = constant$1(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n }\n };\n return me;\n };\n var from$1 = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Optional = {\n some: some,\n none: none,\n from: from$1\n };\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var indexOf = function (xs, x) {\n var r = rawIndexOf(xs, x);\n return r === -1 ? Optional.none() : Optional.some(r);\n };\n var contains$2 = function (xs, x) {\n return rawIndexOf(xs, x) > -1;\n };\n var exists = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n var range$2 = function (num, f) {\n var r = [];\n for (var i = 0; i < num; i++) {\n r.push(f(i));\n }\n return r;\n };\n var chunk$1 = function (array, size) {\n var r = [];\n for (var i = 0; i < array.length; i += size) {\n var s = nativeSlice.call(array, i, i + size);\n r.push(s);\n }\n return r;\n };\n var map$2 = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each$1 = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var eachr = function (xs, f) {\n for (var i = xs.length - 1; i >= 0; i--) {\n var x = xs[i];\n f(x, i);\n }\n };\n var partition$3 = function (xs, pred) {\n var pass = [];\n var fail = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n var arr = pred(x, i) ? pass : fail;\n arr.push(x);\n }\n return {\n pass: pass,\n fail: fail\n };\n };\n var filter$2 = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var foldr = function (xs, f, acc) {\n eachr(xs, function (x, i) {\n acc = f(acc, x, i);\n });\n return acc;\n };\n var foldl = function (xs, f, acc) {\n each$1(xs, function (x, i) {\n acc = f(acc, x, i);\n });\n return acc;\n };\n var findUntil = function (xs, pred, until) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var 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 var find$5 = function (xs, pred) {\n return findUntil(xs, pred, never);\n };\n var findIndex$1 = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Optional.some(i);\n }\n }\n return Optional.none();\n };\n var flatten = function (xs) {\n var r = [];\n for (var 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 var bind$3 = function (xs, f) {\n return flatten(map$2(xs, f));\n };\n var forall = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; ++i) {\n var x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n var reverse = function (xs) {\n var r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n var difference = function (a1, a2) {\n return filter$2(a1, function (x) {\n return !contains$2(a2, x);\n });\n };\n var mapToObject = function (xs, f) {\n var r = {};\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n var pure$2 = function (x) {\n return [x];\n };\n var sort = function (xs, comparator) {\n var copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n var get$f = function (xs, i) {\n return i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n };\n var head = function (xs) {\n return get$f(xs, 0);\n };\n var last$2 = function (xs) {\n return get$f(xs, xs.length - 1);\n };\n var from = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n var findMap = function (arr, f) {\n for (var i = 0; i < arr.length; i++) {\n var r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n var keys = Object.keys;\n var hasOwnProperty$1 = Object.hasOwnProperty;\n var each = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var map$1 = function (obj, f) {\n return tupleMap(obj, function (x, i) {\n return {\n k: i,\n v: f(x, i)\n };\n });\n };\n var tupleMap = function (obj, f) {\n var r = {};\n each(obj, function (x, i) {\n var tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n var objAcc = function (r) {\n return function (x, i) {\n r[i] = x;\n };\n };\n var internalFilter = function (obj, pred, onTrue, onFalse) {\n var r = {};\n each(obj, function (x, i) {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n return r;\n };\n var filter$1 = function (obj, pred) {\n var t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n var mapToArray = function (obj, f) {\n var r = [];\n each(obj, function (value, name) {\n r.push(f(value, name));\n });\n return r;\n };\n var find$4 = function (obj, pred) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n if (pred(x, i, obj)) {\n return Optional.some(x);\n }\n }\n return Optional.none();\n };\n var values = function (obj) {\n return mapToArray(obj, identity$1);\n };\n var get$e = function (obj, key) {\n return has$2(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n var has$2 = function (obj, key) {\n return hasOwnProperty$1.call(obj, key);\n };\n var hasNonNullableKey = function (obj, key) {\n return has$2(obj, key) && obj[key] !== undefined && obj[key] !== null;\n };\n\n var is$1 = function (lhs, rhs, comparator) {\n if (comparator === void 0) {\n comparator = tripleEquals;\n }\n return lhs.exists(function (left) {\n return comparator(left, rhs);\n });\n };\n var equals = function (lhs, rhs, comparator) {\n if (comparator === void 0) {\n comparator = tripleEquals;\n }\n return lift2(lhs, rhs, comparator).getOr(lhs.isNone() && rhs.isNone());\n };\n var cat = function (arr) {\n var r = [];\n var push = function (x) {\n r.push(x);\n };\n for (var i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n var sequence = function (arr) {\n var r = [];\n for (var i = 0; i < arr.length; i++) {\n var 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 var lift2 = function (oa, ob, f) {\n return oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();\n };\n var lift3 = function (oa, ob, oc, f) {\n return oa.isSome() && ob.isSome() && oc.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Optional.none();\n };\n var mapFrom = function (a, f) {\n return a !== undefined && a !== null ? Optional.some(f(a)) : Optional.none();\n };\n var someIf = function (b, a) {\n return b ? Optional.some(a) : Optional.none();\n };\n\n var addToEnd = function (str, suffix) {\n return str + suffix;\n };\n var removeFromStart = function (str, numChars) {\n return str.substring(numChars);\n };\n\n var checkRange = function (str, substr, start) {\n return substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n };\n var removeLeading = function (str, prefix) {\n return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;\n };\n var ensureTrailing = function (str, suffix) {\n return endsWith(str, suffix) ? str : addToEnd(str, suffix);\n };\n var contains$1 = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var startsWith = function (str, prefix) {\n return checkRange(str, prefix, 0);\n };\n var endsWith = function (str, suffix) {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n var blank = function (r) {\n return function (s) {\n return s.replace(r, '');\n };\n };\n var trim$1 = blank(/^\\s+|\\s+$/g);\n var isNotEmpty = function (s) {\n return s.length > 0;\n };\n var isEmpty = function (s) {\n return !isNotEmpty(s);\n };\n\n var isSupported$1 = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n };\n\n var fromHtml$2 = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n var fromPoint = function (docElm, x, y) {\n return Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);\n };\n var SugarElement = {\n fromHtml: fromHtml$2,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n typeof window !== 'undefined' ? window : Function('return this;')();\n\n var DOCUMENT = 9;\n var DOCUMENT_FRAGMENT = 11;\n var ELEMENT = 1;\n var TEXT = 3;\n\n var name$2 = function (element) {\n var r = element.dom.nodeName;\n return r.toLowerCase();\n };\n var type = function (element) {\n return element.dom.nodeType;\n };\n var isType = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isElement$2 = isType(ELEMENT);\n var isText$1 = isType(TEXT);\n var isDocument = isType(DOCUMENT);\n var isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var DeviceType = function (os, browser, userAgent, mediaMatch) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isMobile = os.isiOS() || os.isAndroid();\n var isTouch = isMobile || mediaMatch('(pointer:coarse)');\n var isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n var isPhone = isiPhone || isMobile && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n var 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 var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find$3 = function (regexes, agent) {\n var r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n var group = function (i) {\n return Number(agent.replace(r, '$' + i));\n };\n return nu$d(group(1), group(2));\n };\n var detect$4 = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$3();\n }\n return find$3(versionRegexes, cleanedAgent);\n };\n var unknown$3 = function () {\n return nu$d(0, 0);\n };\n var nu$d = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu$d,\n detect: detect$4,\n unknown: unknown$3\n };\n\n var detectBrowser$1 = function (browsers, userAgentData) {\n return findMap(userAgentData.brands, function (uaBrand) {\n var lcBrand = uaBrand.brand.toLowerCase();\n return find$5(browsers, function (browser) {\n var _a;\n return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n }).map(function (info) {\n return {\n current: info.name,\n version: Version.nu(parseInt(uaBrand.version, 10), 0)\n };\n });\n });\n };\n\n var detect$3 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find$5(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$3(browsers, userAgent).map(function (browser) {\n var version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version: version\n };\n });\n };\n var detectOs = function (oses, userAgent) {\n return detect$3(oses, userAgent).map(function (os) {\n var version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version: version\n };\n });\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains$1(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n brand: 'Chromium',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (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: function (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: function (uastring) {\n return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (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: 'OSX',\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 var PlatformInfo = {\n browsers: constant$1(browsers),\n oses: constant$1(oses)\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var unknown$2 = function () {\n return nu$c({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$c = function (info) {\n var current = info.current;\n var version = info.version;\n var isBrowser = function (name) {\n return function () {\n return current === name;\n };\n };\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge),\n isChrome: isBrowser(chrome),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n var Browser = {\n unknown: unknown$2,\n nu: nu$c,\n edge: constant$1(edge),\n chrome: constant$1(chrome),\n ie: constant$1(ie),\n opera: constant$1(opera),\n firefox: constant$1(firefox),\n safari: constant$1(safari)\n };\n\n var windows = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var chromeos = 'ChromeOS';\n var unknown$1 = function () {\n return nu$b({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$b = function (info) {\n var current = info.current;\n var version = info.version;\n var isOS = function (name) {\n return function () {\n return current === name;\n };\n };\n return {\n current: current,\n version: version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isOSX: isOS(osx),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n var 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 osx: constant$1(osx),\n solaris: constant$1(solaris),\n freebsd: constant$1(freebsd),\n chromeos: constant$1(chromeos)\n };\n\n var detect$2 = function (userAgent, userAgentDataOpt, mediaMatch) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = userAgentDataOpt.bind(function (userAgentData) {\n return detectBrowser$1(browsers, userAgentData);\n }).orThunk(function () {\n return detectBrowser(browsers, userAgent);\n }).fold(Browser.unknown, Browser.nu);\n var os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n var deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var mediaMatch = function (query) {\n return window.matchMedia(query).matches;\n };\n var platform = cached(function () {\n return PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch);\n });\n var detect$1 = function () {\n return platform();\n };\n\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n\n var is = function (element, selector) {\n var dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n var 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 var bypassSelector = function (dom) {\n return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n };\n var all$3 = function (selector, scope) {\n var base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map$2(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n var one = function (selector, scope) {\n var base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n };\n\n var eq = function (e1, e2) {\n return e1.dom === e2.dom;\n };\n var regularContains = function (e1, e2) {\n var d1 = e1.dom;\n var d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return documentPositionContainedBy(e1.dom, e2.dom);\n };\n var contains = function (e1, e2) {\n return detect$1().browser.isIE() ? ieContains(e1, e2) : regularContains(e1, e2);\n };\n\n var owner$4 = function (element) {\n return SugarElement.fromDom(element.dom.ownerDocument);\n };\n var documentOrOwner = function (dos) {\n return isDocument(dos) ? dos : owner$4(dos);\n };\n var documentElement = function (element) {\n return SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n };\n var defaultView = function (element) {\n return SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n };\n var parent = function (element) {\n return Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n };\n var parentNode = function (element) {\n return parent(element);\n };\n var offsetParent = function (element) {\n return Optional.from(element.dom.offsetParent).map(SugarElement.fromDom);\n };\n var nextSibling = function (element) {\n return Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n };\n var children = function (element) {\n return map$2(element.dom.childNodes, SugarElement.fromDom);\n };\n var child$2 = function (element, index) {\n var cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n var firstChild = function (element) {\n return child$2(element, 0);\n };\n var spot = function (element, offset) {\n return {\n element: element,\n offset: offset\n };\n };\n var leaf = function (element, offset) {\n var cs = children(element);\n return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);\n };\n\n var isShadowRoot = function (dos) {\n return isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n };\n var supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n var isSupported = constant$1(supported);\n var getRootNode = supported ? function (e) {\n return SugarElement.fromDom(e.dom.getRootNode());\n } : documentOrOwner;\n var getContentContainer = function (dos) {\n return isShadowRoot(dos) ? dos : SugarElement.fromDom(documentOrOwner(dos).dom.body);\n };\n var isInShadowRoot = function (e) {\n return getShadowRoot(e).isSome();\n };\n var getShadowRoot = function (e) {\n var r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n var getShadowHost = function (e) {\n return SugarElement.fromDom(e.dom.host);\n };\n var getOriginalEventTarget = function (event) {\n if (isSupported() && isNonNullable(event.target)) {\n var el = SugarElement.fromDom(event.target);\n if (isElement$2(el) && isOpenShadowHost(el)) {\n if (event.composed && event.composedPath) {\n var composedPath = event.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Optional.from(event.target);\n };\n var isOpenShadowHost = function (element) {\n return isNonNullable(element.dom.shadowRoot);\n };\n\n var inBody = function (element) {\n var dom = isText$1(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n var doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(function () {\n return doc.body.contains(dom);\n }, compose1(inBody, getShadowHost));\n };\n var body = function () {\n return getBody(SugarElement.fromDom(document));\n };\n var getBody = function (doc) {\n var 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 var rawSet = function (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 var set$8 = function (element, key, value) {\n rawSet(element.dom, key, value);\n };\n var setAll$1 = function (element, attrs) {\n var dom = element.dom;\n each(attrs, function (v, k) {\n rawSet(dom, k, v);\n });\n };\n var get$d = function (element, key) {\n var v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n var getOpt = function (element, key) {\n return Optional.from(get$d(element, key));\n };\n var has$1 = function (element, key) {\n var dom = element.dom;\n return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n };\n var remove$7 = function (element, key) {\n element.dom.removeAttribute(key);\n };\n\n var internalSet = function (dom, property, value) {\n if (!isString(value)) {\n console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported$1(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n var internalRemove = function (dom, property) {\n if (isSupported$1(dom)) {\n dom.style.removeProperty(property);\n }\n };\n var set$7 = function (element, property, value) {\n var dom = element.dom;\n internalSet(dom, property, value);\n };\n var setAll = function (element, css) {\n var dom = element.dom;\n each(css, function (v, k) {\n internalSet(dom, k, v);\n });\n };\n var setOptions = function (element, css) {\n var dom = element.dom;\n each(css, function (v, k) {\n v.fold(function () {\n internalRemove(dom, k);\n }, function (value) {\n internalSet(dom, k, value);\n });\n });\n };\n var get$c = function (element, property) {\n var dom = element.dom;\n var styles = window.getComputedStyle(dom);\n var r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported$1(dom) ? dom.style.getPropertyValue(property) : '';\n };\n var getRaw = function (element, property) {\n var dom = element.dom;\n var raw = getUnsafeProperty(dom, property);\n return Optional.from(raw).filter(function (r) {\n return r.length > 0;\n });\n };\n var getAllRaw = function (element) {\n var css = {};\n var dom = element.dom;\n if (isSupported$1(dom)) {\n for (var i = 0; i < dom.style.length; i++) {\n var ruleName = dom.style.item(i);\n css[ruleName] = dom.style[ruleName];\n }\n }\n return css;\n };\n var isValidValue = function (tag, property, value) {\n var element = SugarElement.fromTag(tag);\n set$7(element, property, value);\n var style = getRaw(element, property);\n return style.isSome();\n };\n var remove$6 = function (element, property) {\n var dom = element.dom;\n internalRemove(dom, property);\n if (is$1(getOpt(element, 'style').map(trim$1), '')) {\n remove$7(element, 'style');\n }\n };\n var reflow = function (e) {\n return e.dom.offsetWidth;\n };\n\n var Dimension = function (name, getOffset) {\n var set = function (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 var dom = element.dom;\n if (isSupported$1(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n var get = function (element) {\n var r = getOffset(element);\n if (r <= 0 || r === null) {\n var css = get$c(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n var getOuter = get;\n var aggregate = function (element, properties) {\n return foldl(properties, function (acc, property) {\n var val = get$c(element, property);\n var value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n };\n var max = function (element, value, properties) {\n var cumulativeInclusions = aggregate(element, properties);\n var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set: set,\n get: get,\n getOuter: getOuter,\n aggregate: aggregate,\n max: max\n };\n };\n\n var api$3 = Dimension('height', function (element) {\n var dom = element.dom;\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n var get$b = function (element) {\n return api$3.get(element);\n };\n var getOuter$2 = function (element) {\n return api$3.getOuter(element);\n };\n var setMax$1 = function (element, value) {\n var inclusions = [\n 'margin-top',\n 'border-top-width',\n 'padding-top',\n 'padding-bottom',\n 'border-bottom-width',\n 'margin-bottom'\n ];\n var absMax = api$3.max(element, value, inclusions);\n set$7(element, 'max-height', absMax + 'px');\n };\n\n var r$1 = function (left, top) {\n var translate = function (x, y) {\n return r$1(left + x, top + y);\n };\n return {\n left: left,\n top: top,\n translate: translate\n };\n };\n var SugarPosition = r$1;\n\n var boxPosition = function (dom) {\n var box = dom.getBoundingClientRect();\n return SugarPosition(box.left, box.top);\n };\n var firstDefinedOrZero = function (a, b) {\n if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n var absolute$3 = function (element) {\n var doc = element.dom.ownerDocument;\n var body = doc.body;\n var win = doc.defaultView;\n var html = doc.documentElement;\n if (body === element.dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n var scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n var scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport$1(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n var viewport$1 = function (element) {\n var dom = element.dom;\n var doc = dom.ownerDocument;\n var 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 var api$2 = Dimension('width', function (element) {\n return element.dom.offsetWidth;\n });\n var set$6 = function (element, h) {\n return api$2.set(element, h);\n };\n var get$a = function (element) {\n return api$2.get(element);\n };\n var getOuter$1 = function (element) {\n return api$2.getOuter(element);\n };\n var setMax = function (element, value) {\n var inclusions = [\n 'margin-left',\n 'border-left-width',\n 'padding-left',\n 'padding-right',\n 'border-right-width',\n 'margin-right'\n ];\n var absMax = api$2.max(element, value, inclusions);\n set$7(element, 'max-width', absMax + 'px');\n };\n\n var mkEvent = function (target, x, y, stop, prevent, kill, raw) {\n return {\n target: target,\n x: x,\n y: y,\n stop: stop,\n prevent: prevent,\n kill: kill,\n raw: raw\n };\n };\n var fromRawEvent$1 = function (rawEvent) {\n var target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n var stop = function () {\n return rawEvent.stopPropagation();\n };\n var prevent = function () {\n return rawEvent.preventDefault();\n };\n var kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n var handle = function (filter, handler) {\n return function (rawEvent) {\n if (filter(rawEvent)) {\n handler(fromRawEvent$1(rawEvent));\n }\n };\n };\n var binder = function (element, event, filter, handler, useCapture) {\n var wrapped = handle(filter, handler);\n element.dom.addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n var bind$2 = function (element, event, filter, handler) {\n return binder(element, event, filter, handler, false);\n };\n var capture$1 = function (element, event, filter, handler) {\n return binder(element, event, filter, handler, true);\n };\n var unbind = function (element, event, handler, useCapture) {\n element.dom.removeEventListener(event, handler, useCapture);\n };\n\n var before$2 = function (marker, element) {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n var after$2 = function (marker, element) {\n var sibling = nextSibling(marker);\n sibling.fold(function () {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n append$2(v, element);\n });\n }, function (v) {\n before$2(v, element);\n });\n };\n var prepend$1 = function (parent, element) {\n var firstChild$1 = firstChild(parent);\n firstChild$1.fold(function () {\n append$2(parent, element);\n }, function (v) {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n var append$2 = function (parent, element) {\n parent.dom.appendChild(element.dom);\n };\n var appendAt = function (parent, element, index) {\n child$2(parent, index).fold(function () {\n append$2(parent, element);\n }, function (v) {\n before$2(v, element);\n });\n };\n\n var before$1 = function (marker, elements) {\n each$1(elements, function (x) {\n before$2(marker, x);\n });\n };\n var append$1 = function (parent, elements) {\n each$1(elements, function (x) {\n append$2(parent, x);\n });\n };\n\n var empty = function (element) {\n element.dom.textContent = '';\n each$1(children(element), function (rogue) {\n remove$5(rogue);\n });\n };\n var remove$5 = function (element) {\n var dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n var unwrap = function (wrapper) {\n var children$1 = children(wrapper);\n if (children$1.length > 0) {\n before$1(wrapper, children$1);\n }\n remove$5(wrapper);\n };\n\n var get$9 = function (_DOC) {\n var doc = _DOC !== undefined ? _DOC.dom : document;\n var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n var y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return SugarPosition(x, y);\n };\n var to = function (x, y, _DOC) {\n var doc = _DOC !== undefined ? _DOC.dom : document;\n var win = doc.defaultView;\n if (win) {\n win.scrollTo(x, y);\n }\n };\n\n var get$8 = function (_win) {\n var 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 var bounds$1 = function (x, y, width, height) {\n return {\n x: x,\n y: y,\n width: width,\n height: height,\n right: x + width,\n bottom: y + height\n };\n };\n var getBounds$3 = function (_win) {\n var win = _win === undefined ? window : _win;\n var doc = win.document;\n var scroll = get$9(SugarElement.fromDom(doc));\n return get$8(win).fold(function () {\n var html = win.document.documentElement;\n var width = html.clientWidth;\n var height = html.clientHeight;\n return bounds$1(scroll.left, scroll.top, width, height);\n }, function (visualViewport) {\n return bounds$1(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height);\n });\n };\n\n var walkUp = function (navigation, doc) {\n var frame = navigation.view(doc);\n return frame.fold(constant$1([]), function (f) {\n var parent = navigation.owner(f);\n var rest = walkUp(navigation, parent);\n return [f].concat(rest);\n });\n };\n var pathTo = function (element, navigation) {\n var d = navigation.owner(element);\n var paths = walkUp(navigation, d);\n return Optional.some(paths);\n };\n\n var view = function (doc) {\n var _a;\n var 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 var owner$3 = function (element) {\n return owner$4(element);\n };\n\n var Navigation = /*#__PURE__*/Object.freeze({\n __proto__: null,\n view: view,\n owner: owner$3\n });\n\n var find$2 = function (element) {\n var doc = SugarElement.fromDom(document);\n var scroll = get$9(doc);\n var path = pathTo(element, Navigation);\n return path.fold(curry(absolute$3, element), function (frames) {\n var offset = viewport$1(element);\n var r = foldr(frames, function (b, a) {\n var 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 var pointed = function (point, width, height) {\n return {\n point: point,\n width: width,\n height: height\n };\n };\n var rect = function (x, y, width, height) {\n return {\n x: x,\n y: y,\n width: width,\n height: height\n };\n };\n var bounds = function (x, y, width, height) {\n return {\n x: x,\n y: y,\n width: width,\n height: height,\n right: x + width,\n bottom: y + height\n };\n };\n var box$1 = function (element) {\n var xy = absolute$3(element);\n var w = getOuter$1(element);\n var h = getOuter$2(element);\n return bounds(xy.left, xy.top, w, h);\n };\n var absolute$2 = function (element) {\n var position = find$2(element);\n var width = getOuter$1(element);\n var height = getOuter$2(element);\n return bounds(position.left, position.top, width, height);\n };\n var win = function () {\n return getBounds$3(window);\n };\n\n var value$3 = function (o) {\n var or = function (_opt) {\n return value$3(o);\n };\n var orThunk = function (_f) {\n return value$3(o);\n };\n var map = function (f) {\n return value$3(f(o));\n };\n var mapError = function (_f) {\n return value$3(o);\n };\n var each = function (f) {\n f(o);\n };\n var bind = function (f) {\n return f(o);\n };\n var fold = function (_, onValue) {\n return onValue(o);\n };\n var exists = function (f) {\n return f(o);\n };\n var forall = function (f) {\n return f(o);\n };\n var toOptional = function () {\n return Optional.some(o);\n };\n return {\n isValue: always,\n isError: never,\n getOr: constant$1(o),\n getOrThunk: constant$1(o),\n getOrDie: constant$1(o),\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: each,\n bind: bind,\n exists: exists,\n forall: forall,\n toOptional: toOptional\n };\n };\n var error$1 = function (message) {\n var getOrThunk = function (f) {\n return f();\n };\n var getOrDie = function () {\n return die(String(message))();\n };\n var or = identity$1;\n var orThunk = function (f) {\n return f();\n };\n var map = function (_f) {\n return error$1(message);\n };\n var mapError = function (f) {\n return error$1(f(message));\n };\n var bind = function (_f) {\n return error$1(message);\n };\n var fold = function (onError, _) {\n return onError(message);\n };\n return {\n isValue: never,\n isError: always,\n getOr: identity$1,\n getOrThunk: getOrThunk,\n getOrDie: getOrDie,\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: noop,\n bind: bind,\n exists: never,\n forall: always,\n toOptional: Optional.none\n };\n };\n var fromOption = function (opt, err) {\n return opt.fold(function () {\n return error$1(err);\n }, value$3);\n };\n var Result = {\n value: value$3,\n error: error$1,\n fromOption: 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 var fold$1 = function (res, onError, onValue) {\n return res.stype === SimpleResultType.Error ? onError(res.serror) : onValue(res.svalue);\n };\n var partition$2 = function (results) {\n var values = [];\n var errors = [];\n each$1(results, function (obj) {\n fold$1(obj, function (err) {\n return errors.push(err);\n }, function (val) {\n return values.push(val);\n });\n });\n return {\n values: values,\n errors: errors\n };\n };\n var mapError = function (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 var map = function (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 var bind$1 = function (res, f) {\n if (res.stype === SimpleResultType.Value) {\n return f(res.svalue);\n } else {\n return res;\n }\n };\n var bindError = function (res, f) {\n if (res.stype === SimpleResultType.Error) {\n return f(res.serror);\n } else {\n return res;\n }\n };\n var svalue = function (v) {\n return {\n stype: SimpleResultType.Value,\n svalue: v\n };\n };\n var serror = function (e) {\n return {\n stype: SimpleResultType.Error,\n serror: e\n };\n };\n var toResult$1 = function (res) {\n return fold$1(res, Result.error, Result.value);\n };\n var fromResult$1 = function (res) {\n return res.fold(serror, svalue);\n };\n var SimpleResult = {\n fromResult: fromResult$1,\n toResult: toResult$1,\n svalue: svalue,\n partition: partition$2,\n serror: serror,\n bind: bind$1,\n bindError: bindError,\n map: map,\n mapError: mapError,\n fold: fold$1\n };\n\n var field$2 = function (key, newKey, presence, prop) {\n return {\n tag: 'field',\n key: key,\n newKey: newKey,\n presence: presence,\n prop: prop\n };\n };\n var customField$1 = function (newKey, instantiator) {\n return {\n tag: 'custom',\n newKey: newKey,\n instantiator: instantiator\n };\n };\n var fold = function (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 var shallow$1 = function (old, nu) {\n return nu;\n };\n var deep = function (old, nu) {\n var bothObjects = isObject(old) && isObject(nu);\n return bothObjects ? deepMerge(old, nu) : nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n objects[_i] = arguments[_i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var 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 var deepMerge = baseMerge(deep);\n var merge$1 = baseMerge(shallow$1);\n\n var required$2 = function () {\n return {\n tag: 'required',\n process: {}\n };\n };\n var defaultedThunk = function (fallbackThunk) {\n return {\n tag: 'defaultedThunk',\n process: fallbackThunk\n };\n };\n var defaulted$1 = function (fallback) {\n return defaultedThunk(constant$1(fallback));\n };\n var asOption = function () {\n return {\n tag: 'option',\n process: {}\n };\n };\n var mergeWithThunk = function (baseThunk) {\n return {\n tag: 'mergeWithThunk',\n process: baseThunk\n };\n };\n var mergeWith = function (base) {\n return mergeWithThunk(constant$1(base));\n };\n\n var mergeValues$1 = function (values, base) {\n return values.length > 0 ? SimpleResult.svalue(deepMerge(base, merge$1.apply(undefined, values))) : SimpleResult.svalue(base);\n };\n var mergeErrors$1 = function (errors) {\n return compose(SimpleResult.serror, flatten)(errors);\n };\n var consolidateObj = function (objects, base) {\n var partition = SimpleResult.partition(objects);\n return partition.errors.length > 0 ? mergeErrors$1(partition.errors) : mergeValues$1(partition.values, base);\n };\n var consolidateArr = function (objects) {\n var partitions = SimpleResult.partition(objects);\n return partitions.errors.length > 0 ? mergeErrors$1(partitions.errors) : SimpleResult.svalue(partitions.values);\n };\n var ResultCombine = {\n consolidateObj: consolidateObj,\n consolidateArr: consolidateArr\n };\n\n var formatObj = function (input) {\n return isObject(input) && keys(input).length > 100 ? ' removed due to size' : JSON.stringify(input, null, 2);\n };\n var formatErrors = function (errors) {\n var 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, function (e) {\n return 'Failed path: (' + e.path.join(' > ') + ')\\n' + e.getErrorInfo();\n });\n };\n\n var nu$a = function (path, getErrorInfo) {\n return SimpleResult.serror([{\n path: path,\n getErrorInfo: getErrorInfo\n }]);\n };\n var missingRequired = function (path, key, obj) {\n return nu$a(path, function () {\n return 'Could not find valid *required* value for \"' + key + '\" in ' + formatObj(obj);\n });\n };\n var missingKey = function (path, key) {\n return nu$a(path, function () {\n return 'Choice schema did not contain choice key: \"' + key + '\"';\n });\n };\n var missingBranch = function (path, branches, branch) {\n return nu$a(path, function () {\n return 'The chosen schema: \"' + branch + '\" did not exist in branches: ' + formatObj(branches);\n });\n };\n var unsupportedFields = function (path, unsupported) {\n return nu$a(path, function () {\n return 'There are unsupported fields: [' + unsupported.join(', ') + '] specified';\n });\n };\n var custom = function (path, err) {\n return nu$a(path, constant$1(err));\n };\n\n var value$2 = function (validator) {\n var extract = function (path, val) {\n return SimpleResult.bindError(validator(val), function (err) {\n return custom(path, err);\n });\n };\n var toString = constant$1('val');\n return {\n extract: extract,\n toString: toString\n };\n };\n var anyValue$1 = value$2(SimpleResult.svalue);\n\n var requiredAccess = function (path, obj, key, bundle) {\n return get$e(obj, key).fold(function () {\n return missingRequired(path, key, obj);\n }, bundle);\n };\n var fallbackAccess = function (obj, key, fallback, bundle) {\n var v = get$e(obj, key).getOrThunk(function () {\n return fallback(obj);\n });\n return bundle(v);\n };\n var optionAccess = function (obj, key, bundle) {\n return bundle(get$e(obj, key));\n };\n var optionDefaultedAccess = function (obj, key, fallback, bundle) {\n var opt = get$e(obj, key).map(function (val) {\n return val === true ? fallback(obj) : val;\n });\n return bundle(opt);\n };\n var extractField = function (field, path, obj, key, prop) {\n var bundle = function (av) {\n return prop.extract(path.concat([key]), av);\n };\n var bundleAsOption = function (optValue) {\n return optValue.fold(function () {\n return SimpleResult.svalue(Optional.none());\n }, function (ov) {\n var result = prop.extract(path.concat([key]), ov);\n return SimpleResult.map(result, Optional.some);\n });\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({}), function (v) {\n var result = deepMerge(field.process(obj), v);\n return bundle(result);\n });\n }\n }\n };\n var extractFields = function (path, obj, fields) {\n var success = {};\n var errors = [];\n for (var _i = 0, fields_1 = fields; _i < fields_1.length; _i++) {\n var field = fields_1[_i];\n fold(field, function (key, newKey, presence, prop) {\n var result = extractField(presence, path, obj, key, prop);\n SimpleResult.fold(result, function (err) {\n errors.push.apply(errors, err);\n }, function (res) {\n success[newKey] = res;\n });\n }, function (newKey, instantiator) {\n success[newKey] = instantiator(obj);\n });\n }\n return errors.length > 0 ? SimpleResult.serror(errors) : SimpleResult.svalue(success);\n };\n var valueThunk = function (getDelegate) {\n var extract = function (path, val) {\n return getDelegate().extract(path, val);\n };\n var toString = function () {\n return getDelegate().toString();\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var getSetKeys = function (obj) {\n return keys(filter$1(obj, isNonNullable));\n };\n var objOfOnly = function (fields) {\n var delegate = objOf(fields);\n var fieldNames = foldr(fields, function (acc, value) {\n return fold(value, function (key) {\n var _a;\n return deepMerge(acc, (_a = {}, _a[key] = true, _a));\n }, constant$1(acc));\n }, {});\n var extract = function (path, o) {\n var keys = isBoolean(o) ? [] : getSetKeys(o);\n var extra = filter$2(keys, function (k) {\n return !hasNonNullableKey(fieldNames, k);\n });\n return extra.length === 0 ? delegate.extract(path, o) : unsupportedFields(path, extra);\n };\n return {\n extract: extract,\n toString: delegate.toString\n };\n };\n var objOf = function (values) {\n var extract = function (path, o) {\n return extractFields(path, o, values);\n };\n var toString = function () {\n var fieldStrings = map$2(values, function (value) {\n return fold(value, function (key, _okey, _presence, prop) {\n return key + ' -> ' + prop.toString();\n }, function (newKey, _instantiator) {\n return 'state(' + newKey + ')';\n });\n });\n return 'obj{\\n' + fieldStrings.join('\\n') + '}';\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var arrOf = function (prop) {\n var extract = function (path, array) {\n var results = map$2(array, function (a, i) {\n return prop.extract(path.concat(['[' + i + ']']), a);\n });\n return ResultCombine.consolidateArr(results);\n };\n var toString = function () {\n return 'array(' + prop.toString() + ')';\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var oneOf = function (props) {\n var extract = function (path, val) {\n var errors = [];\n for (var _i = 0, props_1 = props; _i < props_1.length; _i++) {\n var prop = props_1[_i];\n var res = prop.extract(path, val);\n if (res.stype === SimpleResultType.Value) {\n return res;\n }\n errors.push(res);\n }\n return ResultCombine.consolidateArr(errors);\n };\n var toString = function () {\n return 'oneOf(' + map$2(props, function (prop) {\n return prop.toString();\n }).join(', ') + ')';\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var setOf$1 = function (validator, prop) {\n var validateKeys = function (path, keys) {\n return arrOf(value$2(validator)).extract(path, keys);\n };\n var extract = function (path, o) {\n var keys$1 = keys(o);\n var validatedKeys = validateKeys(path, keys$1);\n return SimpleResult.bind(validatedKeys, function (validKeys) {\n var schema = map$2(validKeys, function (vk) {\n return field$2(vk, vk, required$2(), prop);\n });\n return objOf(schema).extract(path, o);\n });\n };\n var toString = function () {\n return 'setOf(' + prop.toString() + ')';\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var thunk = function (_desc, processor) {\n var getP = cached(processor);\n var extract = function (path, val) {\n return getP().extract(path, val);\n };\n var toString = function () {\n return getP().toString();\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n var arrOfObj = compose(arrOf, objOf);\n\n var anyValue = constant$1(anyValue$1);\n var typedValue = function (validator, expectedType) {\n return value$2(function (a) {\n var actualType = typeof a;\n return validator(a) ? SimpleResult.svalue(a) : SimpleResult.serror('Expected type: ' + expectedType + ' but got: ' + actualType);\n });\n };\n var number = typedValue(isNumber, 'number');\n var string = typedValue(isString, 'string');\n var boolean = typedValue(isBoolean, 'boolean');\n var functionProcessor = typedValue(isFunction, 'function');\n var isPostMessageable = function (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(function (prop) {\n return isPostMessageable(val[prop]);\n });\n default:\n return false;\n }\n };\n var postMessageable = value$2(function (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 var chooseFrom = function (path, input, branches, ch) {\n var fields = get$e(branches, ch);\n return fields.fold(function () {\n return missingBranch(path, branches, ch);\n }, function (vp) {\n return vp.extract(path.concat(['branch: ' + ch]), input);\n });\n };\n var choose$2 = function (key, branches) {\n var extract = function (path, input) {\n var choice = get$e(input, key);\n return choice.fold(function () {\n return missingKey(path, key);\n }, function (chosen) {\n return chooseFrom(path, input, branches, chosen);\n });\n };\n var toString = function () {\n return 'chooseOn(' + key + '). Possible values: ' + keys(branches);\n };\n return {\n extract: extract,\n toString: toString\n };\n };\n\n var arrOfVal = function () {\n return arrOf(anyValue$1);\n };\n var valueOf = function (validator) {\n return value$2(function (v) {\n return validator(v).fold(SimpleResult.serror, SimpleResult.svalue);\n });\n };\n var setOf = function (validator, prop) {\n return setOf$1(function (v) {\n return SimpleResult.fromResult(validator(v));\n }, prop);\n };\n var extractValue = function (label, prop, obj) {\n var res = prop.extract([label], obj);\n return SimpleResult.mapError(res, function (errs) {\n return {\n input: obj,\n errors: errs\n };\n });\n };\n var asRaw = function (label, prop, obj) {\n return SimpleResult.toResult(extractValue(label, prop, obj));\n };\n var getOrDie = function (extraction) {\n return extraction.fold(function (errInfo) {\n throw new Error(formatError(errInfo));\n }, identity$1);\n };\n var asRawOrDie$1 = function (label, prop, obj) {\n return getOrDie(asRaw(label, prop, obj));\n };\n var formatError = function (errInfo) {\n return 'Errors: \\n' + formatErrors(errInfo.errors).join('\\n') + '\\n\\nInput object: ' + formatObj(errInfo.input);\n };\n var choose$1 = function (key, branches) {\n return choose$2(key, map$1(branches, objOf));\n };\n var thunkOf = function (desc, schema) {\n return thunk(desc, schema);\n };\n\n var field$1 = field$2;\n var customField = customField$1;\n var validateEnum = function (values) {\n return valueOf(function (value) {\n return contains$2(values, value) ? Result.value(value) : Result.error('Unsupported value: \"' + value + '\", choose one of \"' + values.join(', ') + '\".');\n });\n };\n var required$1 = function (key) {\n return field$1(key, key, required$2(), anyValue());\n };\n var requiredOf = function (key, schema) {\n return field$1(key, key, required$2(), schema);\n };\n var requiredNumber = function (key) {\n return requiredOf(key, number);\n };\n var requiredString = function (key) {\n return requiredOf(key, string);\n };\n var requiredStringEnum = function (key, values) {\n return field$1(key, key, required$2(), validateEnum(values));\n };\n var requiredBoolean = function (key) {\n return requiredOf(key, boolean);\n };\n var requiredFunction = function (key) {\n return requiredOf(key, functionProcessor);\n };\n var forbid = function (key, message) {\n return field$1(key, key, asOption(), value$2(function (_v) {\n return SimpleResult.serror('The field: ' + key + ' is forbidden. ' + message);\n }));\n };\n var requiredObjOf = function (key, objSchema) {\n return field$1(key, key, required$2(), objOf(objSchema));\n };\n var requiredArrayOfObj = function (key, objFields) {\n return field$1(key, key, required$2(), arrOfObj(objFields));\n };\n var requiredArrayOf = function (key, schema) {\n return field$1(key, key, required$2(), arrOf(schema));\n };\n var option = function (key) {\n return field$1(key, key, asOption(), anyValue());\n };\n var optionOf = function (key, schema) {\n return field$1(key, key, asOption(), schema);\n };\n var optionNumber = function (key) {\n return optionOf(key, number);\n };\n var optionString = function (key) {\n return optionOf(key, string);\n };\n var optionFunction = function (key) {\n return optionOf(key, functionProcessor);\n };\n var optionArrayOf = function (key, schema) {\n return optionOf(key, arrOf(schema));\n };\n var optionObjOf = function (key, objSchema) {\n return optionOf(key, objOf(objSchema));\n };\n var optionObjOfOnly = function (key, objSchema) {\n return optionOf(key, objOfOnly(objSchema));\n };\n var defaulted = function (key, fallback) {\n return field$1(key, key, defaulted$1(fallback), anyValue());\n };\n var defaultedOf = function (key, fallback, schema) {\n return field$1(key, key, defaulted$1(fallback), schema);\n };\n var defaultedNumber = function (key, fallback) {\n return defaultedOf(key, fallback, number);\n };\n var defaultedString = function (key, fallback) {\n return defaultedOf(key, fallback, string);\n };\n var defaultedStringEnum = function (key, fallback, values) {\n return defaultedOf(key, fallback, validateEnum(values));\n };\n var defaultedBoolean = function (key, fallback) {\n return defaultedOf(key, fallback, boolean);\n };\n var defaultedFunction = function (key, fallback) {\n return defaultedOf(key, fallback, functionProcessor);\n };\n var defaultedPostMsg = function (key, fallback) {\n return defaultedOf(key, fallback, postMessageable);\n };\n var defaultedArrayOf = function (key, fallback, schema) {\n return defaultedOf(key, fallback, arrOf(schema));\n };\n var defaultedObjOf = function (key, fallback, objSchema) {\n return defaultedOf(key, fallback, objOf(objSchema));\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n return {\n get: get,\n set: set\n };\n };\n\n var generate$7 = function (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 var constructors = [];\n var adt = {};\n each$1(cases, function (acase, count) {\n var keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n var key = keys$1[0];\n var 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] = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var 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 var match = function (branches) {\n var 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 var allReqd = forall(constructors, function (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: function () {\n var foldArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n foldArgs[_i] = arguments[_i];\n }\n if (foldArgs.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n }\n var target = foldArgs[count];\n return target.apply(null, args);\n },\n match: match,\n log: function (label) {\n console.log(label, {\n constructors: constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n var 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 var partition$1 = function (results) {\n var errors = [];\n var values = [];\n each$1(results, function (result) {\n result.fold(function (err) {\n errors.push(err);\n }, function (value) {\n values.push(value);\n });\n });\n return {\n errors: errors,\n values: values\n };\n };\n\n var exclude$1 = function (obj, fields) {\n var r = {};\n each(obj, function (v, k) {\n if (!contains$2(fields, k)) {\n r[k] = v;\n }\n });\n return r;\n };\n\n var wrap$2 = function (key, value) {\n var _a;\n return _a = {}, _a[key] = value, _a;\n };\n var wrapAll$1 = function (keyvalues) {\n var r = {};\n each$1(keyvalues, function (kv) {\n r[kv.key] = kv.value;\n });\n return r;\n };\n\n var exclude = function (obj, fields) {\n return exclude$1(obj, fields);\n };\n var wrap$1 = function (key, value) {\n return wrap$2(key, value);\n };\n var wrapAll = function (keyvalues) {\n return wrapAll$1(keyvalues);\n };\n var mergeValues = function (values, base) {\n return values.length === 0 ? Result.value(base) : Result.value(deepMerge(base, merge$1.apply(undefined, values)));\n };\n var mergeErrors = function (errors) {\n return Result.error(flatten(errors));\n };\n var consolidate = function (objs, base) {\n var partitions = partition$1(objs);\n return partitions.errors.length > 0 ? mergeErrors(partitions.errors) : mergeValues(partitions.values, base);\n };\n\n var ensureIsRoot = function (isRoot) {\n return isFunction(isRoot) ? isRoot : never;\n };\n var ancestor$2 = function (scope, transform, isRoot) {\n var element = scope.dom;\n var stop = ensureIsRoot(isRoot);\n while (element.parentNode) {\n element = element.parentNode;\n var el = SugarElement.fromDom(element);\n var 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 var closest$4 = function (scope, transform, isRoot) {\n var current = transform(scope);\n var stop = ensureIsRoot(isRoot);\n return current.orThunk(function () {\n return stop(scope) ? Optional.none() : ancestor$2(scope, transform, stop);\n });\n };\n\n var isSource = function (component, simulatedEvent) {\n return eq(component.element, simulatedEvent.event.target);\n };\n\n var defaultEventHandler = {\n can: always,\n abort: never,\n run: noop\n };\n var nu$9 = function (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 __assign(__assign({}, defaultEventHandler), parts);\n };\n var all$2 = function (handlers, f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return foldl(handlers, function (acc, handler) {\n return acc && f(handler).apply(undefined, args);\n }, true);\n };\n };\n var any = function (handlers, f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return foldl(handlers, function (acc, handler) {\n return acc || f(handler).apply(undefined, args);\n }, false);\n };\n };\n var read$2 = function (handler) {\n return isFunction(handler) ? {\n can: always,\n abort: never,\n run: handler\n } : handler;\n };\n var fuse$1 = function (handlers) {\n var can = all$2(handlers, function (handler) {\n return handler.can;\n });\n var abort = any(handlers, function (handler) {\n return handler.abort;\n });\n var run = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n each$1(handlers, function (handler) {\n handler.run.apply(undefined, args);\n });\n };\n return {\n can: can,\n abort: abort,\n run: run\n };\n };\n\n var constant = constant$1;\n var touchstart = constant('touchstart');\n var touchmove = constant('touchmove');\n var touchend = constant('touchend');\n var touchcancel = constant('touchcancel');\n var mousedown = constant('mousedown');\n var mousemove = constant('mousemove');\n var mouseout = constant('mouseout');\n var mouseup = constant('mouseup');\n var mouseover = constant('mouseover');\n var focusin = constant('focusin');\n var focusout = constant('focusout');\n var keydown = constant('keydown');\n var keyup = constant('keyup');\n var input = constant('input');\n var change = constant('change');\n var click = constant('click');\n var transitioncancel = constant('transitioncancel');\n var transitionend = constant('transitionend');\n var transitionstart = constant('transitionstart');\n var selectstart = constant('selectstart');\n\n var prefixName = function (name) {\n return constant$1('alloy.' + name);\n };\n var alloy = { tap: prefixName('tap') };\n var focus$4 = prefixName('focus');\n var postBlur = prefixName('blur.post');\n var postPaste = prefixName('paste.post');\n var receive = prefixName('receive');\n var execute$5 = prefixName('execute');\n var focusItem = prefixName('focus.item');\n var tap = alloy.tap;\n var longpress = prefixName('longpress');\n var sandboxClose = prefixName('sandbox.close');\n var typeaheadCancel = prefixName('typeahead.cancel');\n var systemInit = prefixName('system.init');\n var documentTouchmove = prefixName('system.touchmove');\n var documentTouchend = prefixName('system.touchend');\n var windowScroll = prefixName('system.scroll');\n var windowResize = prefixName('system.resize');\n var attachedToDom = prefixName('system.attached');\n var detachedFromDom = prefixName('system.detached');\n var dismissRequested = prefixName('system.dismissRequested');\n var repositionRequested = prefixName('system.repositionRequested');\n var focusShifted = prefixName('focusmanager.shifted');\n var slotVisibility = prefixName('slotcontainer.visibility');\n var changeTab = prefixName('change.tab');\n var dismissTab = prefixName('dismiss.tab');\n var highlight$1 = prefixName('highlight');\n var dehighlight$1 = prefixName('dehighlight');\n\n var emit = function (component, event) {\n dispatchWith(component, component.element, event, {});\n };\n var emitWith = function (component, event, properties) {\n dispatchWith(component, component.element, event, properties);\n };\n var emitExecute = function (component) {\n emit(component, execute$5());\n };\n var dispatch = function (component, target, event) {\n dispatchWith(component, target, event, {});\n };\n var dispatchWith = function (component, target, event, properties) {\n var data = __assign({ target: target }, properties);\n component.getSystem().triggerEvent(event, target, data);\n };\n var dispatchEvent = function (component, target, event, simulatedEvent) {\n component.getSystem().triggerEvent(event, target, simulatedEvent.event);\n };\n\n var derive$2 = function (configs) {\n return wrapAll(configs);\n };\n var abort = function (name, predicate) {\n return {\n key: name,\n value: nu$9({ abort: predicate })\n };\n };\n var can = function (name, predicate) {\n return {\n key: name,\n value: nu$9({ can: predicate })\n };\n };\n var preventDefault = function (name) {\n return {\n key: name,\n value: nu$9({\n run: function (component, simulatedEvent) {\n simulatedEvent.event.prevent();\n }\n })\n };\n };\n var run$1 = function (name, handler) {\n return {\n key: name,\n value: nu$9({ run: handler })\n };\n };\n var runActionExtra = function (name, action, extra) {\n return {\n key: name,\n value: nu$9({\n run: function (component, simulatedEvent) {\n action.apply(undefined, [\n component,\n simulatedEvent\n ].concat(extra));\n }\n })\n };\n };\n var runOnName = function (name) {\n return function (handler) {\n return run$1(name, handler);\n };\n };\n var runOnSourceName = function (name) {\n return function (handler) {\n return {\n key: name,\n value: nu$9({\n run: function (component, simulatedEvent) {\n if (isSource(component, simulatedEvent)) {\n handler(component, simulatedEvent);\n }\n }\n })\n };\n };\n };\n var redirectToUid = function (name, uid) {\n return run$1(name, function (component, simulatedEvent) {\n component.getSystem().getByUid(uid).each(function (redirectee) {\n dispatchEvent(redirectee, redirectee.element, name, simulatedEvent);\n });\n });\n };\n var redirectToPart = function (name, detail, partName) {\n var uid = detail.partUids[partName];\n return redirectToUid(name, uid);\n };\n var runWithTarget = function (name, f) {\n return run$1(name, function (component, simulatedEvent) {\n var ev = simulatedEvent.event;\n var target = component.getSystem().getByDom(ev.target).getOrThunk(function () {\n var closest = closest$4(ev.target, function (el) {\n return component.getSystem().getByDom(el).toOptional();\n }, never);\n return closest.getOr(component);\n });\n f(component, target, simulatedEvent);\n });\n };\n var cutter = function (name) {\n return run$1(name, function (component, simulatedEvent) {\n simulatedEvent.cut();\n });\n };\n var stopper = function (name) {\n return run$1(name, function (component, simulatedEvent) {\n simulatedEvent.stop();\n });\n };\n var runOnSource = function (name, f) {\n return runOnSourceName(name)(f);\n };\n var runOnAttached = runOnSourceName(attachedToDom());\n var runOnDetached = runOnSourceName(detachedFromDom());\n var runOnInit = runOnSourceName(systemInit());\n var runOnExecute$1 = runOnName(execute$5());\n\n var fromHtml$1 = function (html, scope) {\n var doc = scope || document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n return children(SugarElement.fromDom(div));\n };\n\n var get$7 = function (element) {\n return element.dom.innerHTML;\n };\n var set$5 = function (element, content) {\n var owner = owner$4(element);\n var docDom = owner.dom;\n var fragment = SugarElement.fromDom(docDom.createDocumentFragment());\n var contentElements = fromHtml$1(content, docDom);\n append$1(fragment, contentElements);\n empty(element);\n append$2(element, fragment);\n };\n var getOuter = function (element) {\n var container = SugarElement.fromTag('div');\n var clone = SugarElement.fromDom(element.dom.cloneNode(true));\n append$2(container, clone);\n return get$7(container);\n };\n\n var clone$2 = function (original, isDeep) {\n return SugarElement.fromDom(original.dom.cloneNode(isDeep));\n };\n var shallow = function (original) {\n return clone$2(original, false);\n };\n\n var getHtml = function (element) {\n if (isShadowRoot(element)) {\n return '#shadow-root';\n } else {\n var clone = shallow(element);\n return getOuter(clone);\n }\n };\n\n var element = function (elem) {\n return getHtml(elem);\n };\n\n var isRecursive = function (component, originator, target) {\n return eq(originator, component.element) && !eq(originator, target);\n };\n var events$i = derive$2([can(focus$4(), function (component, simulatedEvent) {\n var event = simulatedEvent.event;\n var originator = event.originator;\n var 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$i\n });\n\n var unique = 0;\n var generate$6 = function (prefix) {\n var date = new Date();\n var time = date.getTime();\n var random = Math.floor(Math.random() * 1000000000);\n unique++;\n return prefix + '_' + random + unique + String(time);\n };\n\n var prefix$1 = constant$1('alloy-id-');\n var idAttr$1 = constant$1('data-alloy-id');\n\n var prefix = prefix$1();\n var idAttr = idAttr$1();\n var write = function (label, elem) {\n var id = generate$6(prefix + label);\n writeOnly(elem, id);\n return id;\n };\n var writeOnly = function (elem, uid) {\n Object.defineProperty(elem.dom, idAttr, {\n value: uid,\n writable: true\n });\n };\n var read$1 = function (elem) {\n var id = isElement$2(elem) ? elem.dom[idAttr] : null;\n return Optional.from(id);\n };\n var generate$5 = function (prefix) {\n return generate$6(prefix);\n };\n\n var make$8 = identity$1;\n\n var NoContextApi = function (getComp) {\n var getMessage = function (event) {\n return 'The component must be in a context to execute: ' + event + (getComp ? '\\n' + element(getComp().element) + ' is not in context.' : '');\n };\n var fail = function (event) {\n return function () {\n throw new Error(getMessage(event));\n };\n };\n var warn = function (event) {\n return function () {\n console.warn(getMessage(event));\n };\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 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 var singleton$1 = NoContextApi();\n\n var markAsBehaviourApi = function (f, apiName, apiFunction) {\n var delegate = apiFunction.toString();\n var endIndex = delegate.indexOf(')') + 1;\n var openBracketIndex = delegate.indexOf('(');\n var parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n f.toFunctionAnnotation = function () {\n return {\n name: apiName,\n parameters: cleanParameters(parameters.slice(0, 1).concat(parameters.slice(3)))\n };\n };\n return f;\n };\n var cleanParameters = function (parameters) {\n return map$2(parameters, function (p) {\n return endsWith(p, '/*') ? p.substring(0, p.length - '/*'.length) : p;\n });\n };\n var markAsExtraApi = function (f, extraName) {\n var delegate = f.toString();\n var endIndex = delegate.indexOf(')') + 1;\n var openBracketIndex = delegate.indexOf('(');\n var parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n f.toFunctionAnnotation = function () {\n return {\n name: extraName,\n parameters: cleanParameters(parameters)\n };\n };\n return f;\n };\n var markAsSketchApi = function (f, apiFunction) {\n var delegate = apiFunction.toString();\n var endIndex = delegate.indexOf(')') + 1;\n var openBracketIndex = delegate.indexOf('(');\n var parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\\s*/);\n f.toFunctionAnnotation = function () {\n return {\n name: 'OVERRIDE',\n parameters: cleanParameters(parameters.slice(1))\n };\n };\n return f;\n };\n\n var premadeTag = generate$6('alloy-premade');\n var premade$1 = function (comp) {\n return wrap$1(premadeTag, comp);\n };\n var getPremade = function (spec) {\n return get$e(spec, premadeTag);\n };\n var makeApi = function (f) {\n return markAsSketchApi(function (component) {\n var rest = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n return f.apply(void 0, __spreadArray([\n component.getApis(),\n component\n ], rest, false));\n }, f);\n };\n\n var NoState = {\n init: function () {\n return nu$8({ readState: constant$1('No State required') });\n }\n };\n var nu$8 = function (spec) {\n return spec;\n };\n\n var generateFrom$1 = function (spec, all) {\n var schema = map$2(all, function (a) {\n return optionObjOf(a.name(), [\n required$1('config'),\n defaulted('state', NoState)\n ]);\n });\n var validated = asRaw('component.behaviours', objOf(schema), spec.behaviours).fold(function (errInfo) {\n throw new Error(formatError(errInfo) + '\\nComplete spec:\\n' + JSON.stringify(spec, null, 2));\n }, identity$1);\n return {\n list: all,\n data: map$1(validated, function (optBlobThunk) {\n var output = optBlobThunk.map(function (blob) {\n return {\n config: blob.config,\n state: blob.state.init(blob.config)\n };\n });\n return constant$1(output);\n })\n };\n };\n var getBehaviours$3 = function (bData) {\n return bData.list;\n };\n var getData$2 = function (bData) {\n return bData.data;\n };\n\n var byInnerKey = function (data, tuple) {\n var r = {};\n each(data, function (detail, key) {\n each(detail, function (value, indexKey) {\n var chain = get$e(r, indexKey).getOr([]);\n r[indexKey] = chain.concat([tuple(key, value)]);\n });\n });\n return r;\n };\n\n var nu$7 = function (s) {\n return {\n classes: isUndefined(s.classes) ? [] : s.classes,\n attributes: isUndefined(s.attributes) ? {} : s.attributes,\n styles: isUndefined(s.styles) ? {} : s.styles\n };\n };\n var merge = function (defnA, mod) {\n return __assign(__assign({}, defnA), {\n attributes: __assign(__assign({}, defnA.attributes), mod.attributes),\n styles: __assign(__assign({}, defnA.styles), mod.styles),\n classes: defnA.classes.concat(mod.classes)\n });\n };\n\n var combine$2 = function (info, baseMod, behaviours, base) {\n var modsByBehaviour = __assign({}, baseMod);\n each$1(behaviours, function (behaviour) {\n modsByBehaviour[behaviour.name()] = behaviour.exhibit(info, base);\n });\n var byAspect = byInnerKey(modsByBehaviour, function (name, modification) {\n return {\n name: name,\n modification: modification\n };\n });\n var combineObjects = function (objects) {\n return foldr(objects, function (b, a) {\n return __assign(__assign({}, a.modification), b);\n }, {});\n };\n var combinedClasses = foldr(byAspect.classes, function (b, a) {\n return a.modification.concat(b);\n }, []);\n var combinedAttributes = combineObjects(byAspect.attributes);\n var combinedStyles = combineObjects(byAspect.styles);\n return nu$7({\n classes: combinedClasses,\n attributes: combinedAttributes,\n styles: combinedStyles\n });\n };\n\n var sortKeys = function (label, keyName, array, order) {\n try {\n var sorted = sort(array, function (a, b) {\n var aKey = a[keyName];\n var bKey = b[keyName];\n var aIndex = order.indexOf(aKey);\n var 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 var uncurried = function (handler, purpose) {\n return {\n handler: handler,\n purpose: purpose\n };\n };\n var curried = function (handler, purpose) {\n return {\n cHandler: handler,\n purpose: purpose\n };\n };\n var curryArgs = function (descHandler, extraArgs) {\n return curried(curry.apply(undefined, [descHandler.handler].concat(extraArgs)), descHandler.purpose);\n };\n var getCurried = function (descHandler) {\n return descHandler.cHandler;\n };\n\n var behaviourTuple = function (name, handler) {\n return {\n name: name,\n handler: handler\n };\n };\n var nameToHandlers = function (behaviours, info) {\n var r = {};\n each$1(behaviours, function (behaviour) {\n r[behaviour.name()] = behaviour.handlers(info);\n });\n return r;\n };\n var groupByEvents = function (info, behaviours, base) {\n var behaviourEvents = __assign(__assign({}, base), nameToHandlers(behaviours, info));\n return byInnerKey(behaviourEvents, behaviourTuple);\n };\n var combine$1 = function (info, eventOrder, behaviours, base) {\n var byEventName = groupByEvents(info, behaviours, base);\n return combineGroups(byEventName, eventOrder);\n };\n var assemble = function (rawHandler) {\n var handler = read$2(rawHandler);\n return function (component, simulatedEvent) {\n var rest = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n rest[_i - 2] = arguments[_i];\n }\n var 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 var missingOrderError = function (eventName, tuples) {\n return 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, function (c) {\n return c.name;\n }), null, 2)]);\n };\n var fuse = function (tuples, eventOrder, eventName) {\n var order = eventOrder[eventName];\n if (!order) {\n return missingOrderError(eventName, tuples);\n } else {\n return sortKeys('Event: ' + eventName, 'name', tuples, order).map(function (sortedTuples) {\n var handlers = map$2(sortedTuples, function (tuple) {\n return tuple.handler;\n });\n return fuse$1(handlers);\n });\n }\n };\n var combineGroups = function (byEventName, eventOrder) {\n var r = mapToArray(byEventName, function (tuples, eventName) {\n var combined = tuples.length === 1 ? Result.value(tuples[0].handler) : fuse(tuples, eventOrder, eventName);\n return combined.map(function (handler) {\n var assembled = assemble(handler);\n var purpose = tuples.length > 1 ? filter$2(eventOrder[eventName], function (o) {\n return exists(tuples, function (t) {\n return t.name === o;\n });\n }).join(' > ') : tuples[0].name;\n return wrap$1(eventName, uncurried(assembled, purpose));\n });\n });\n return consolidate(r, {});\n };\n\n var _a$2;\n var baseBehaviour = 'alloy.base.behaviour';\n var 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('value'),\n option('innerHtml')\n ])),\n required$1('components'),\n required$1('uid'),\n defaulted('events', {}),\n defaulted('apis', {}),\n field$1('eventOrder', 'eventOrder', mergeWith((_a$2 = {}, _a$2[execute$5()] = [\n 'disabling',\n baseBehaviour,\n 'toggling',\n 'typeaheadevents'\n ], _a$2[focus$4()] = [\n baseBehaviour,\n 'focusing',\n 'keying'\n ], _a$2[systemInit()] = [\n baseBehaviour,\n 'disabling',\n 'toggling',\n 'representing'\n ], _a$2[input()] = [\n baseBehaviour,\n 'representing',\n 'streaming',\n 'invalidating'\n ], _a$2[detachedFromDom()] = [\n baseBehaviour,\n 'representing',\n 'item-events',\n 'tooltipping'\n ], _a$2[mousedown()] = [\n 'focusing',\n baseBehaviour,\n 'item-type-events'\n ], _a$2[touchstart()] = [\n 'focusing',\n baseBehaviour,\n 'item-type-events'\n ], _a$2[mouseover()] = [\n 'item-type-events',\n 'tooltipping'\n ], _a$2[receive()] = [\n 'receiving',\n 'reflecting',\n 'tooltipping'\n ], _a$2)), anyValue()),\n option('domModification')\n ]);\n var toInfo = function (spec) {\n return asRaw('custom.definition', schema$z, spec);\n };\n var toDefinition = function (detail) {\n return __assign(__assign({}, detail.dom), {\n uid: detail.uid,\n domChildren: map$2(detail.components, function (comp) {\n return comp.element;\n })\n });\n };\n var toModification = function (detail) {\n return detail.domModification.fold(function () {\n return nu$7({});\n }, nu$7);\n };\n var toEvents = function (info) {\n return info.events;\n };\n\n var read = function (element, attr) {\n var value = get$d(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n var add$4 = function (element, attr, id) {\n var old = read(element, attr);\n var nu = old.concat([id]);\n set$8(element, attr, nu.join(' '));\n return true;\n };\n var remove$4 = function (element, attr, id) {\n var nu = filter$2(read(element, attr), function (v) {\n return v !== id;\n });\n if (nu.length > 0) {\n set$8(element, attr, nu.join(' '));\n } else {\n remove$7(element, attr);\n }\n return false;\n };\n\n var supports = function (element) {\n return element.dom.classList !== undefined;\n };\n var get$6 = function (element) {\n return read(element, 'class');\n };\n var add$3 = function (element, clazz) {\n return add$4(element, 'class', clazz);\n };\n var remove$3 = function (element, clazz) {\n return remove$4(element, 'class', clazz);\n };\n\n var add$2 = function (element, clazz) {\n if (supports(element)) {\n element.dom.classList.add(clazz);\n } else {\n add$3(element, clazz);\n }\n };\n var cleanClass = function (element) {\n var classList = supports(element) ? element.dom.classList : get$6(element);\n if (classList.length === 0) {\n remove$7(element, 'class');\n }\n };\n var remove$2 = function (element, clazz) {\n if (supports(element)) {\n var classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$3(element, clazz);\n }\n cleanClass(element);\n };\n var has = function (element, clazz) {\n return supports(element) && element.dom.classList.contains(clazz);\n };\n\n var add$1 = function (element, classes) {\n each$1(classes, function (x) {\n add$2(element, x);\n });\n };\n var remove$1 = function (element, classes) {\n each$1(classes, function (x) {\n remove$2(element, x);\n });\n };\n var hasAll = function (element, classes) {\n return forall(classes, function (clazz) {\n return has(element, clazz);\n });\n };\n\n var get$5 = function (element) {\n return element.dom.value;\n };\n var set$4 = function (element, value) {\n if (value === undefined) {\n throw new Error('Value.set was undefined');\n }\n element.dom.value = value;\n };\n\n var renderToDom = function (definition) {\n var 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(function (html) {\n return set$5(subject, html);\n });\n var children = definition.domChildren;\n append$1(subject, children);\n definition.value.each(function (value) {\n set$4(subject, value);\n });\n if (!definition.uid) {\n debugger;\n }\n writeOnly(subject, definition.uid);\n return subject;\n };\n\n var getBehaviours$2 = function (spec) {\n var behaviours = get$e(spec, 'behaviours').getOr({});\n return bind$3(keys(behaviours), function (name) {\n var behaviour = behaviours[name];\n return isNonNullable(behaviour) ? [behaviour.me] : [];\n });\n };\n var generateFrom = function (spec, all) {\n return generateFrom$1(spec, all);\n };\n var generate$4 = function (spec) {\n var all = getBehaviours$2(spec);\n return generateFrom(spec, all);\n };\n\n var getDomDefinition = function (info, bList, bData) {\n var definition = toDefinition(info);\n var infoModification = toModification(info);\n var baseModification = { 'alloy.base.modification': infoModification };\n var modification = bList.length > 0 ? combine$2(bData, baseModification, bList, definition) : infoModification;\n return merge(definition, modification);\n };\n var getEvents = function (info, bList, bData) {\n var baseEvents = { 'alloy.base.behaviour': toEvents(info) };\n return combine$1(bData, info.eventOrder, bList, baseEvents).getOrDie();\n };\n var build$2 = function (spec) {\n var getMe = function () {\n return me;\n };\n var systemApi = Cell(singleton$1);\n var info = getOrDie(toInfo(spec));\n var bBlob = generate$4(spec);\n var bList = getBehaviours$3(bBlob);\n var bData = getData$2(bBlob);\n var modDefinition = getDomDefinition(info, bList, bData);\n var item = renderToDom(modDefinition);\n var events = getEvents(info, bList, bData);\n var subcomponents = Cell(info.components);\n var connect = function (newApi) {\n systemApi.set(newApi);\n };\n var disconnect = function () {\n systemApi.set(NoContextApi(getMe));\n };\n var syncComponents = function () {\n var children$1 = children(item);\n var subs = bind$3(children$1, function (child) {\n return systemApi.get().getByDom(child).fold(function () {\n return [];\n }, pure$2);\n });\n subcomponents.set(subs);\n };\n var config = function (behaviour) {\n var b = bData;\n var f = isFunction(b[behaviour.name()]) ? b[behaviour.name()] : function () {\n throw new Error('Could not find ' + behaviour.name() + ' in ' + JSON.stringify(spec, null, 2));\n };\n return f();\n };\n var hasConfigured = function (behaviour) {\n return isFunction(bData[behaviour.name()]);\n };\n var getApis = function () {\n return info.apis;\n };\n var readState = function (behaviourName) {\n return bData[behaviourName]().map(function (b) {\n return b.state.readState();\n }).getOr('not enabled');\n };\n var me = {\n uid: spec.uid,\n getSystem: systemApi.get,\n config: config,\n hasConfigured: hasConfigured,\n spec: spec,\n readState: readState,\n getApis: getApis,\n connect: connect,\n disconnect: disconnect,\n element: item,\n syncComponents: syncComponents,\n components: subcomponents.get,\n events: events\n };\n return me;\n };\n\n var buildSubcomponents = function (spec) {\n var components = get$e(spec, 'components').getOr([]);\n return map$2(components, build$1);\n };\n var buildFromSpec = function (userSpec) {\n var _a = make$8(userSpec), specEvents = _a.events, spec = __rest(_a, ['events']);\n var components = buildSubcomponents(spec);\n var completeSpec = __assign(__assign({}, spec), {\n events: __assign(__assign({}, DefaultEvents), specEvents),\n components: components\n });\n return Result.value(build$2(completeSpec));\n };\n var text$1 = function (textContent) {\n var element = SugarElement.fromText(textContent);\n return external$2({ element: element });\n };\n var external$2 = function (spec) {\n var extSpec = asRawOrDie$1('external.component', objOfOnly([\n required$1('element'),\n option('uid')\n ]), spec);\n var systemApi = Cell(NoContextApi());\n var connect = function (newApi) {\n systemApi.set(newApi);\n };\n var disconnect = function () {\n systemApi.set(NoContextApi(function () {\n return me;\n }));\n };\n var uid = extSpec.uid.getOrThunk(function () {\n return generate$5('external');\n });\n writeOnly(extSpec.element, uid);\n var me = {\n uid: uid,\n getSystem: systemApi.get,\n config: Optional.none,\n hasConfigured: never,\n connect: connect,\n disconnect: disconnect,\n getApis: function () {\n return {};\n },\n element: extSpec.element,\n spec: spec,\n readState: constant$1('No state'),\n syncComponents: noop,\n components: constant$1([]),\n events: {}\n };\n return premade$1(me);\n };\n var uids = generate$5;\n var isSketchSpec$1 = function (spec) {\n return has$2(spec, 'uid');\n };\n var build$1 = function (spec) {\n return getPremade(spec).getOrThunk(function () {\n var userSpecWithUid = isSketchSpec$1(spec) ? spec : __assign({ uid: uids('') }, spec);\n return buildFromSpec(userSpecWithUid).getOrDie();\n });\n };\n var premade = premade$1;\n\n function 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 var ancestor$1 = function (scope, predicate, isRoot) {\n var element = scope.dom;\n var stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n var 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 var closest$3 = function (scope, predicate, isRoot) {\n var is = function (s, test) {\n return test(s);\n };\n return ClosestOrAncestor(is, ancestor$1, scope, predicate, isRoot);\n };\n var child$1 = function (scope, predicate) {\n var pred = function (node) {\n return predicate(SugarElement.fromDom(node));\n };\n var result = find$5(scope.dom.childNodes, pred);\n return result.map(SugarElement.fromDom);\n };\n var descendant$1 = function (scope, predicate) {\n var descend = function (node) {\n for (var i = 0; i < node.childNodes.length; i++) {\n var child_1 = SugarElement.fromDom(node.childNodes[i]);\n if (predicate(child_1)) {\n return Optional.some(child_1);\n }\n var 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 var closest$2 = function (scope, predicate, isRoot) {\n return closest$3(scope, predicate, isRoot).isSome();\n };\n\n var ancestor = function (scope, selector, isRoot) {\n return ancestor$1(scope, function (e) {\n return is(e, selector);\n }, isRoot);\n };\n var child = function (scope, selector) {\n return child$1(scope, function (e) {\n return is(e, selector);\n });\n };\n var descendant = function (scope, selector) {\n return one(selector, scope);\n };\n var closest$1 = function (scope, selector, isRoot) {\n var is$1 = function (element, selector) {\n return is(element, selector);\n };\n return ClosestOrAncestor(is$1, ancestor, scope, selector, isRoot);\n };\n\n var find$1 = function (queryElem) {\n var dependent = closest$3(queryElem, function (elem) {\n if (!isElement$2(elem)) {\n return false;\n }\n var id = get$d(elem, 'id');\n return id !== undefined && id.indexOf('aria-owns') > -1;\n });\n return dependent.bind(function (dep) {\n var id = get$d(dep, 'id');\n var dos = getRootNode(dep);\n return descendant(dos, '[aria-owns=\"' + id + '\"]');\n });\n };\n var manager = function () {\n var ariaId = generate$6('aria-owns');\n var link = function (elem) {\n set$8(elem, 'aria-owns', ariaId);\n };\n var unlink = function (elem) {\n remove$7(elem, 'aria-owns');\n };\n return {\n id: ariaId,\n link: link,\n unlink: unlink\n };\n };\n\n var isAriaPartOf = function (component, queryElem) {\n return find$1(queryElem).exists(function (owner) {\n return isPartOf$1(component, owner);\n });\n };\n var isPartOf$1 = function (component, queryElem) {\n return closest$2(queryElem, function (el) {\n return eq(el, component.element);\n }, never) || isAriaPartOf(component, queryElem);\n };\n\n var 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 var eventConfig = Cell({});\n var makeEventLogger = function (eventName, initialTarget) {\n var sequence = [];\n var startTime = new Date().getTime();\n return {\n logEventCut: function (_name, target, purpose) {\n sequence.push({\n outcome: 'cut',\n target: target,\n purpose: purpose\n });\n },\n logEventStopped: function (_name, target, purpose) {\n sequence.push({\n outcome: 'stopped',\n target: target,\n purpose: purpose\n });\n },\n logNoParent: function (_name, target, purpose) {\n sequence.push({\n outcome: 'no-parent',\n target: target,\n purpose: purpose\n });\n },\n logEventNoHandlers: function (_name, target) {\n sequence.push({\n outcome: 'no-handlers-left',\n target: target\n });\n },\n logEventResponse: function (_name, target, purpose) {\n sequence.push({\n outcome: 'response',\n purpose: purpose,\n target: target\n });\n },\n write: function () {\n var 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, function (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 var processEvent = function (eventName, initialTarget, f) {\n var status = get$e(eventConfig.get(), eventName).orThunk(function () {\n var patterns = keys(eventConfig.get());\n return findMap(patterns, function (p) {\n return eventName.indexOf(p) > -1 ? Optional.some(eventConfig.get()[p]) : Optional.none();\n });\n }).getOr(EventConfiguration.NORMAL);\n switch (status) {\n case EventConfiguration.NORMAL:\n return f(noLogger());\n case EventConfiguration.LOGGING: {\n var logger = makeEventLogger(eventName, initialTarget);\n var output = f(logger);\n logger.write();\n return output;\n }\n case EventConfiguration.STOP:\n return true;\n }\n };\n var path = [\n 'alloy/data/Fields',\n 'alloy/debugging/Debugging'\n ];\n var getTrace = function () {\n var err = new Error();\n if (err.stack !== undefined) {\n var lines = err.stack.split('\\n');\n return find$5(lines, function (line) {\n return line.indexOf('alloy') > 0 && !exists(path, function (p) {\n return line.indexOf(p) > -1;\n });\n }).getOr(unknown);\n } else {\n return unknown;\n }\n };\n var ignoreEvent = {\n logEventCut: noop,\n logEventStopped: noop,\n logNoParent: noop,\n logEventNoHandlers: noop,\n logEventResponse: noop,\n write: noop\n };\n var monitorEvent = function (eventName, initialTarget, f) {\n return processEvent(eventName, initialTarget, f);\n };\n var noLogger = constant$1(ignoreEvent);\n\n var menuFields = constant$1([\n required$1('menu'),\n required$1('selectedMenu')\n ]);\n var itemFields = constant$1([\n required$1('item'),\n required$1('selectedItem')\n ]);\n constant$1(objOf(itemFields().concat(menuFields())));\n var itemSchema$3 = constant$1(objOf(itemFields()));\n\n var _initSize = requiredObjOf('initSize', [\n required$1('numColumns'),\n required$1('numRows')\n ]);\n var itemMarkers = function () {\n return requiredOf('markers', itemSchema$3());\n };\n var tieredMenuMarkers = function () {\n return requiredObjOf('markers', [required$1('backgroundMenu')].concat(menuFields()).concat(itemFields()));\n };\n var markers$1 = function (required) {\n return requiredObjOf('markers', map$2(required, required$1));\n };\n var onPresenceHandler = function (label, fieldName, presence) {\n getTrace();\n return field$1(fieldName, fieldName, presence, valueOf(function (f) {\n return Result.value(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return f.apply(undefined, args);\n });\n }));\n };\n var onHandler = function (fieldName) {\n return onPresenceHandler('onHandler', fieldName, defaulted$1(noop));\n };\n var onKeyboardHandler = function (fieldName) {\n return onPresenceHandler('onKeyboardHandler', fieldName, defaulted$1(Optional.none));\n };\n var onStrictHandler = function (fieldName) {\n return onPresenceHandler('onHandler', fieldName, required$2());\n };\n var onStrictKeyboardHandler = function (fieldName) {\n return onPresenceHandler('onKeyboardHandler', fieldName, required$2());\n };\n var output$1 = function (name, value) {\n return customField(name, constant$1(value));\n };\n var snapshot = function (name) {\n return customField(name, identity$1);\n };\n var initSize = constant$1(_initSize);\n\n var nu$6 = function (x, y, bubble, direction, placement, boundsRestriction, labelPrefix, alwaysFit) {\n if (alwaysFit === void 0) {\n alwaysFit = false;\n }\n return {\n x: x,\n y: y,\n bubble: bubble,\n direction: direction,\n placement: placement,\n restriction: boundsRestriction,\n label: labelPrefix + '-' + placement,\n alwaysFit: alwaysFit\n };\n };\n\n var adt$a = Adt.generate([\n { southeast: [] },\n { southwest: [] },\n { northeast: [] },\n { northwest: [] },\n { south: [] },\n { north: [] },\n { east: [] },\n { west: [] }\n ]);\n var cata$2 = function (subject, southeast, southwest, northeast, northwest, south, north, east, west) {\n return subject.fold(southeast, southwest, northeast, northwest, south, north, east, west);\n };\n var cataVertical = function (subject, south, middle, north) {\n return subject.fold(south, south, north, north, south, north, middle, middle);\n };\n var cataHorizontal = function (subject, east, middle, west) {\n return subject.fold(east, west, east, west, middle, middle, east, west);\n };\n var southeast$3 = adt$a.southeast;\n var southwest$3 = adt$a.southwest;\n var northeast$3 = adt$a.northeast;\n var northwest$3 = adt$a.northwest;\n var south$3 = adt$a.south;\n var north$3 = adt$a.north;\n var east$3 = adt$a.east;\n var west$3 = adt$a.west;\n\n var cycleBy = function (value, delta, min, max) {\n var 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 var clamp$1 = function (value, min, max) {\n return Math.min(Math.max(value, min), max);\n };\n\n var getRestriction = function (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 var boundsRestriction = function (anchor, restrictions) {\n return mapToObject([\n 'left',\n 'right',\n 'top',\n 'bottom'\n ], function (dir) {\n return get$e(restrictions, dir).map(function (restriction) {\n return getRestriction(anchor, restriction);\n });\n });\n };\n var adjustBounds = function (bounds$1, restriction, bubbleOffset) {\n var applyRestriction = function (dir, current) {\n return restriction[dir].map(function (pos) {\n var isVerticalAxis = dir === 'top' || dir === 'bottom';\n var offset = isVerticalAxis ? bubbleOffset.top : bubbleOffset.left;\n var comparator = dir === 'left' || dir === 'top' ? Math.max : Math.min;\n var newPos = comparator(pos, current) + offset;\n return isVerticalAxis ? clamp$1(newPos, bounds$1.y, bounds$1.bottom) : clamp$1(newPos, bounds$1.x, bounds$1.right);\n }).getOr(current);\n };\n var adjustedLeft = applyRestriction('left', bounds$1.x);\n var adjustedTop = applyRestriction('top', bounds$1.y);\n var adjustedRight = applyRestriction('right', bounds$1.right);\n var adjustedBottom = applyRestriction('bottom', bounds$1.bottom);\n return bounds(adjustedLeft, adjustedTop, adjustedRight - adjustedLeft, adjustedBottom - adjustedTop);\n };\n\n var labelPrefix$2 = 'layout';\n var eastX$1 = function (anchor) {\n return anchor.x;\n };\n var middleX$1 = function (anchor, element) {\n return anchor.x + anchor.width / 2 - element.width / 2;\n };\n var westX$1 = function (anchor, element) {\n return anchor.x + anchor.width - element.width;\n };\n var northY$2 = function (anchor, element) {\n return anchor.y - element.height;\n };\n var southY$2 = function (anchor) {\n return anchor.y + anchor.height;\n };\n var centreY$1 = function (anchor, element) {\n return anchor.y + anchor.height / 2 - element.height / 2;\n };\n var eastEdgeX$1 = function (anchor) {\n return anchor.x + anchor.width;\n };\n var westEdgeX$1 = function (anchor, element) {\n return anchor.x - element.width;\n };\n var southeast$2 = function (anchor, element, bubbles) {\n return 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 };\n var southwest$2 = function (anchor, element, bubbles) {\n return 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 };\n var northeast$2 = function (anchor, element, bubbles) {\n return 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 };\n var northwest$2 = function (anchor, element, bubbles) {\n return 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 };\n var north$2 = function (anchor, element, bubbles) {\n return nu$6(middleX$1(anchor, element), northY$2(anchor, element), bubbles.north(), north$3(), 'north', boundsRestriction(anchor, { bottom: 2 }), labelPrefix$2);\n };\n var south$2 = function (anchor, element, bubbles) {\n return nu$6(middleX$1(anchor, element), southY$2(anchor), bubbles.south(), south$3(), 'south', boundsRestriction(anchor, { top: 3 }), labelPrefix$2);\n };\n var east$2 = function (anchor, element, bubbles) {\n return nu$6(eastEdgeX$1(anchor), centreY$1(anchor, element), bubbles.east(), east$3(), 'east', boundsRestriction(anchor, { left: 0 }), labelPrefix$2);\n };\n var west$2 = function (anchor, element, bubbles) {\n return nu$6(westEdgeX$1(anchor, element), centreY$1(anchor, element), bubbles.west(), west$3(), 'west', boundsRestriction(anchor, { right: 1 }), labelPrefix$2);\n };\n var all$1 = function () {\n return [\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 };\n var allRtl$1 = function () {\n return [\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 };\n var aboveOrBelow = function () {\n return [\n northeast$2,\n northwest$2,\n southeast$2,\n southwest$2,\n north$2,\n south$2\n ];\n };\n var aboveOrBelowRtl = function () {\n return [\n northwest$2,\n northeast$2,\n southwest$2,\n southeast$2,\n north$2,\n south$2\n ];\n };\n var belowOrAbove = function () {\n return [\n southeast$2,\n southwest$2,\n northeast$2,\n northwest$2,\n south$2,\n north$2\n ];\n };\n var belowOrAboveRtl = function () {\n return [\n southwest$2,\n southeast$2,\n northwest$2,\n northeast$2,\n south$2,\n north$2\n ];\n };\n\n var chooseChannels = function (channels, message) {\n return message.universal ? channels : filter$2(channels, function (ch) {\n return contains$2(message.channels, ch);\n });\n };\n var events$h = function (receiveConfig) {\n return derive$2([run$1(receive(), function (component, message) {\n var channelMap = receiveConfig.channels;\n var channels = keys(channelMap);\n var receivingData = message;\n var targetChannels = chooseChannels(channels, receivingData);\n each$1(targetChannels, function (ch) {\n var channelInfo = channelMap[ch];\n var channelSchema = channelInfo.schema;\n var data = asRawOrDie$1('channel[' + ch + '] data\\nReceiver: ' + element(component.element), channelSchema, receivingData.data);\n channelInfo.onReceive(component, data);\n });\n })]);\n };\n\n var ActiveReceiving = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$h\n });\n\n var ReceivingSchema = [requiredOf('channels', setOf(Result.value, objOfOnly([\n onStrictHandler('onReceive'),\n defaulted('schema', anyValue())\n ])))];\n\n var executeEvent = function (bConfig, bState, executor) {\n return runOnExecute$1(function (component) {\n executor(component, bConfig, bState);\n });\n };\n var loadEvent = function (bConfig, bState, f) {\n return runOnInit(function (component, _simulatedEvent) {\n f(component, bConfig, bState);\n });\n };\n var create$9 = function (schema, name, active, apis, extra, state) {\n var configSchema = objOfOnly(schema);\n var schemaSchema = optionObjOf(name, [optionObjOfOnly('config', schema)]);\n return doCreate(configSchema, schemaSchema, name, active, apis, extra, state);\n };\n var createModes$1 = function (modes, name, active, apis, extra, state) {\n var configSchema = modes;\n var schemaSchema = optionObjOf(name, [optionOf('config', modes)]);\n return doCreate(configSchema, schemaSchema, name, active, apis, extra, state);\n };\n var wrapApi = function (bName, apiFunction, apiName) {\n var f = function (component) {\n var rest = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n var args = [component].concat(rest);\n return component.config({ name: constant$1(bName) }).fold(function () {\n throw new Error('We could not find any behaviour configuration for: ' + bName + '. Using API: ' + apiName);\n }, function (info) {\n var 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 var revokeBehaviour = function (name) {\n return {\n key: name,\n value: undefined\n };\n };\n var doCreate = function (configSchema, schemaSchema, name, active, apis, extra, state) {\n var getConfig = function (info) {\n return hasNonNullableKey(info, name) ? info[name]() : Optional.none();\n };\n var wrappedApis = map$1(apis, function (apiF, apiName) {\n return wrapApi(name, apiF, apiName);\n });\n var wrappedExtra = map$1(extra, function (extraF, extraName) {\n return markAsExtraApi(extraF, extraName);\n });\n var me = __assign(__assign(__assign({}, wrappedExtra), wrappedApis), {\n revoke: curry(revokeBehaviour, name),\n config: function (spec) {\n var prepared = asRawOrDie$1(name + '-config', configSchema, spec);\n return {\n key: name,\n value: {\n config: prepared,\n me: me,\n configAsRaw: cached(function () {\n return asRawOrDie$1(name + '-config', configSchema, spec);\n }),\n initialConfig: spec,\n state: state\n }\n };\n },\n schema: constant$1(schemaSchema),\n exhibit: function (info, base) {\n return lift2(getConfig(info), get$e(active, 'exhibit'), function (behaviourInfo, exhibitor) {\n return exhibitor(base, behaviourInfo.config, behaviourInfo.state);\n }).getOrThunk(function () {\n return nu$7({});\n });\n },\n name: constant$1(name),\n handlers: function (info) {\n return getConfig(info).map(function (behaviourInfo) {\n var getEvents = get$e(active, 'events').getOr(function () {\n return {};\n });\n return getEvents(behaviourInfo.config, behaviourInfo.state);\n }).getOr({});\n }\n });\n return me;\n };\n\n var derive$1 = function (capabilities) {\n return wrapAll(capabilities);\n };\n var 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 var create$8 = function (data) {\n var value = asRawOrDie$1('Creating behaviour: ' + data.name, simpleSchema, data);\n return create$9(value.fields, value.name, value.active, value.apis, value.extra, value.state);\n };\n var 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 var createModes = function (data) {\n var 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 var revoke = constant$1(undefined);\n\n var Receiving = create$8({\n fields: ReceivingSchema,\n name: 'receiving',\n active: ActiveReceiving\n });\n\n var exhibit$6 = function (base, posConfig) {\n return nu$7({\n classes: [],\n styles: posConfig.useFixed() ? {} : { position: 'relative' }\n });\n };\n\n var ActivePosition = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$6\n });\n\n var getDocument = function () {\n return SugarElement.fromDom(document);\n };\n\n var focus$3 = function (element) {\n return element.dom.focus();\n };\n var blur$1 = function (element) {\n return element.dom.blur();\n };\n var hasFocus = function (element) {\n var root = getRootNode(element).dom;\n return element.dom === root.activeElement;\n };\n var active = function (root) {\n if (root === void 0) {\n root = getDocument();\n }\n return Optional.from(root.dom.activeElement).map(SugarElement.fromDom);\n };\n var search = function (element) {\n return active(getRootNode(element)).filter(function (e) {\n return element.dom.contains(e.dom);\n });\n };\n\n var preserve$1 = function (f, container) {\n var dos = getRootNode(container);\n var refocus = active(dos).bind(function (focused) {\n var hasFocus = function (elem) {\n return eq(focused, elem);\n };\n return hasFocus(container) ? Optional.some(container) : descendant$1(container, hasFocus);\n });\n var result = f(container);\n refocus.each(function (oldFocus) {\n active(dos).filter(function (newFocus) {\n return eq(newFocus, oldFocus);\n }).fold(function () {\n focus$3(oldFocus);\n }, noop);\n });\n return result;\n };\n\n var NuPositionCss = function (position, left, top, right, bottom) {\n var toPx = function (num) {\n return num + 'px';\n };\n return {\n position: position,\n left: left.map(toPx),\n top: top.map(toPx),\n right: right.map(toPx),\n bottom: bottom.map(toPx)\n };\n };\n var toOptions = function (position) {\n return __assign(__assign({}, position), { position: Optional.some(position.position) });\n };\n var applyPositionCss = function (element, position) {\n setOptions(element, toOptions(position));\n };\n\n var 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 var positionWithDirection = function (posName, decision, x, y, width, height) {\n var decisionRect = decision.rect;\n var decisionX = decisionRect.x - x;\n var decisionY = decisionRect.y - y;\n var decisionWidth = decisionRect.width;\n var decisionHeight = decisionRect.height;\n var decisionRight = width - (decisionX + decisionWidth);\n var decisionBottom = height - (decisionY + decisionHeight);\n var left = Optional.some(decisionX);\n var top = Optional.some(decisionY);\n var right = Optional.some(decisionRight);\n var bottom = Optional.some(decisionBottom);\n var none = Optional.none();\n return cata$2(decision.direction, function () {\n return NuPositionCss(posName, left, top, none, none);\n }, function () {\n return NuPositionCss(posName, none, top, right, none);\n }, function () {\n return NuPositionCss(posName, left, none, none, bottom);\n }, function () {\n return NuPositionCss(posName, none, none, right, bottom);\n }, function () {\n return NuPositionCss(posName, left, top, none, none);\n }, function () {\n return NuPositionCss(posName, left, none, none, bottom);\n }, function () {\n return NuPositionCss(posName, left, top, none, none);\n }, function () {\n return NuPositionCss(posName, none, top, right, none);\n });\n };\n var reposition = function (origin, decision) {\n return origin.fold(function () {\n var decisionRect = decision.rect;\n return NuPositionCss('absolute', Optional.some(decisionRect.x), Optional.some(decisionRect.y), Optional.none(), Optional.none());\n }, function (x, y, width, height) {\n return positionWithDirection('absolute', decision, x, y, width, height);\n }, function (x, y, width, height) {\n return positionWithDirection('fixed', decision, x, y, width, height);\n });\n };\n var toBox = function (origin, element) {\n var rel = curry(find$2, element);\n var position = origin.fold(rel, rel, function () {\n var scroll = get$9();\n return find$2(element).translate(-scroll.left, -scroll.top);\n });\n var width = getOuter$1(element);\n var height = getOuter$2(element);\n return bounds(position.left, position.top, width, height);\n };\n var viewport = function (origin, getBounds) {\n return getBounds.fold(function () {\n return origin.fold(win, win, bounds);\n }, function (b) {\n return origin.fold(b, b, function () {\n var bounds$1 = b();\n var 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 });\n };\n var translate$2 = function (origin, x, y) {\n var pos = SugarPosition(x, y);\n var removeScroll = function () {\n var outerScroll = get$9();\n return pos.translate(-outerScroll.left, -outerScroll.top);\n };\n return origin.fold(constant$1(pos), constant$1(pos), removeScroll);\n };\n var cata$1 = function (subject, onNone, onRelative, onFixed) {\n return subject.fold(onNone, onRelative, onFixed);\n };\n adt$9.none;\n var relative$1 = adt$9.relative;\n var fixed$1 = adt$9.fixed;\n\n var anchor = function (anchorBox, origin) {\n return {\n anchorBox: anchorBox,\n origin: origin\n };\n };\n var box = function (anchorBox, origin) {\n return anchor(anchorBox, origin);\n };\n\n var placementAttribute = 'data-alloy-placement';\n var setPlacement$1 = function (element, placement) {\n set$8(element, placementAttribute, placement);\n };\n var getPlacement = function (element) {\n return getOpt(element, placementAttribute);\n };\n var reset$2 = function (element) {\n return remove$7(element, placementAttribute);\n };\n\n var adt$8 = Adt.generate([\n { fit: ['reposition'] },\n {\n nofit: [\n 'reposition',\n 'visibleW',\n 'visibleH',\n 'isVisible'\n ]\n }\n ]);\n var determinePosition = function (box, bounds) {\n var boundsX = bounds.x, boundsY = bounds.y, boundsRight = bounds.right, boundsBottom = bounds.bottom;\n var x = box.x, y = box.y, right = box.right, bottom = box.bottom, width = box.width, height = box.height;\n var xInBounds = x >= boundsX && x <= boundsRight;\n var yInBounds = y >= boundsY && y <= boundsBottom;\n var originInBounds = xInBounds && yInBounds;\n var rightInBounds = right <= boundsRight && right >= boundsX;\n var bottomInBounds = bottom <= boundsBottom && bottom >= boundsY;\n var sizeInBounds = rightInBounds && bottomInBounds;\n var visibleW = Math.min(width, x >= boundsX ? boundsRight - x : right - boundsX);\n var visibleH = Math.min(height, y >= boundsY ? boundsBottom - y : bottom - boundsY);\n return {\n originInBounds: originInBounds,\n sizeInBounds: sizeInBounds,\n visibleW: visibleW,\n visibleH: visibleH\n };\n };\n var calcReposition = function (box, bounds$1) {\n var boundsX = bounds$1.x, boundsY = bounds$1.y, boundsRight = bounds$1.right, boundsBottom = bounds$1.bottom;\n var x = box.x, y = box.y, width = box.width, height = box.height;\n var maxX = Math.max(boundsX, boundsRight - width);\n var maxY = Math.max(boundsY, boundsBottom - height);\n var restrictedX = clamp$1(x, boundsX, maxX);\n var restrictedY = clamp$1(y, boundsY, maxY);\n var restrictedWidth = Math.min(restrictedX + width, boundsRight) - restrictedX;\n var restrictedHeight = Math.min(restrictedY + height, boundsBottom) - restrictedY;\n return bounds(restrictedX, restrictedY, restrictedWidth, restrictedHeight);\n };\n var calcMaxSizes = function (direction, box, bounds) {\n var upAvailable = constant$1(box.bottom - bounds.y);\n var downAvailable = constant$1(bounds.bottom - box.y);\n var maxHeight = cataVertical(direction, downAvailable, downAvailable, upAvailable);\n var westAvailable = constant$1(box.right - bounds.x);\n var eastAvailable = constant$1(bounds.right - box.x);\n var maxWidth = cataHorizontal(direction, eastAvailable, eastAvailable, westAvailable);\n return {\n maxWidth: maxWidth,\n maxHeight: maxHeight\n };\n };\n var attempt = function (candidate, width, height, bounds$1) {\n var bubble = candidate.bubble;\n var bubbleOffset = bubble.offset;\n var adjustedBounds = adjustBounds(bounds$1, candidate.restriction, bubbleOffset);\n var newX = candidate.x + bubbleOffset.left;\n var newY = candidate.y + bubbleOffset.top;\n var box = bounds(newX, newY, width, height);\n var _a = determinePosition(box, adjustedBounds), originInBounds = _a.originInBounds, sizeInBounds = _a.sizeInBounds, visibleW = _a.visibleW, visibleH = _a.visibleH;\n var fits = originInBounds && sizeInBounds;\n var fittedBox = fits ? box : calcReposition(box, adjustedBounds);\n var isPartlyVisible = fittedBox.width > 0 && fittedBox.height > 0;\n var _b = calcMaxSizes(candidate.direction, fittedBox, bounds$1), maxWidth = _b.maxWidth, maxHeight = _b.maxHeight;\n var reposition = {\n rect: fittedBox,\n maxHeight: maxHeight,\n maxWidth: 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 var attempts = function (element, candidates, anchorBox, elementBox, bubbles, bounds) {\n var panelWidth = elementBox.width;\n var panelHeight = elementBox.height;\n var attemptBestFit = function (layout, reposition, visibleW, visibleH, isVisible) {\n var next = layout(anchorBox, elementBox, bubbles, element, bounds);\n var attemptLayout = attempt(next, panelWidth, panelHeight, bounds);\n return attemptLayout.fold(constant$1(attemptLayout), function (newReposition, newVisibleW, newVisibleH, newIsVisible) {\n var improved = isVisible === newIsVisible ? newVisibleH > visibleH || newVisibleW > visibleW : !isVisible && newIsVisible;\n return improved ? attemptLayout : adt$8.nofit(reposition, visibleW, visibleH, isVisible);\n });\n };\n var abc = foldl(candidates, function (b, a) {\n var 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$1, identity$1);\n };\n\n var singleton = function (doRevoke) {\n var subject = Cell(Optional.none());\n var revoke = function () {\n return subject.get().each(doRevoke);\n };\n var clear = function () {\n revoke();\n subject.set(Optional.none());\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n var get = function () {\n return subject.get();\n };\n var set = function (s) {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear: clear,\n isSet: isSet,\n get: get,\n set: set\n };\n };\n var destroyable = function () {\n return singleton(function (s) {\n return s.destroy();\n });\n };\n var unbindable = function () {\n return singleton(function (s) {\n return s.unbind();\n });\n };\n var api$1 = function () {\n var subject = destroyable();\n var run = function (f) {\n return subject.get().each(f);\n };\n return __assign(__assign({}, subject), { run: run });\n };\n var value$1 = function () {\n var subject = singleton(noop);\n var on = function (f) {\n return subject.get().each(f);\n };\n return __assign(__assign({}, subject), { on: on });\n };\n\n var filter = always;\n var bind = function (element, event, handler) {\n return bind$2(element, event, filter, handler);\n };\n var capture = function (element, event, handler) {\n return capture$1(element, event, filter, handler);\n };\n var fromRawEvent = fromRawEvent$1;\n\n var properties = [\n 'top',\n 'bottom',\n 'right',\n 'left'\n ];\n var timerAttr = 'data-alloy-transition-timer';\n var isTransitioning$1 = function (element, transition) {\n return hasAll(element, transition.classes);\n };\n var shouldApplyTransitionCss = function (transition, decision, lastPlacement) {\n return lastPlacement.exists(function (placer) {\n var mode = transition.mode;\n return mode === 'all' ? true : placer[mode] !== decision[mode];\n });\n };\n var hasChanges = function (position, intermediate) {\n var round = function (value) {\n return parseFloat(value).toFixed(3);\n };\n return find$4(intermediate, function (value, key) {\n var newValue = position[key].map(round);\n var val = value.map(round);\n return !equals(newValue, val);\n }).isSome();\n };\n var getTransitionDuration = function (element) {\n var get = function (name) {\n var style = get$c(element, name);\n var times = isString(style) ? style.split(/\\s*,\\s*/) : [];\n return filter$2(times, isNotEmpty);\n };\n var parse = function (value) {\n if (isString(value) && /^[\\d.]+/.test(value)) {\n var num = parseFloat(value);\n return endsWith(value, 'ms') ? num : num * 1000;\n } else {\n return 0;\n }\n };\n var delay = get('transition-delay');\n var duration = get('transition-duration');\n return foldl(duration, function (acc, dur, i) {\n var time = parse(delay[i]) + parse(dur);\n return Math.max(acc, time);\n }, 0);\n };\n var setupTransitionListeners = function (element, transition) {\n var transitionEnd = unbindable();\n var transitionCancel = unbindable();\n var timer;\n var isSourceTransition = function (e) {\n var _a;\n var 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 var transitionDone = function (e) {\n if (isNullable(e) || isSourceTransition(e)) {\n transitionEnd.clear();\n transitionCancel.clear();\n var type = e === null || e === void 0 ? void 0 : e.raw.type;\n if (isNullable(type) || type === transitionend()) {\n clearTimeout(timer);\n remove$7(element, timerAttr);\n remove$1(element, transition.classes);\n }\n }\n };\n var transitionStarted = function () {\n transitionEnd.set(bind(element, transitionend(), transitionDone));\n transitionCancel.set(bind(element, transitioncancel(), transitionDone));\n };\n if ('ontransitionstart' in element.dom) {\n var transitionStart_1 = bind(element, transitionstart(), function (e) {\n if (isSourceTransition(e)) {\n transitionStart_1.unbind();\n transitionStarted();\n }\n });\n } else {\n transitionStarted();\n }\n var duration = getTransitionDuration(element);\n requestAnimationFrame(function () {\n timer = setTimeout(transitionDone, duration + 17);\n set$8(element, timerAttr, timer);\n });\n };\n var startTransitioning = function (element, transition) {\n add$1(element, transition.classes);\n getOpt(element, timerAttr).each(function (timerId) {\n clearTimeout(parseInt(timerId, 10));\n remove$7(element, timerAttr);\n });\n setupTransitionListeners(element, transition);\n };\n var applyTransitionCss = function (element, origin, position, transition, decision, lastPlacement) {\n var shouldTransition = shouldApplyTransitionCss(transition, decision, lastPlacement);\n if (shouldTransition || isTransitioning$1(element, transition)) {\n set$7(element, 'position', position.position);\n var rect = toBox(origin, element);\n var intermediatePosition_1 = reposition(origin, __assign(__assign({}, decision), { rect: rect }));\n var intermediateCssOptions = mapToObject(properties, function (prop) {\n return intermediatePosition_1[prop];\n });\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$1(element, transition.classes);\n }\n };\n\n var elementSize = function (p) {\n return {\n width: getOuter$1(p),\n height: getOuter$2(p)\n };\n };\n var layout = function (anchorBox, element, bubbles, options) {\n remove$6(element, 'max-height');\n remove$6(element, 'max-width');\n var elementBox = elementSize(element);\n return attempts(element, options.preference, anchorBox, elementBox, bubbles, options.bounds);\n };\n var setClasses = function (element, decision) {\n var classInfo = decision.classes;\n remove$1(element, classInfo.off);\n add$1(element, classInfo.on);\n };\n var setHeight = function (element, decision, options) {\n var maxHeightFunction = options.maxHeightFunction;\n maxHeightFunction(element, decision.maxHeight);\n };\n var setWidth = function (element, decision, options) {\n var maxWidthFunction = options.maxWidthFunction;\n maxWidthFunction(element, decision.maxWidth);\n };\n var position$2 = function (element, decision, options) {\n var positionCss = reposition(options.origin, decision);\n options.transition.each(function (transition) {\n applyTransitionCss(element, options.origin, positionCss, transition, decision, options.lastPlacement);\n });\n applyPositionCss(element, positionCss);\n };\n var setPlacement = function (element, decision) {\n setPlacement$1(element, decision.placement);\n };\n\n var setMaxHeight = function (element, maxHeight) {\n setMax$1(element, Math.floor(maxHeight));\n };\n var anchored = constant$1(function (element, available) {\n setMaxHeight(element, available);\n setAll(element, {\n 'overflow-x': 'hidden',\n 'overflow-y': 'auto'\n });\n });\n var expandable$1 = constant$1(function (element, available) {\n setMaxHeight(element, available);\n });\n\n var defaultOr = function (options, key, dephault) {\n return options[key] === undefined ? dephault : options[key];\n };\n var simple = function (anchor, element, bubble, layouts, lastPlacement, getBounds, overrideOptions, transition) {\n var maxHeightFunction = defaultOr(overrideOptions, 'maxHeightFunction', anchored());\n var maxWidthFunction = defaultOr(overrideOptions, 'maxWidthFunction', noop);\n var anchorBox = anchor.anchorBox;\n var origin = anchor.origin;\n var options = {\n bounds: viewport(origin, getBounds),\n origin: origin,\n preference: layouts,\n maxHeightFunction: maxHeightFunction,\n maxWidthFunction: maxWidthFunction,\n lastPlacement: lastPlacement,\n transition: transition\n };\n return go(anchorBox, element, bubble, options);\n };\n var go = function (anchorBox, element, bubble, options) {\n var 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 var allAlignments = [\n 'valignCentre',\n 'alignLeft',\n 'alignRight',\n 'alignCentre',\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'inset'\n ];\n var nu$5 = function (xOffset, yOffset, classes, insetModifier) {\n if (insetModifier === void 0) {\n insetModifier = 1;\n }\n var insetXOffset = xOffset * insetModifier;\n var insetYOffset = yOffset * insetModifier;\n var getClasses = function (prop) {\n return get$e(classes, prop).getOr([]);\n };\n var make = function (xDelta, yDelta, alignmentsOn) {\n var 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: function () {\n return make(-xOffset, yOffset, [\n 'top',\n 'alignLeft'\n ]);\n },\n southwest: function () {\n return make(xOffset, yOffset, [\n 'top',\n 'alignRight'\n ]);\n },\n south: function () {\n return make(-xOffset / 2, yOffset, [\n 'top',\n 'alignCentre'\n ]);\n },\n northeast: function () {\n return make(-xOffset, -yOffset, [\n 'bottom',\n 'alignLeft'\n ]);\n },\n northwest: function () {\n return make(xOffset, -yOffset, [\n 'bottom',\n 'alignRight'\n ]);\n },\n north: function () {\n return make(-xOffset / 2, -yOffset, [\n 'bottom',\n 'alignCentre'\n ]);\n },\n east: function () {\n return make(xOffset, -yOffset / 2, [\n 'valignCentre',\n 'left'\n ]);\n },\n west: function () {\n return make(-xOffset, -yOffset / 2, [\n 'valignCentre',\n 'right'\n ]);\n },\n insetNortheast: function () {\n return make(insetXOffset, insetYOffset, [\n 'top',\n 'alignLeft',\n 'inset'\n ]);\n },\n insetNorthwest: function () {\n return make(-insetXOffset, insetYOffset, [\n 'top',\n 'alignRight',\n 'inset'\n ]);\n },\n insetNorth: function () {\n return make(-insetXOffset / 2, insetYOffset, [\n 'top',\n 'alignCentre',\n 'inset'\n ]);\n },\n insetSoutheast: function () {\n return make(insetXOffset, -insetYOffset, [\n 'bottom',\n 'alignLeft',\n 'inset'\n ]);\n },\n insetSouthwest: function () {\n return make(-insetXOffset, -insetYOffset, [\n 'bottom',\n 'alignRight',\n 'inset'\n ]);\n },\n insetSouth: function () {\n return make(-insetXOffset / 2, -insetYOffset, [\n 'bottom',\n 'alignCentre',\n 'inset'\n ]);\n },\n insetEast: function () {\n return make(-insetXOffset, -insetYOffset / 2, [\n 'valignCentre',\n 'right',\n 'inset'\n ]);\n },\n insetWest: function () {\n return make(insetXOffset, -insetYOffset / 2, [\n 'valignCentre',\n 'left',\n 'inset'\n ]);\n }\n };\n };\n var fallback = function () {\n return nu$5(0, 0, {});\n };\n\n var nu$4 = identity$1;\n\n var onDirection = function (isLtr, isRtl) {\n return function (element) {\n return getDirection(element) === 'rtl' ? isRtl : isLtr;\n };\n };\n var getDirection = function (element) {\n return get$c(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n };\n\n var AttributeValue;\n (function (AttributeValue) {\n AttributeValue['TopToBottom'] = 'toptobottom';\n AttributeValue['BottomToTop'] = 'bottomtotop';\n }(AttributeValue || (AttributeValue = {})));\n var Attribute = 'data-alloy-vertical-dir';\n var isBottomToTopDir = function (el) {\n return closest$2(el, function (current) {\n return isElement$2(current) && get$d(current, 'data-alloy-vertical-dir') === AttributeValue.BottomToTop;\n });\n };\n\n var schema$y = function () {\n return optionObjOf('layouts', [\n required$1('onLtr'),\n required$1('onRtl'),\n option('onBottomLtr'),\n option('onBottomRtl')\n ]);\n };\n var get$4 = function (elem, info, defaultLtr, defaultRtl, defaultBottomLtr, defaultBottomRtl, dirElement) {\n var isBottomToTop = dirElement.map(isBottomToTopDir).getOr(false);\n var customLtr = info.layouts.map(function (ls) {\n return ls.onLtr(elem);\n });\n var customRtl = info.layouts.map(function (ls) {\n return ls.onRtl(elem);\n });\n var ltr = isBottomToTop ? info.layouts.bind(function (ls) {\n return ls.onBottomLtr.map(function (f) {\n return f(elem);\n });\n }).or(customLtr).getOr(defaultBottomLtr) : customLtr.getOr(defaultLtr);\n var rtl = isBottomToTop ? info.layouts.bind(function (ls) {\n return ls.onBottomRtl.map(function (f) {\n return f(elem);\n });\n }).or(customRtl).getOr(defaultBottomRtl) : customRtl.getOr(defaultRtl);\n var f = onDirection(ltr, rtl);\n return f(elem);\n };\n\n var placement$4 = function (component, anchorInfo, origin) {\n var hotspot = anchorInfo.hotspot;\n var anchorBox = toBox(origin, hotspot.element);\n var layouts = get$4(component.element, anchorInfo, belowOrAbove(), belowOrAboveRtl(), aboveOrBelow(), aboveOrBelowRtl(), Optional.some(anchorInfo.hotspot.element));\n return Optional.some(nu$4({\n anchorBox: anchorBox,\n bubble: anchorInfo.bubble.getOr(fallback()),\n overrides: anchorInfo.overrides,\n layouts: layouts,\n placer: Optional.none()\n }));\n };\n var HotspotAnchor = [\n required$1('hotspot'),\n option('bubble'),\n defaulted('overrides', {}),\n schema$y(),\n output$1('placement', placement$4)\n ];\n\n var placement$3 = function (component, anchorInfo, origin) {\n var pos = translate$2(origin, anchorInfo.x, anchorInfo.y);\n var anchorBox = bounds(pos.left, pos.top, anchorInfo.width, anchorInfo.height);\n var layouts = get$4(component.element, anchorInfo, all$1(), allRtl$1(), all$1(), allRtl$1(), Optional.none());\n return Optional.some(nu$4({\n anchorBox: anchorBox,\n bubble: anchorInfo.bubble,\n overrides: anchorInfo.overrides,\n layouts: layouts,\n placer: Optional.none()\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 var adt$7 = Adt.generate([\n { screen: ['point'] },\n {\n absolute: [\n 'point',\n 'scrollLeft',\n 'scrollTop'\n ]\n }\n ]);\n var toFixed = function (pos) {\n return pos.fold(identity$1, function (point, scrollLeft, scrollTop) {\n return point.translate(-scrollLeft, -scrollTop);\n });\n };\n var toAbsolute = function (pos) {\n return pos.fold(identity$1, identity$1);\n };\n var sum = function (points) {\n return foldl(points, function (b, a) {\n return b.translate(a.left, a.top);\n }, SugarPosition(0, 0));\n };\n var sumAsFixed = function (positions) {\n var points = map$2(positions, toFixed);\n return sum(points);\n };\n var sumAsAbsolute = function (positions) {\n var points = map$2(positions, toAbsolute);\n return sum(points);\n };\n var screen = adt$7.screen;\n var absolute$1 = adt$7.absolute;\n\n var getOffset = function (component, origin, anchorInfo) {\n var win = defaultView(anchorInfo.root).dom;\n var hasSameOwner = function (frame) {\n var frameOwner = owner$4(frame);\n var 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 var getRootPoint = function (component, origin, anchorInfo) {\n var doc = owner$4(component.element);\n var outerScroll = get$9(doc);\n var offset = getOffset(component, origin, anchorInfo).getOr(outerScroll);\n return absolute$1(offset, outerScroll.left, outerScroll.top);\n };\n\n var getBox = function (left, top, width, height) {\n var point = screen(SugarPosition(left, top));\n return Optional.some(pointed(point, width, height));\n };\n var calcNewAnchor = function (optBox, rootPoint, anchorInfo, origin, elem) {\n return optBox.map(function (box) {\n var points = [\n rootPoint,\n box.point\n ];\n var topLeft = cata$1(origin, function () {\n return sumAsAbsolute(points);\n }, function () {\n return sumAsAbsolute(points);\n }, function () {\n return sumAsFixed(points);\n });\n var anchorBox = rect(topLeft.left, topLeft.top, box.width, box.height);\n var layoutsLtr = anchorInfo.showAbove ? aboveOrBelow() : belowOrAbove();\n var layoutsRtl = anchorInfo.showAbove ? aboveOrBelowRtl() : belowOrAboveRtl();\n var layouts = get$4(elem, anchorInfo, layoutsLtr, layoutsRtl, layoutsLtr, layoutsRtl, Optional.none());\n return nu$4({\n anchorBox: anchorBox,\n bubble: anchorInfo.bubble.getOr(fallback()),\n overrides: anchorInfo.overrides,\n layouts: layouts,\n placer: Optional.none()\n });\n });\n };\n\n var placement$2 = function (component, anchorInfo, origin) {\n var rootPoint = getRootPoint(component, origin, anchorInfo);\n return anchorInfo.node.filter(inBody).bind(function (target) {\n var rect = target.dom.getBoundingClientRect();\n var nodeBox = getBox(rect.left, rect.top, rect.width, rect.height);\n var 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('bubble'),\n schema$y(),\n defaulted('overrides', {}),\n defaulted('showAbove', false),\n output$1('placement', placement$2)\n ];\n\n var zeroWidth = '\\uFEFF';\n var nbsp = '\\xA0';\n\n var create$7 = function (start, soffset, finish, foffset) {\n return {\n start: start,\n soffset: soffset,\n finish: finish,\n foffset: foffset\n };\n };\n var SimRange = { create: create$7 };\n\n var adt$6 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n var cata = function (subject, onBefore, onOn, onAfter) {\n return subject.fold(onBefore, onOn, onAfter);\n };\n var getStart$1 = function (situ) {\n return situ.fold(identity$1, identity$1, identity$1);\n };\n var before = adt$6.before;\n var on$1 = adt$6.on;\n var after$1 = adt$6.after;\n var Situ = {\n before: before,\n on: on$1,\n after: after$1,\n cata: cata,\n getStart: getStart$1\n };\n\n var 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 var exactFromRange = function (simRange) {\n return adt$5.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n };\n var getStart = function (selection) {\n return selection.match({\n domRange: function (rng) {\n return SugarElement.fromDom(rng.startContainer);\n },\n relative: function (startSitu, _finishSitu) {\n return Situ.getStart(startSitu);\n },\n exact: function (start, _soffset, _finish, _foffset) {\n return start;\n }\n });\n };\n var domRange = adt$5.domRange;\n var relative = adt$5.relative;\n var exact = adt$5.exact;\n var getWin = function (selection) {\n var start = getStart(selection);\n return defaultView(start);\n };\n var range$1 = SimRange.create;\n var SimSelection = {\n domRange: domRange,\n relative: relative,\n exact: exact,\n exactFromRange: exactFromRange,\n getWin: getWin,\n range: range$1\n };\n\n var setStart = function (rng, situ) {\n situ.fold(function (e) {\n rng.setStartBefore(e.dom);\n }, function (e, o) {\n rng.setStart(e.dom, o);\n }, function (e) {\n rng.setStartAfter(e.dom);\n });\n };\n var setFinish = function (rng, situ) {\n situ.fold(function (e) {\n rng.setEndBefore(e.dom);\n }, function (e, o) {\n rng.setEnd(e.dom, o);\n }, function (e) {\n rng.setEndAfter(e.dom);\n });\n };\n var relativeToNative = function (win, startSitu, finishSitu) {\n var range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n var exactToNative = function (win, start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n var toRect = function (rect) {\n return {\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 };\n var getFirstRect$1 = function (rng) {\n var rects = rng.getClientRects();\n var 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 var getBounds$2 = function (rng) {\n var rect = rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n };\n\n var 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 var fromRange = function (win, type, range) {\n return type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset);\n };\n var getRanges = function (win, selection) {\n return selection.match({\n domRange: function (rng) {\n return {\n ltr: constant$1(rng),\n rtl: Optional.none\n };\n },\n relative: function (startSitu, finishSitu) {\n return {\n ltr: cached(function () {\n return relativeToNative(win, startSitu, finishSitu);\n }),\n rtl: cached(function () {\n return Optional.some(relativeToNative(win, finishSitu, startSitu));\n })\n };\n },\n exact: function (start, soffset, finish, foffset) {\n return {\n ltr: cached(function () {\n return exactToNative(win, start, soffset, finish, foffset);\n }),\n rtl: cached(function () {\n return Optional.some(exactToNative(win, finish, foffset, start, soffset));\n })\n };\n }\n });\n };\n var doDiagnose = function (win, ranges) {\n var rng = ranges.ltr();\n if (rng.collapsed) {\n var reversed = ranges.rtl().filter(function (rev) {\n return rev.collapsed === false;\n });\n return reversed.map(function (rev) {\n return adt$4.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset);\n }).getOrThunk(function () {\n return fromRange(win, adt$4.ltr, rng);\n });\n } else {\n return fromRange(win, adt$4.ltr, rng);\n }\n };\n var diagnose = function (win, selection) {\n var ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n var asLtrRange = function (win, selection) {\n var diagnosis = diagnose(win, selection);\n return diagnosis.match({\n ltr: function (start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n },\n rtl: function (start, soffset, finish, foffset) {\n var 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 var NodeValue = function (is, name) {\n var get = function (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 var getOption = function (element) {\n return is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n };\n var set = function (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: get,\n getOption: getOption,\n set: set\n };\n };\n\n var api = NodeValue(isText$1, 'text');\n var get$3 = function (element) {\n return api.get(element);\n };\n var getOption = function (element) {\n return api.getOption(element);\n };\n\n var getEnd = function (element) {\n return name$2(element) === 'img' ? 1 : getOption(element).fold(function () {\n return children(element).length;\n }, function (v) {\n return v.length;\n });\n };\n var isTextNodeWithCursorPosition = function (el) {\n return getOption(el).filter(function (text) {\n return text.trim().length !== 0 || text.indexOf(nbsp) > -1;\n }).isSome();\n };\n var elementsWithCursorPosition = [\n 'img',\n 'br'\n ];\n var isCursorPosition = function (elem) {\n var hasCursorPosition = isTextNodeWithCursorPosition(elem);\n return hasCursorPosition || contains$2(elementsWithCursorPosition, name$2(elem));\n };\n\n var last$1 = function (element) {\n return descendantRtl(element, isCursorPosition);\n };\n var descendantRtl = function (scope, predicate) {\n var descend = function (element) {\n var children$1 = children(element);\n for (var i = children$1.length - 1; i >= 0; i--) {\n var child = children$1[i];\n if (predicate(child)) {\n return Optional.some(child);\n }\n var res = descend(child);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope);\n };\n\n var descendants = function (scope, selector) {\n return all$3(selector, scope);\n };\n\n var makeRange = function (start, soffset, finish, foffset) {\n var doc = owner$4(start);\n var rng = doc.dom.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n var after = function (start, soffset, finish, foffset) {\n var r = makeRange(start, soffset, finish, foffset);\n var same = eq(start, finish) && soffset === foffset;\n return r.collapsed && !same;\n };\n\n var getNativeSelection = function (win) {\n return Optional.from(win.getSelection());\n };\n var readRange = function (selection) {\n if (selection.rangeCount > 0) {\n var firstRng = selection.getRangeAt(0);\n var 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 var doGetExact = function (selection) {\n if (selection.anchorNode === null || selection.focusNode === null) {\n return readRange(selection);\n } else {\n var anchor = SugarElement.fromDom(selection.anchorNode);\n var focus_1 = SugarElement.fromDom(selection.focusNode);\n return after(anchor, selection.anchorOffset, focus_1, selection.focusOffset) ? Optional.some(SimRange.create(anchor, selection.anchorOffset, focus_1, selection.focusOffset)) : readRange(selection);\n }\n };\n var getExact = function (win) {\n return getNativeSelection(win).filter(function (sel) {\n return sel.rangeCount > 0;\n }).bind(doGetExact);\n };\n var getFirstRect = function (win, selection) {\n var rng = asLtrRange(win, selection);\n return getFirstRect$1(rng);\n };\n var getBounds$1 = function (win, selection) {\n var rng = asLtrRange(win, selection);\n return getBounds$2(rng);\n };\n\n var point$1 = function (element, offset) {\n return {\n element: element,\n offset: offset\n };\n };\n var descendOnce$1 = function (element, offset) {\n var children$1 = children(element);\n if (children$1.length === 0) {\n return point$1(element, offset);\n } else if (offset < children$1.length) {\n return point$1(children$1[offset], 0);\n } else {\n var last = children$1[children$1.length - 1];\n var len = isText$1(last) ? get$3(last).length : children(last).length;\n return point$1(last, len);\n }\n };\n\n var descendOnce = function (element, offset) {\n return isText$1(element) ? point$1(element, offset) : descendOnce$1(element, offset);\n };\n var getAnchorSelection = function (win, anchorInfo) {\n var getSelection = anchorInfo.getSelection.getOrThunk(function () {\n return function () {\n return getExact(win);\n };\n });\n return getSelection().map(function (sel) {\n var modStart = descendOnce(sel.start, sel.soffset);\n var modFinish = descendOnce(sel.finish, sel.foffset);\n return SimSelection.range(modStart.element, modStart.offset, modFinish.element, modFinish.offset);\n });\n };\n var placement$1 = function (component, anchorInfo, origin) {\n var win = defaultView(anchorInfo.root).dom;\n var rootPoint = getRootPoint(component, origin, anchorInfo);\n var selectionBox = getAnchorSelection(win, anchorInfo).bind(function (sel) {\n var optRect = getBounds$1(win, SimSelection.exactFromRange(sel)).orThunk(function () {\n var x = SugarElement.fromText(zeroWidth);\n before$2(sel.start, x);\n var rect = getFirstRect(win, SimSelection.exact(x, 0, x, 1));\n remove$5(x);\n return rect;\n });\n return optRect.bind(function (rawRect) {\n return getBox(rawRect.left, rawRect.top, rawRect.width, rawRect.height);\n });\n });\n var targetElement = getAnchorSelection(win, anchorInfo).bind(function (sel) {\n return isElement$2(sel.start) ? Optional.some(sel.start) : parentNode(sel.start);\n });\n var elem = targetElement.getOr(component.element);\n return calcNewAnchor(selectionBox, rootPoint, anchorInfo, origin, elem);\n };\n var SelectionAnchor = [\n option('getSelection'),\n required$1('root'),\n option('bubble'),\n schema$y(),\n defaulted('overrides', {}),\n defaulted('showAbove', false),\n output$1('placement', placement$1)\n ];\n\n var labelPrefix$1 = 'link-layout';\n var eastX = function (anchor) {\n return anchor.x + anchor.width;\n };\n var westX = function (anchor, element) {\n return anchor.x - element.width;\n };\n var northY$1 = function (anchor, element) {\n return anchor.y - element.height + anchor.height;\n };\n var southY$1 = function (anchor) {\n return anchor.y;\n };\n var southeast$1 = function (anchor, element, bubbles) {\n return nu$6(eastX(anchor), southY$1(anchor), bubbles.southeast(), southeast$3(), 'southeast', boundsRestriction(anchor, {\n left: 0,\n top: 2\n }), labelPrefix$1);\n };\n var southwest$1 = function (anchor, element, bubbles) {\n return 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 };\n var northeast$1 = function (anchor, element, bubbles) {\n return 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 };\n var northwest$1 = function (anchor, element, bubbles) {\n return 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 };\n var all = function () {\n return [\n southeast$1,\n southwest$1,\n northeast$1,\n northwest$1\n ];\n };\n var allRtl = function () {\n return [\n southwest$1,\n southeast$1,\n northwest$1,\n northeast$1\n ];\n };\n\n var placement = function (component, submenuInfo, origin) {\n var anchorBox = toBox(origin, submenuInfo.item.element);\n var layouts = get$4(component.element, submenuInfo, all(), allRtl(), all(), allRtl(), Optional.none());\n return Optional.some(nu$4({\n anchorBox: anchorBox,\n bubble: fallback(),\n overrides: submenuInfo.overrides,\n layouts: layouts,\n placer: Optional.none()\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 var TransitionSchema = [\n requiredArrayOf('classes', string),\n defaultedStringEnum('mode', 'all', [\n 'all',\n 'layout',\n 'placement'\n ])\n ];\n var PositionSchema = [\n defaulted('useFixed', never),\n option('getBounds')\n ];\n var PlacementSchema = [\n requiredOf('anchor', AnchorSchema),\n optionObjOf('transition', TransitionSchema)\n ];\n\n var getFixedOrigin = function () {\n var html = document.documentElement;\n return fixed$1(0, 0, html.clientWidth, html.clientHeight);\n };\n var getRelativeOrigin = function (component) {\n var position = absolute$3(component.element);\n var bounds = component.element.dom.getBoundingClientRect();\n return relative$1(position.left, position.top, bounds.width, bounds.height);\n };\n var place = function (component, origin, anchoring, getBounds, placee, lastPlace, transition) {\n var anchor = box(anchoring.anchorBox, origin);\n return simple(anchor, placee.element, anchoring.bubble, anchoring.layouts, lastPlace, getBounds, anchoring.overrides, transition);\n };\n var position$1 = function (component, posConfig, posState, placee, placementSpec) {\n positionWithin(component, posConfig, posState, placee, placementSpec, Optional.none());\n };\n var positionWithin = function (component, posConfig, posState, placee, placementSpec, boxElement) {\n var boundsBox = boxElement.map(box$1);\n return positionWithinBounds(component, posConfig, posState, placee, placementSpec, boundsBox);\n };\n var positionWithinBounds = function (component, posConfig, posState, placee, placementSpec, bounds) {\n var placeeDetail = asRawOrDie$1('placement.info', objOf(PlacementSchema), placementSpec);\n var anchorage = placeeDetail.anchor;\n var element = placee.element;\n var placeeState = posState.get(placee.uid);\n preserve$1(function () {\n set$7(element, 'position', 'fixed');\n var oldVisibility = getRaw(element, 'visibility');\n set$7(element, 'visibility', 'hidden');\n var origin = posConfig.useFixed() ? getFixedOrigin() : getRelativeOrigin(component);\n var placer = anchorage.placement;\n var getBounds = bounds.map(constant$1).or(posConfig.getBounds);\n placer(component, anchorage, origin).each(function (anchoring) {\n var doPlace = anchoring.placer.getOr(place);\n var newState = doPlace(component, origin, anchoring, getBounds, placee, placeeState, placeeDetail.transition);\n posState.set(placee.uid, newState);\n });\n oldVisibility.fold(function () {\n remove$6(element, 'visibility');\n }, function (vis) {\n set$7(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$6(element, 'position');\n }\n }, element);\n };\n var getMode = function (component, pConfig, _pState) {\n return pConfig.useFixed() ? 'fixed' : 'absolute';\n };\n var reset$1 = function (component, pConfig, posState, placee) {\n var element = placee.element;\n each$1([\n 'position',\n 'left',\n 'right',\n 'top',\n 'bottom'\n ], function (prop) {\n return remove$6(element, prop);\n });\n reset$2(element);\n posState.clear(placee.uid);\n };\n\n var PositionApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n position: position$1,\n positionWithin: positionWithin,\n positionWithinBounds: positionWithinBounds,\n getMode: getMode,\n reset: reset$1\n });\n\n var init$g = function () {\n var state = {};\n var set = function (id, data) {\n state[id] = data;\n };\n var get = function (id) {\n return get$e(state, id);\n };\n var clear = function (id) {\n if (isNonNullable(id)) {\n delete state[id];\n } else {\n state = {};\n }\n };\n return nu$8({\n readState: function () {\n return state;\n },\n clear: clear,\n set: set,\n get: get\n });\n };\n\n var PositioningState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$g\n });\n\n var Positioning = create$8({\n fields: PositionSchema,\n name: 'positioning',\n active: ActivePosition,\n apis: PositionApis,\n state: PositioningState\n });\n\n var fireDetaching = function (component) {\n emit(component, detachedFromDom());\n var children = component.components();\n each$1(children, fireDetaching);\n };\n var fireAttaching = function (component) {\n var children = component.components();\n each$1(children, fireAttaching);\n emit(component, attachedToDom());\n };\n var attach$1 = function (parent, child) {\n append$2(parent.element, child.element);\n };\n var detachChildren$1 = function (component) {\n each$1(component.components(), function (childComp) {\n return remove$5(childComp.element);\n });\n empty(component.element);\n component.syncComponents();\n };\n var replaceChildren = function (component, newChildren) {\n var subs = component.components();\n detachChildren$1(component);\n var deleted = difference(subs, newChildren);\n each$1(deleted, function (comp) {\n fireDetaching(comp);\n component.getSystem().removeFromWorld(comp);\n });\n each$1(newChildren, function (childComp) {\n if (!childComp.getSystem().isConnected()) {\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 component.syncComponents();\n });\n };\n\n var attach = function (parent, child) {\n attachWith(parent, child, append$2);\n };\n var attachWith = function (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 var doDetach = function (component) {\n fireDetaching(component);\n remove$5(component.element);\n component.getSystem().removeFromWorld(component);\n };\n var detach = function (component) {\n var parent$1 = parent(component.element).bind(function (p) {\n return component.getSystem().getByDom(p).toOptional();\n });\n doDetach(component);\n parent$1.each(function (p) {\n p.syncComponents();\n });\n };\n var detachChildren = function (component) {\n var subs = component.components();\n each$1(subs, doDetach);\n empty(component.element);\n component.syncComponents();\n };\n var attachSystem = function (element, guiSystem) {\n attachSystemWith(element, guiSystem, append$2);\n };\n var attachSystemAfter = function (element, guiSystem) {\n attachSystemWith(element, guiSystem, after$2);\n };\n var attachSystemWith = function (element, guiSystem, inserter) {\n inserter(element, guiSystem.element);\n var children$1 = children(guiSystem.element);\n each$1(children$1, function (child) {\n guiSystem.getByDom(child).each(fireAttaching);\n });\n };\n var detachSystem = function (guiSystem) {\n var children$1 = children(guiSystem.element);\n each$1(children$1, function (child) {\n guiSystem.getByDom(child).each(fireDetaching);\n });\n remove$5(guiSystem.element);\n };\n\n var rebuild = function (sandbox, sConfig, sState, data) {\n sState.get().each(function (_data) {\n detachChildren(sandbox);\n });\n var point = sConfig.getAttachPoint(sandbox);\n attach(point, sandbox);\n var built = sandbox.getSystem().build(data);\n attach(sandbox, built);\n sState.set(built);\n return built;\n };\n var open$1 = function (sandbox, sConfig, sState, data) {\n var newState = rebuild(sandbox, sConfig, sState, data);\n sConfig.onOpen(sandbox, newState);\n return newState;\n };\n var setContent = function (sandbox, sConfig, sState, data) {\n return sState.get().map(function () {\n return rebuild(sandbox, sConfig, sState, data);\n });\n };\n var openWhileCloaked = function (sandbox, sConfig, sState, data, transaction) {\n cloak(sandbox, sConfig);\n open$1(sandbox, sConfig, sState, data);\n transaction();\n decloak(sandbox, sConfig);\n };\n var close$1 = function (sandbox, sConfig, sState) {\n sState.get().each(function (data) {\n detachChildren(sandbox);\n detach(sandbox);\n sConfig.onClose(sandbox, data);\n sState.clear();\n });\n };\n var isOpen$1 = function (_sandbox, _sConfig, sState) {\n return sState.isOpen();\n };\n var isPartOf = function (sandbox, sConfig, sState, queryElem) {\n return isOpen$1(sandbox, sConfig, sState) && sState.get().exists(function (data) {\n return sConfig.isPartOf(sandbox, data, queryElem);\n });\n };\n var getState$2 = function (_sandbox, _sConfig, sState) {\n return sState.get();\n };\n var store = function (sandbox, cssKey, attr, newValue) {\n getRaw(sandbox.element, cssKey).fold(function () {\n remove$7(sandbox.element, attr);\n }, function (v) {\n set$8(sandbox.element, attr, v);\n });\n set$7(sandbox.element, cssKey, newValue);\n };\n var restore = function (sandbox, cssKey, attr) {\n getOpt(sandbox.element, attr).fold(function () {\n return remove$6(sandbox.element, cssKey);\n }, function (oldValue) {\n return set$7(sandbox.element, cssKey, oldValue);\n });\n };\n var cloak = function (sandbox, sConfig, _sState) {\n var sink = sConfig.getAttachPoint(sandbox);\n set$7(sandbox.element, 'position', Positioning.getMode(sink));\n store(sandbox, 'visibility', sConfig.cloakVisibilityAttr, 'hidden');\n };\n var hasPosition = function (element) {\n return exists([\n 'top',\n 'left',\n 'right',\n 'bottom'\n ], function (pos) {\n return getRaw(element, pos).isSome();\n });\n };\n var decloak = function (sandbox, sConfig, _sState) {\n if (!hasPosition(sandbox.element)) {\n remove$6(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 var events$g = function (sandboxConfig, sandboxState) {\n return derive$2([run$1(sandboxClose(), function (sandbox, _simulatedEvent) {\n close$1(sandbox, sandboxConfig, sandboxState);\n })]);\n };\n\n var ActiveSandbox = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$g\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 var init$f = function () {\n var contents = value$1();\n var readState = constant$1('not-implemented');\n return nu$8({\n readState: 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$f\n });\n\n var Sandboxing = create$8({\n fields: SandboxSchema,\n name: 'sandboxing',\n active: ActiveSandbox,\n apis: SandboxApis,\n state: SandboxState\n });\n\n var dismissPopups = constant$1('dismiss.popups');\n var repositionPopups = constant$1('reposition.popups');\n var mouseReleased = constant$1('mouse.released');\n\n var schema$x = objOfOnly([\n defaulted('isExtraPart', never),\n optionObjOf('fireEventInstead', [defaulted('event', dismissRequested())])\n ]);\n var receivingChannel$1 = function (rawSpec) {\n var _a;\n var detail = asRawOrDie$1('Dismissal', schema$x, rawSpec);\n return _a = {}, _a[dismissPopups()] = {\n schema: objOfOnly([required$1('target')]),\n onReceive: function (sandbox, data) {\n if (Sandboxing.isOpen(sandbox)) {\n var isPart = Sandboxing.isPartOf(sandbox, data.target) || detail.isExtraPart(sandbox, data.target);\n if (!isPart) {\n detail.fireEventInstead.fold(function () {\n return Sandboxing.close(sandbox);\n }, function (fe) {\n return emit(sandbox, fe.event);\n });\n }\n }\n }\n }, _a;\n };\n\n var schema$w = objOfOnly([\n optionObjOf('fireEventInstead', [defaulted('event', repositionRequested())]),\n requiredFunction('doReposition')\n ]);\n var receivingChannel = function (rawSpec) {\n var _a;\n var detail = asRawOrDie$1('Reposition', schema$w, rawSpec);\n return _a = {}, _a[repositionPopups()] = {\n onReceive: function (sandbox) {\n if (Sandboxing.isOpen(sandbox)) {\n detail.fireEventInstead.fold(function () {\n return detail.doReposition(sandbox);\n }, function (fe) {\n return emit(sandbox, fe.event);\n });\n }\n }\n }, _a;\n };\n\n var onLoad$5 = function (component, repConfig, repState) {\n repConfig.store.manager.onLoad(component, repConfig, repState);\n };\n var onUnload$2 = function (component, repConfig, repState) {\n repConfig.store.manager.onUnload(component, repConfig, repState);\n };\n var setValue$3 = function (component, repConfig, repState, data) {\n repConfig.store.manager.setValue(component, repConfig, repState, data);\n };\n var getValue$3 = function (component, repConfig, repState) {\n return repConfig.store.manager.getValue(component, repConfig, repState);\n };\n var getState$1 = function (component, repConfig, repState) {\n return repState;\n };\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 var events$f = function (repConfig, repState) {\n var es = repConfig.resetOnDom ? [\n runOnAttached(function (comp, _se) {\n onLoad$5(comp, repConfig, repState);\n }),\n runOnDetached(function (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$f\n });\n\n var memory$1 = function () {\n var data = Cell(null);\n var readState = function () {\n return {\n mode: 'memory',\n value: data.get()\n };\n };\n var isNotSet = function () {\n return data.get() === null;\n };\n var clear = function () {\n data.set(null);\n };\n return nu$8({\n set: data.set,\n get: data.get,\n isNotSet: isNotSet,\n clear: clear,\n readState: readState\n });\n };\n var manual = function () {\n var readState = noop;\n return nu$8({ readState: readState });\n };\n var dataset = function () {\n var dataByValue = Cell({});\n var dataByText = Cell({});\n var readState = function () {\n return {\n mode: 'dataset',\n dataByValue: dataByValue.get(),\n dataByText: dataByText.get()\n };\n };\n var clear = function () {\n dataByValue.set({});\n dataByText.set({});\n };\n var lookup = function (itemString) {\n return get$e(dataByValue.get(), itemString).orThunk(function () {\n return get$e(dataByText.get(), itemString);\n });\n };\n var update = function (items) {\n var currentDataByValue = dataByValue.get();\n var currentDataByText = dataByText.get();\n var newDataByValue = {};\n var newDataByText = {};\n each$1(items, function (item) {\n newDataByValue[item.value] = item;\n get$e(item, 'meta').each(function (meta) {\n get$e(meta, 'text').each(function (text) {\n newDataByText[text] = item;\n });\n });\n });\n dataByValue.set(__assign(__assign({}, currentDataByValue), newDataByValue));\n dataByText.set(__assign(__assign({}, currentDataByText), newDataByText));\n };\n return nu$8({\n readState: readState,\n lookup: lookup,\n update: update,\n clear: clear\n });\n };\n var init$e = function (spec) {\n return spec.store.manager.state(spec);\n };\n\n var RepresentState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n memory: memory$1,\n dataset: dataset,\n manual: manual,\n init: init$e\n });\n\n var setValue$2 = function (component, repConfig, repState, data) {\n var store = repConfig.store;\n repState.update([data]);\n store.setValue(component, data);\n repConfig.onSetValue(component, data);\n };\n var getValue$2 = function (component, repConfig, repState) {\n var store = repConfig.store;\n var key = store.getDataKey(component);\n return repState.lookup(key).getOrThunk(function () {\n return store.getFallbackEntry(key);\n });\n };\n var onLoad$4 = function (component, repConfig, repState) {\n var store = repConfig.store;\n store.initialValue.each(function (data) {\n setValue$2(component, repConfig, repState, data);\n });\n };\n var onUnload$1 = function (component, repConfig, repState) {\n repState.clear();\n };\n var DatasetStore = [\n option('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 var getValue$1 = function (component, repConfig, _repState) {\n return repConfig.store.getValue(component);\n };\n var setValue$1 = function (component, repConfig, _repState, data) {\n repConfig.store.setValue(component, data);\n repConfig.onSetValue(component, data);\n };\n var onLoad$3 = function (component, repConfig, _repState) {\n repConfig.store.initialValue.each(function (data) {\n repConfig.store.setValue(component, data);\n });\n };\n var ManualStore = [\n required$1('getValue'),\n defaulted('setValue', noop),\n option('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 var setValue = function (component, repConfig, repState, data) {\n repState.set(data);\n repConfig.onSetValue(component, data);\n };\n var getValue = function (component, repConfig, repState) {\n return repState.get();\n };\n var onLoad$2 = function (component, repConfig, repState) {\n repConfig.store.initialValue.each(function (initVal) {\n if (repState.isNotSet()) {\n repState.set(initVal);\n }\n });\n };\n var onUnload = function (component, repConfig, repState) {\n repState.clear();\n };\n var MemoryStore = [\n option('initialValue'),\n output$1('manager', {\n setValue: setValue,\n getValue: getValue,\n onLoad: onLoad$2,\n onUnload: 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 var Representing = create$8({\n fields: RepresentSchema,\n name: 'representing',\n active: ActiveRepresenting,\n apis: RepresentApis,\n extra: {\n setValueFrom: function (component, source) {\n var value = Representing.getValue(source);\n Representing.setValue(component, value);\n }\n },\n state: RepresentState\n });\n\n var field = function (name, forbidden) {\n return defaultedObjOf(name, {}, map$2(forbidden, function (f) {\n return forbid(f.name(), 'Cannot configure ' + f.name() + ' for ' + name);\n }).concat([customField('dump', identity$1)]));\n };\n var get$2 = function (data) {\n return data.dump;\n };\n var augment = function (data, original) {\n return __assign(__assign({}, derive$1(original)), data.dump);\n };\n var SketchBehaviours = {\n field: field,\n augment: augment,\n get: get$2\n };\n\n var _placeholder = 'placeholder';\n var adt$3 = Adt.generate([\n {\n single: [\n 'required',\n 'valueThunk'\n ]\n },\n {\n multiple: [\n 'required',\n 'valueThunks'\n ]\n }\n ]);\n var isSubstituted = function (spec) {\n return has$2(spec, 'uiType');\n };\n var subPlaceholder = function (owner, detail, compSpec, placeholders) {\n if (owner.exists(function (o) {\n return o !== compSpec.owner;\n })) {\n return adt$3.single(true, constant$1(compSpec));\n }\n return get$e(placeholders, compSpec.name).fold(function () {\n throw new Error('Unknown placeholder component: ' + compSpec.name + '\\nKnown: [' + keys(placeholders) + ']\\nNamespace: ' + owner.getOr('none') + '\\nSpec: ' + JSON.stringify(compSpec, null, 2));\n }, function (newSpec) {\n return newSpec.replace();\n });\n };\n var scan = function (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 var substitute = function (owner, detail, compSpec, placeholders) {\n var base = scan(owner, detail, compSpec, placeholders);\n return base.fold(function (req, valueThunk) {\n var value = isSubstituted(compSpec) ? valueThunk(detail, compSpec.config, compSpec.validated) : valueThunk(detail);\n var childSpecs = get$e(value, 'components').getOr([]);\n var substituted = bind$3(childSpecs, function (c) {\n return substitute(owner, detail, c, placeholders);\n });\n return [__assign(__assign({}, value), { components: substituted })];\n }, function (req, valuesThunk) {\n if (isSubstituted(compSpec)) {\n var values = valuesThunk(detail, compSpec.config, compSpec.validated);\n var preprocessor = compSpec.validated.preprocess.getOr(identity$1);\n return preprocessor(values);\n } else {\n return valuesThunk(detail);\n }\n });\n };\n var substituteAll = function (owner, detail, components, placeholders) {\n return bind$3(components, function (c) {\n return substitute(owner, detail, c, placeholders);\n });\n };\n var oneReplace = function (label, replacements) {\n var called = false;\n var used = function () {\n return called;\n };\n var replace = function () {\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 var required = function () {\n return replacements.fold(function (req, _) {\n return req;\n }, function (req, _) {\n return req;\n });\n };\n return {\n name: constant$1(label),\n required: required,\n used: used,\n replace: replace\n };\n };\n var substitutePlaces = function (owner, detail, components, placeholders) {\n var ps = map$1(placeholders, function (ph, name) {\n return oneReplace(name, ph);\n });\n var outcome = substituteAll(owner, detail, components, ps);\n each(ps, function (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 var single$2 = adt$3.single;\n var multiple = adt$3.multiple;\n var placeholder = constant$1(_placeholder);\n\n var adt$2 = Adt.generate([\n { required: ['data'] },\n { external: ['data'] },\n { optional: ['data'] },\n { group: ['data'] }\n ]);\n var fFactory = defaulted('factory', { sketch: identity$1 });\n var fSchema = defaulted('schema', []);\n var fName = required$1('name');\n var fPname = field$1('pname', 'pname', defaultedThunk(function (typeSpec) {\n return '';\n }), anyValue());\n var fGroupSchema = customField('schema', function () {\n return [option('preprocess')];\n });\n var fDefaults = defaulted('defaults', constant$1({}));\n var fOverrides = defaulted('overrides', constant$1({}));\n var requiredSpec = objOf([\n fFactory,\n fSchema,\n fName,\n fPname,\n fDefaults,\n fOverrides\n ]);\n var externalSpec = objOf([\n fFactory,\n fSchema,\n fName,\n fDefaults,\n fOverrides\n ]);\n var optionalSpec = objOf([\n fFactory,\n fSchema,\n fName,\n fPname,\n fDefaults,\n fOverrides\n ]);\n var groupSpec = objOf([\n fFactory,\n fGroupSchema,\n fName,\n required$1('unit'),\n fPname,\n fDefaults,\n fOverrides\n ]);\n var asNamedPart = function (part) {\n return part.fold(Optional.some, Optional.none, Optional.some, Optional.some);\n };\n var name$1 = function (part) {\n var get = function (data) {\n return data.name;\n };\n return part.fold(get, get, get, get);\n };\n var asCommon = function (part) {\n return part.fold(identity$1, identity$1, identity$1, identity$1);\n };\n var convert = function (adtConstructor, partSchema) {\n return function (spec) {\n var data = asRawOrDie$1('Converting part type', partSchema, spec);\n return adtConstructor(data);\n };\n };\n var required = convert(adt$2.required, requiredSpec);\n var external$1 = convert(adt$2.external, externalSpec);\n var optional = convert(adt$2.optional, optionalSpec);\n var group = convert(adt$2.group, groupSpec);\n var original = constant$1('entirety');\n\n var PartType = /*#__PURE__*/Object.freeze({\n __proto__: null,\n required: required,\n external: external$1,\n optional: optional,\n group: group,\n asNamedPart: asNamedPart,\n name: name$1,\n asCommon: asCommon,\n original: original\n });\n\n var combine = function (detail, data, partSpec, partValidated) {\n return deepMerge(data.defaults(detail, partSpec, partValidated), partSpec, { uid: detail.partUids[data.name] }, data.overrides(detail, partSpec, partValidated));\n };\n var subs = function (owner, detail, parts) {\n var internals = {};\n var externals = {};\n each$1(parts, function (part) {\n part.fold(function (data) {\n internals[data.pname] = single$2(true, function (detail, partSpec, partValidated) {\n return data.factory.sketch(combine(detail, data, partSpec, partValidated));\n });\n }, function (data) {\n var partSpec = detail.parts[data.name];\n externals[data.name] = constant$1(data.factory.sketch(combine(detail, data, partSpec[original()]), partSpec));\n }, function (data) {\n internals[data.pname] = single$2(false, function (detail, partSpec, partValidated) {\n return data.factory.sketch(combine(detail, data, partSpec, partValidated));\n });\n }, function (data) {\n internals[data.pname] = multiple(true, function (detail, _partSpec, _partValidated) {\n var units = detail[data.name];\n return map$2(units, function (u) {\n return data.factory.sketch(deepMerge(data.defaults(detail, u, _partValidated), u, data.overrides(detail, u)));\n });\n });\n });\n });\n return {\n internals: constant$1(internals),\n externals: constant$1(externals)\n };\n };\n\n var generate$3 = function (owner, parts) {\n var r = {};\n each$1(parts, function (part) {\n asNamedPart(part).each(function (np) {\n var g = doGenerateOne(owner, np.pname);\n r[np.name] = function (config) {\n var validated = asRawOrDie$1('Part: ' + np.name + ' in ' + owner, objOf(np.schema), config);\n return __assign(__assign({}, g), {\n config: config,\n validated: validated\n });\n };\n });\n });\n return r;\n };\n var doGenerateOne = function (owner, pname) {\n return {\n uiType: placeholder(),\n owner: owner,\n name: pname\n };\n };\n var generateOne$1 = function (owner, pname, config) {\n return {\n uiType: placeholder(),\n owner: owner,\n name: pname,\n config: config,\n validated: {}\n };\n };\n var schemas = function (parts) {\n return bind$3(parts, function (part) {\n return part.fold(Optional.none, Optional.some, Optional.none, Optional.none).map(function (data) {\n return requiredObjOf(data.name, data.schema.concat([snapshot(original())]));\n }).toArray();\n });\n };\n var names = function (parts) {\n return map$2(parts, name$1);\n };\n var substitutes = function (owner, detail, parts) {\n return subs(owner, detail, parts);\n };\n var components$1 = function (owner, detail, internals) {\n return substitutePlaces(Optional.some(owner), detail, detail.components, internals);\n };\n var getPart = function (component, detail, partKey) {\n var uid = detail.partUids[partKey];\n return component.getSystem().getByUid(uid).toOptional();\n };\n var getPartOrDie = function (component, detail, partKey) {\n return getPart(component, detail, partKey).getOrDie('Could not find part: ' + partKey);\n };\n var getParts = function (component, detail, partKeys) {\n var r = {};\n var uids = detail.partUids;\n var system = component.getSystem();\n each$1(partKeys, function (pk) {\n r[pk] = constant$1(system.getByUid(uids[pk]));\n });\n return r;\n };\n var getAllParts = function (component, detail) {\n var system = component.getSystem();\n return map$1(detail.partUids, function (pUid, _k) {\n return constant$1(system.getByUid(pUid));\n });\n };\n var getAllPartNames = function (detail) {\n return keys(detail.partUids);\n };\n var getPartsOrDie = function (component, detail, partKeys) {\n var r = {};\n var uids = detail.partUids;\n var system = component.getSystem();\n each$1(partKeys, function (pk) {\n r[pk] = constant$1(system.getByUid(uids[pk]).getOrDie());\n });\n return r;\n };\n var defaultUids = function (baseUid, partTypes) {\n var partNames = names(partTypes);\n return wrapAll(map$2(partNames, function (pn) {\n return {\n key: pn,\n value: baseUid + '-' + pn\n };\n }));\n };\n var defaultUidsSchema = function (partTypes) {\n return field$1('partUids', 'partUids', mergeWithThunk(function (spec) {\n return defaultUids(spec.uid, partTypes);\n }), anyValue());\n };\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 var base = function (partSchemas, partUidsSchemas) {\n var 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 var asRawOrDie = function (label, schema, spec, partSchemas, partUidsSchemas) {\n var baseS = base(partSchemas, partUidsSchemas);\n return asRawOrDie$1(label + ' [SpecSchema]', objOfOnly(baseS.concat(schema)), spec);\n };\n\n var single$1 = function (owner, schema, factory, spec) {\n var specWithUid = supplyUid(spec);\n var detail = asRawOrDie(owner, schema, specWithUid, [], []);\n return factory(detail, specWithUid);\n };\n var composite$1 = function (owner, schema, partTypes, factory, spec) {\n var specWithUid = supplyUid(spec);\n var partSchemas = schemas(partTypes);\n var partUidsSchema = defaultUidsSchema(partTypes);\n var detail = asRawOrDie(owner, schema, specWithUid, partSchemas, [partUidsSchema]);\n var subs = substitutes(owner, detail, partTypes);\n var components = components$1(owner, detail, subs.internals());\n return factory(detail, components, specWithUid, subs.externals());\n };\n var hasUid = function (spec) {\n return has$2(spec, 'uid');\n };\n var supplyUid = function (spec) {\n return hasUid(spec) ? spec : __assign(__assign({}, spec), { uid: generate$5('uid') });\n };\n\n var isSketchSpec = function (spec) {\n return spec.uid !== undefined;\n };\n var singleSchema = objOfOnly([\n required$1('name'),\n required$1('factory'),\n required$1('configFields'),\n defaulted('apis', {}),\n defaulted('extraApis', {})\n ]);\n var 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 var single = function (rawConfig) {\n var config = asRawOrDie$1('Sketcher for ' + rawConfig.name, singleSchema, rawConfig);\n var sketch = function (spec) {\n return single$1(config.name, config.configFields, config.factory, spec);\n };\n var apis = map$1(config.apis, makeApi);\n var extraApis = map$1(config.extraApis, function (f, k) {\n return markAsExtraApi(f, k);\n });\n return __assign(__assign({\n name: config.name,\n configFields: config.configFields,\n sketch: sketch\n }, apis), extraApis);\n };\n var composite = function (rawConfig) {\n var config = asRawOrDie$1('Sketcher for ' + rawConfig.name, compositeSchema, rawConfig);\n var sketch = function (spec) {\n return composite$1(config.name, config.configFields, config.partFields, config.factory, spec);\n };\n var parts = generate$3(config.name, config.partFields);\n var apis = map$1(config.apis, makeApi);\n var extraApis = map$1(config.extraApis, function (f, k) {\n return markAsExtraApi(f, k);\n });\n return __assign(__assign({\n name: config.name,\n partFields: config.partFields,\n configFields: config.configFields,\n sketch: sketch,\n parts: parts\n }, apis), extraApis);\n };\n\n var inside = function (target) {\n return name$2(target) === 'input' && get$d(target, 'type') !== 'radio' || name$2(target) === 'textarea';\n };\n\n var getCurrent = function (component, composeConfig, _composeState) {\n return composeConfig.find(component);\n };\n\n var ComposeApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getCurrent: getCurrent\n });\n\n var ComposeSchema = [required$1('find')];\n\n var Composing = create$8({\n fields: ComposeSchema,\n name: 'composing',\n apis: ComposeApis\n });\n\n var nativeDisabled = [\n 'input',\n 'button',\n 'textarea',\n 'select'\n ];\n var onLoad$1 = function (component, disableConfig, disableState) {\n var f = disableConfig.disabled() ? disable$1 : enable$1;\n f(component, disableConfig);\n };\n var hasNative = function (component, config) {\n return config.useNative === true && contains$2(nativeDisabled, name$2(component.element));\n };\n var nativeIsDisabled = function (component) {\n return has$1(component.element, 'disabled');\n };\n var nativeDisable = function (component) {\n set$8(component.element, 'disabled', 'disabled');\n };\n var nativeEnable = function (component) {\n remove$7(component.element, 'disabled');\n };\n var ariaIsDisabled = function (component) {\n return get$d(component.element, 'aria-disabled') === 'true';\n };\n var ariaDisable = function (component) {\n set$8(component.element, 'aria-disabled', 'true');\n };\n var ariaEnable = function (component) {\n set$8(component.element, 'aria-disabled', 'false');\n };\n var disable$1 = function (component, disableConfig, _disableState) {\n disableConfig.disableClass.each(function (disableClass) {\n add$2(component.element, disableClass);\n });\n var f = hasNative(component, disableConfig) ? nativeDisable : ariaDisable;\n f(component);\n disableConfig.onDisabled(component);\n };\n var enable$1 = function (component, disableConfig, _disableState) {\n disableConfig.disableClass.each(function (disableClass) {\n remove$2(component.element, disableClass);\n });\n var f = hasNative(component, disableConfig) ? nativeEnable : ariaEnable;\n f(component);\n disableConfig.onEnabled(component);\n };\n var isDisabled = function (component, disableConfig) {\n return hasNative(component, disableConfig) ? nativeIsDisabled(component) : ariaIsDisabled(component);\n };\n var set$3 = function (component, disableConfig, disableState, disabled) {\n var f = disabled ? disable$1 : enable$1;\n f(component, disableConfig);\n };\n\n var DisableApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n enable: enable$1,\n disable: disable$1,\n isDisabled: isDisabled,\n onLoad: onLoad$1,\n set: set$3\n });\n\n var exhibit$5 = function (base, disableConfig) {\n return nu$7({ classes: disableConfig.disabled() ? disableConfig.disableClass.toArray() : [] });\n };\n var events$e = function (disableConfig, disableState) {\n return derive$2([\n abort(execute$5(), function (component, _simulatedEvent) {\n return isDisabled(component, disableConfig);\n }),\n loadEvent(disableConfig, disableState, onLoad$1)\n ]);\n };\n\n var ActiveDisable = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$5,\n events: events$e\n });\n\n var DisableSchema = [\n defaultedFunction('disabled', never),\n defaulted('useNative', true),\n option('disableClass'),\n onHandler('onDisabled'),\n onHandler('onEnabled')\n ];\n\n var Disabling = create$8({\n fields: DisableSchema,\n name: 'disabling',\n active: ActiveDisable,\n apis: DisableApis\n });\n\n var dehighlightAllExcept = function (component, hConfig, hState, skip) {\n var highlighted = descendants(component.element, '.' + hConfig.highlightClass);\n each$1(highlighted, function (h) {\n if (!exists(skip, function (skipComp) {\n return skipComp.element === h;\n })) {\n remove$2(h, hConfig.highlightClass);\n component.getSystem().getByDom(h).each(function (target) {\n hConfig.onDehighlight(component, target);\n emit(target, dehighlight$1());\n });\n }\n });\n };\n var dehighlightAll = function (component, hConfig, hState) {\n return dehighlightAllExcept(component, hConfig, hState, []);\n };\n var dehighlight = function (component, hConfig, hState, target) {\n if (isHighlighted(component, hConfig, hState, target)) {\n remove$2(target.element, hConfig.highlightClass);\n hConfig.onDehighlight(component, target);\n emit(target, dehighlight$1());\n }\n };\n var highlight = function (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 var highlightFirst = function (component, hConfig, hState) {\n getFirst(component, hConfig).each(function (firstComp) {\n highlight(component, hConfig, hState, firstComp);\n });\n };\n var highlightLast = function (component, hConfig, hState) {\n getLast(component, hConfig).each(function (lastComp) {\n highlight(component, hConfig, hState, lastComp);\n });\n };\n var highlightAt = function (component, hConfig, hState, index) {\n getByIndex(component, hConfig, hState, index).fold(function (err) {\n throw err;\n }, function (firstComp) {\n highlight(component, hConfig, hState, firstComp);\n });\n };\n var highlightBy = function (component, hConfig, hState, predicate) {\n var candidates = getCandidates(component, hConfig);\n var targetComp = find$5(candidates, predicate);\n targetComp.each(function (c) {\n highlight(component, hConfig, hState, c);\n });\n };\n var isHighlighted = function (component, hConfig, hState, queryTarget) {\n return has(queryTarget.element, hConfig.highlightClass);\n };\n var getHighlighted = function (component, hConfig, _hState) {\n return descendant(component.element, '.' + hConfig.highlightClass).bind(function (e) {\n return component.getSystem().getByDom(e).toOptional();\n });\n };\n var getByIndex = function (component, hConfig, hState, index) {\n var items = descendants(component.element, '.' + hConfig.itemClass);\n return Optional.from(items[index]).fold(function () {\n return Result.error(new Error('No element found with index ' + index));\n }, component.getSystem().getByDom);\n };\n var getFirst = function (component, hConfig, _hState) {\n return descendant(component.element, '.' + hConfig.itemClass).bind(function (e) {\n return component.getSystem().getByDom(e).toOptional();\n });\n };\n var getLast = function (component, hConfig, _hState) {\n var items = descendants(component.element, '.' + hConfig.itemClass);\n var last = items.length > 0 ? Optional.some(items[items.length - 1]) : Optional.none();\n return last.bind(function (c) {\n return component.getSystem().getByDom(c).toOptional();\n });\n };\n var getDelta$2 = function (component, hConfig, hState, delta) {\n var items = descendants(component.element, '.' + hConfig.itemClass);\n var current = findIndex$1(items, function (item) {\n return has(item, hConfig.highlightClass);\n });\n return current.bind(function (selected) {\n var dest = cycleBy(selected, delta, 0, items.length - 1);\n return component.getSystem().getByDom(items[dest]).toOptional();\n });\n };\n var getPrevious = function (component, hConfig, hState) {\n return getDelta$2(component, hConfig, hState, -1);\n };\n var getNext = function (component, hConfig, hState) {\n return getDelta$2(component, hConfig, hState, +1);\n };\n var getCandidates = function (component, hConfig, _hState) {\n var items = descendants(component.element, '.' + hConfig.itemClass);\n return cat(map$2(items, function (i) {\n return component.getSystem().getByDom(i).toOptional();\n }));\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 var Highlighting = create$8({\n fields: HighlightSchema,\n name: 'highlighting',\n apis: HighlightApis\n });\n\n var BACKSPACE = [8];\n var TAB = [9];\n var ENTER = [13];\n var ESCAPE = [27];\n var SPACE = [32];\n var LEFT = [37];\n var UP = [38];\n var RIGHT = [39];\n var DOWN = [40];\n\n var cyclePrev = function (values, index, predicate) {\n var before = reverse(values.slice(0, index));\n var after = reverse(values.slice(index + 1));\n return find$5(before.concat(after), predicate);\n };\n var tryPrev = function (values, index, predicate) {\n var before = reverse(values.slice(0, index));\n return find$5(before, predicate);\n };\n var cycleNext = function (values, index, predicate) {\n var before = values.slice(0, index);\n var after = values.slice(index + 1);\n return find$5(after.concat(before), predicate);\n };\n var tryNext = function (values, index, predicate) {\n var after = values.slice(index + 1);\n return find$5(after, predicate);\n };\n\n var inSet = function (keys) {\n return function (event) {\n var raw = event.raw;\n return contains$2(keys, raw.which);\n };\n };\n var and = function (preds) {\n return function (event) {\n return forall(preds, function (pred) {\n return pred(event);\n });\n };\n };\n var isShift = function (event) {\n var raw = event.raw;\n return raw.shiftKey === true;\n };\n var isControl = function (event) {\n var raw = event.raw;\n return raw.ctrlKey === true;\n };\n var isNotShift = not(isShift);\n\n var rule = function (matches, action) {\n return {\n matches: matches,\n classification: action\n };\n };\n var choose = function (transitions, event) {\n var transition = find$5(transitions, function (t) {\n return t.matches(event);\n });\n return transition.map(function (t) {\n return t.classification;\n });\n };\n\n var reportFocusShifting = function (component, prevFocus, newFocus) {\n var noChange = prevFocus.exists(function (p) {\n return newFocus.exists(function (n) {\n return eq(n, p);\n });\n });\n if (!noChange) {\n emitWith(component, focusShifted(), {\n prevFocus: prevFocus,\n newFocus: newFocus\n });\n }\n };\n var dom$2 = function () {\n var get = function (component) {\n return search(component.element);\n };\n var set = function (component, focusee) {\n var prevFocus = get(component);\n component.getSystem().triggerFocus(focusee, component.element);\n var newFocus = get(component);\n reportFocusShifting(component, prevFocus, newFocus);\n };\n return {\n get: get,\n set: set\n };\n };\n var highlights = function () {\n var get = function (component) {\n return Highlighting.getHighlighted(component).map(function (item) {\n return item.element;\n });\n };\n var set = function (component, element) {\n var prevFocus = get(component);\n component.getSystem().getByDom(element).fold(noop, function (item) {\n Highlighting.highlight(component, item);\n });\n var newFocus = get(component);\n reportFocusShifting(component, prevFocus, newFocus);\n };\n return {\n get: get,\n set: 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 var typical = function (infoSchema, stateInit, getKeydownRules, getKeyupRules, optFocusIn) {\n var schema = function () {\n return infoSchema.concat([\n defaulted('focusManager', dom$2()),\n defaultedOf('focusInside', 'onFocus', valueOf(function (val) {\n return contains$2([\n 'onFocus',\n 'onEnterOrSpace',\n 'onApi'\n ], val) ? Result.value(val) : Result.error('Invalid value for focusInside');\n })),\n output$1('handler', me),\n output$1('state', stateInit),\n output$1('sendFocusIn', optFocusIn)\n ]);\n };\n var processKey = function (component, simulatedEvent, getRules, keyingConfig, keyingState) {\n var rules = getRules(component, simulatedEvent, keyingConfig, keyingState);\n return choose(rules, simulatedEvent.event).bind(function (rule) {\n return rule(component, simulatedEvent, keyingConfig, keyingState);\n });\n };\n var toEvents = function (keyingConfig, keyingState) {\n var onFocusHandler = keyingConfig.focusInside !== FocusInsideModes.OnFocusMode ? Optional.none() : optFocusIn(keyingConfig).map(function (focusIn) {\n return run$1(focus$4(), function (component, simulatedEvent) {\n focusIn(component, keyingConfig, keyingState);\n simulatedEvent.stop();\n });\n });\n var tryGoInsideComponent = function (component, simulatedEvent) {\n var isEnterOrSpace = inSet(SPACE.concat(ENTER))(simulatedEvent.event);\n if (keyingConfig.focusInside === FocusInsideModes.OnEnterOrSpaceMode && isEnterOrSpace && isSource(component, simulatedEvent)) {\n optFocusIn(keyingConfig).each(function (focusIn) {\n focusIn(component, keyingConfig, keyingState);\n simulatedEvent.stop();\n });\n }\n };\n var keyboardEvents = [\n run$1(keydown(), function (component, simulatedEvent) {\n processKey(component, simulatedEvent, getKeydownRules, keyingConfig, keyingState).fold(function () {\n tryGoInsideComponent(component, simulatedEvent);\n }, function (_) {\n simulatedEvent.stop();\n });\n }),\n run$1(keyup(), function (component, simulatedEvent) {\n processKey(component, simulatedEvent, getKeyupRules, keyingConfig, keyingState).each(function (_) {\n simulatedEvent.stop();\n });\n })\n ];\n return derive$2(onFocusHandler.toArray().concat(keyboardEvents));\n };\n var me = {\n schema: schema,\n processKey: processKey,\n toEvents: toEvents\n };\n return me;\n };\n\n var create$6 = function (cyclicField) {\n var schema = [\n option('onEscape'),\n option('onEnter'),\n defaulted('selector', '[data-alloy-tabstop=\"true\"]:not(:disabled)'),\n defaulted('firstTabstop', 0),\n defaulted('useTabstopAt', always),\n option('visibilitySelector')\n ].concat([cyclicField]);\n var isVisible = function (tabbingConfig, element) {\n var target = tabbingConfig.visibilitySelector.bind(function (sel) {\n return closest$1(element, sel);\n }).getOr(element);\n return get$b(target) > 0;\n };\n var findInitial = function (component, tabbingConfig) {\n var tabstops = descendants(component.element, tabbingConfig.selector);\n var visibles = filter$2(tabstops, function (elem) {\n return isVisible(tabbingConfig, elem);\n });\n return Optional.from(visibles[tabbingConfig.firstTabstop]);\n };\n var findCurrent = function (component, tabbingConfig) {\n return tabbingConfig.focusManager.get(component).bind(function (elem) {\n return closest$1(elem, tabbingConfig.selector);\n });\n };\n var isTabstop = function (tabbingConfig, element) {\n return isVisible(tabbingConfig, element) && tabbingConfig.useTabstopAt(element);\n };\n var focusIn = function (component, tabbingConfig, _tabbingState) {\n findInitial(component, tabbingConfig).each(function (target) {\n tabbingConfig.focusManager.set(component, target);\n });\n };\n var goFromTabstop = function (component, tabstops, stopIndex, tabbingConfig, cycle) {\n return cycle(tabstops, stopIndex, function (elem) {\n return isTabstop(tabbingConfig, elem);\n }).fold(function () {\n return tabbingConfig.cyclic ? Optional.some(true) : Optional.none();\n }, function (target) {\n tabbingConfig.focusManager.set(component, target);\n return Optional.some(true);\n });\n };\n var go = function (component, _simulatedEvent, tabbingConfig, cycle) {\n var tabstops = descendants(component.element, tabbingConfig.selector);\n return findCurrent(component, tabbingConfig).bind(function (tabstop) {\n var optStopIndex = findIndex$1(tabstops, curry(eq, tabstop));\n return optStopIndex.bind(function (stopIndex) {\n return goFromTabstop(component, tabstops, stopIndex, tabbingConfig, cycle);\n });\n });\n };\n var goBackwards = function (component, simulatedEvent, tabbingConfig) {\n var navigate = tabbingConfig.cyclic ? cyclePrev : tryPrev;\n return go(component, simulatedEvent, tabbingConfig, navigate);\n };\n var goForwards = function (component, simulatedEvent, tabbingConfig) {\n var navigate = tabbingConfig.cyclic ? cycleNext : tryNext;\n return go(component, simulatedEvent, tabbingConfig, navigate);\n };\n var execute = function (component, simulatedEvent, tabbingConfig) {\n return tabbingConfig.onEnter.bind(function (f) {\n return f(component, simulatedEvent);\n });\n };\n var exit = function (component, simulatedEvent, tabbingConfig) {\n return tabbingConfig.onEscape.bind(function (f) {\n return f(component, simulatedEvent);\n });\n };\n var getKeydownRules = constant$1([\n rule(and([\n isShift,\n inSet(TAB)\n ]), goBackwards),\n rule(inSet(TAB), goForwards),\n rule(inSet(ESCAPE), exit),\n rule(and([\n isNotShift,\n inSet(ENTER)\n ]), execute)\n ]);\n var getKeyupRules = constant$1([]);\n return typical(schema, NoState.init, getKeydownRules, getKeyupRules, function () {\n return Optional.some(focusIn);\n });\n };\n\n var AcyclicType = create$6(customField('cyclic', never));\n\n var CyclicType = create$6(customField('cyclic', always));\n\n var doDefaultExecute = function (component, _simulatedEvent, focused) {\n dispatch(component, focused, execute$5());\n return Optional.some(true);\n };\n var defaultExecute = function (component, simulatedEvent, focused) {\n var isComplex = inside(focused) && inSet(SPACE)(simulatedEvent.event);\n return isComplex ? Optional.none() : doDefaultExecute(component, simulatedEvent, focused);\n };\n var stopEventForFirefox = function (_component, _simulatedEvent) {\n return Optional.some(true);\n };\n\n var schema$v = [\n defaulted('execute', defaultExecute),\n defaulted('useSpace', false),\n defaulted('useEnter', true),\n defaulted('useControlEnter', false),\n defaulted('useDown', false)\n ];\n var execute$4 = function (component, simulatedEvent, executeConfig) {\n return executeConfig.execute(component, simulatedEvent, component.element);\n };\n var getKeydownRules$5 = function (component, _simulatedEvent, executeConfig, _executeState) {\n var spaceExec = executeConfig.useSpace && !inside(component.element) ? SPACE : [];\n var enterExec = executeConfig.useEnter ? ENTER : [];\n var downExec = executeConfig.useDown ? DOWN : [];\n var 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 var getKeyupRules$5 = function (component, _simulatedEvent, executeConfig, _executeState) {\n return executeConfig.useSpace && !inside(component.element) ? [rule(inSet(SPACE), stopEventForFirefox)] : [];\n };\n var ExecutionType = typical(schema$v, NoState.init, getKeydownRules$5, getKeyupRules$5, function () {\n return Optional.none();\n });\n\n var flatgrid$1 = function () {\n var dimensions = value$1();\n var setGridSize = function (numRows, numColumns) {\n dimensions.set({\n numRows: numRows,\n numColumns: numColumns\n });\n };\n var getNumRows = function () {\n return dimensions.get().map(function (d) {\n return d.numRows;\n });\n };\n var getNumColumns = function () {\n return dimensions.get().map(function (d) {\n return d.numColumns;\n });\n };\n return nu$8({\n readState: function () {\n return dimensions.get().map(function (d) {\n return {\n numRows: String(d.numRows),\n numColumns: String(d.numColumns)\n };\n }).getOr({\n numRows: '?',\n numColumns: '?'\n });\n },\n setGridSize: setGridSize,\n getNumRows: getNumRows,\n getNumColumns: getNumColumns\n });\n };\n var init$d = function (spec) {\n return spec.state(spec);\n };\n\n var KeyingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n flatgrid: flatgrid$1,\n init: init$d\n });\n\n var useH = function (movement) {\n return function (component, simulatedEvent, config, state) {\n var move = movement(component.element);\n return use(move, component, simulatedEvent, config, state);\n };\n };\n var west$1 = function (moveLeft, moveRight) {\n var movement = onDirection(moveLeft, moveRight);\n return useH(movement);\n };\n var east$1 = function (moveLeft, moveRight) {\n var movement = onDirection(moveRight, moveLeft);\n return useH(movement);\n };\n var useV = function (move) {\n return function (component, simulatedEvent, config, state) {\n return use(move, component, simulatedEvent, config, state);\n };\n };\n var use = function (move, component, simulatedEvent, config, state) {\n var outcome = config.focusManager.get(component).bind(function (focused) {\n return move(component.element, focused, config, state);\n });\n return outcome.map(function (newFocus) {\n config.focusManager.set(component, newFocus);\n return true;\n });\n };\n var north$1 = useV;\n var south$1 = useV;\n var move$1 = useV;\n\n var isHidden$1 = function (dom) {\n return dom.offsetWidth <= 0 && dom.offsetHeight <= 0;\n };\n var isVisible = function (element) {\n return !isHidden$1(element.dom);\n };\n\n var locate = function (candidates, predicate) {\n return findIndex$1(candidates, predicate).map(function (index) {\n return {\n index: index,\n candidates: candidates\n };\n });\n };\n\n var locateVisible = function (container, current, selector) {\n var predicate = function (x) {\n return eq(x, current);\n };\n var candidates = descendants(container, selector);\n var visible = filter$2(candidates, isVisible);\n return locate(visible, predicate);\n };\n var findIndex = function (elements, target) {\n return findIndex$1(elements, function (elem) {\n return eq(target, elem);\n });\n };\n\n var withGrid = function (values, index, numCols, f) {\n var oldRow = Math.floor(index / numCols);\n var oldColumn = index % numCols;\n return f(oldRow, oldColumn).bind(function (address) {\n var newIndex = address.row * numCols + address.column;\n return newIndex >= 0 && newIndex < values.length ? Optional.some(values[newIndex]) : Optional.none();\n });\n };\n var cycleHorizontal$1 = function (values, index, numRows, numCols, delta) {\n return withGrid(values, index, numCols, function (oldRow, oldColumn) {\n var onLastRow = oldRow === numRows - 1;\n var colsInRow = onLastRow ? values.length - oldRow * numCols : numCols;\n var newColumn = cycleBy(oldColumn, delta, 0, colsInRow - 1);\n return Optional.some({\n row: oldRow,\n column: newColumn\n });\n });\n };\n var cycleVertical$1 = function (values, index, numRows, numCols, delta) {\n return withGrid(values, index, numCols, function (oldRow, oldColumn) {\n var newRow = cycleBy(oldRow, delta, 0, numRows - 1);\n var onLastRow = newRow === numRows - 1;\n var colsInRow = onLastRow ? values.length - newRow * numCols : numCols;\n var newCol = clamp$1(oldColumn, 0, colsInRow - 1);\n return Optional.some({\n row: newRow,\n column: newCol\n });\n });\n };\n var cycleRight$1 = function (values, index, numRows, numCols) {\n return cycleHorizontal$1(values, index, numRows, numCols, +1);\n };\n var cycleLeft$1 = function (values, index, numRows, numCols) {\n return cycleHorizontal$1(values, index, numRows, numCols, -1);\n };\n var cycleUp$1 = function (values, index, numRows, numCols) {\n return cycleVertical$1(values, index, numRows, numCols, -1);\n };\n var cycleDown$1 = function (values, index, numRows, numCols) {\n return cycleVertical$1(values, index, numRows, numCols, +1);\n };\n\n var schema$u = [\n required$1('selector'),\n defaulted('execute', defaultExecute),\n onKeyboardHandler('onEscape'),\n defaulted('captureTab', false),\n initSize()\n ];\n var focusIn$3 = function (component, gridConfig, _gridState) {\n descendant(component.element, gridConfig.selector).each(function (first) {\n gridConfig.focusManager.set(component, first);\n });\n };\n var findCurrent$1 = function (component, gridConfig) {\n return gridConfig.focusManager.get(component).bind(function (elem) {\n return closest$1(elem, gridConfig.selector);\n });\n };\n var execute$3 = function (component, simulatedEvent, gridConfig, _gridState) {\n return findCurrent$1(component, gridConfig).bind(function (focused) {\n return gridConfig.execute(component, simulatedEvent, focused);\n });\n };\n var doMove$2 = function (cycle) {\n return function (element, focused, gridConfig, gridState) {\n return locateVisible(element, focused, gridConfig.selector).bind(function (identified) {\n return cycle(identified.candidates, identified.index, gridState.getNumRows().getOr(gridConfig.initSize.numRows), gridState.getNumColumns().getOr(gridConfig.initSize.numColumns));\n });\n };\n };\n var handleTab = function (_component, _simulatedEvent, gridConfig) {\n return gridConfig.captureTab ? Optional.some(true) : Optional.none();\n };\n var doEscape$1 = function (component, simulatedEvent, gridConfig) {\n return gridConfig.onEscape(component, simulatedEvent);\n };\n var moveLeft$3 = doMove$2(cycleLeft$1);\n var moveRight$3 = doMove$2(cycleRight$1);\n var moveNorth$1 = doMove$2(cycleUp$1);\n var moveSouth$1 = doMove$2(cycleDown$1);\n var 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,\n inSet(TAB)\n ]), handleTab),\n rule(and([\n isNotShift,\n inSet(TAB)\n ]), handleTab),\n rule(inSet(ESCAPE), doEscape$1),\n rule(inSet(SPACE.concat(ENTER)), execute$3)\n ]);\n var getKeyupRules$4 = constant$1([rule(inSet(SPACE), stopEventForFirefox)]);\n var FlatgridType = typical(schema$u, flatgrid$1, getKeydownRules$4, getKeyupRules$4, function () {\n return Optional.some(focusIn$3);\n });\n\n var horizontal = function (container, selector, current, delta) {\n var isDisabledButton = function (candidate) {\n return name$2(candidate) === 'button' && get$d(candidate, 'disabled') === 'disabled';\n };\n var tryCycle = function (initial, index, candidates) {\n var newIndex = cycleBy(index, delta, 0, candidates.length - 1);\n if (newIndex === initial) {\n return Optional.none();\n } else {\n return isDisabledButton(candidates[newIndex]) ? tryCycle(initial, newIndex, candidates) : Optional.from(candidates[newIndex]);\n }\n };\n return locateVisible(container, current, selector).bind(function (identified) {\n var index = identified.index;\n var candidates = identified.candidates;\n return tryCycle(index, index, candidates);\n });\n };\n\n var 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 ];\n var findCurrent = function (component, flowConfig) {\n return flowConfig.focusManager.get(component).bind(function (elem) {\n return closest$1(elem, flowConfig.selector);\n });\n };\n var execute$2 = function (component, simulatedEvent, flowConfig) {\n return findCurrent(component, flowConfig).bind(function (focused) {\n return flowConfig.execute(component, simulatedEvent, focused);\n });\n };\n var focusIn$2 = function (component, flowConfig, _state) {\n flowConfig.getInitial(component).orThunk(function () {\n return descendant(component.element, flowConfig.selector);\n }).each(function (first) {\n flowConfig.focusManager.set(component, first);\n });\n };\n var moveLeft$2 = function (element, focused, info) {\n return horizontal(element, info.selector, focused, -1);\n };\n var moveRight$2 = function (element, focused, info) {\n return horizontal(element, info.selector, focused, +1);\n };\n var doMove$1 = function (movement) {\n return function (component, simulatedEvent, flowConfig, flowState) {\n return movement(component, simulatedEvent, flowConfig, flowState).bind(function () {\n return flowConfig.executeOnMove ? execute$2(component, simulatedEvent, flowConfig) : Optional.some(true);\n });\n };\n };\n var doEscape = function (component, simulatedEvent, flowConfig) {\n return flowConfig.onEscape(component, simulatedEvent);\n };\n var getKeydownRules$3 = function (_component, _se, flowConfig, _flowState) {\n var westMovers = LEFT.concat(flowConfig.allowVertical ? UP : []);\n var eastMovers = 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 rule(inSet(ESCAPE), doEscape)\n ];\n };\n var getKeyupRules$3 = constant$1([rule(inSet(SPACE), stopEventForFirefox)]);\n var FlowType = typical(schema$t, NoState.init, getKeydownRules$3, getKeyupRules$3, function () {\n return Optional.some(focusIn$2);\n });\n\n var toCell = function (matrix, rowIndex, columnIndex) {\n return Optional.from(matrix[rowIndex]).bind(function (row) {\n return Optional.from(row[columnIndex]).map(function (cell) {\n return {\n rowIndex: rowIndex,\n columnIndex: columnIndex,\n cell: cell\n };\n });\n });\n };\n var cycleHorizontal = function (matrix, rowIndex, startCol, deltaCol) {\n var row = matrix[rowIndex];\n var colsInRow = row.length;\n var newColIndex = cycleBy(startCol, deltaCol, 0, colsInRow - 1);\n return toCell(matrix, rowIndex, newColIndex);\n };\n var cycleVertical = function (matrix, colIndex, startRow, deltaRow) {\n var nextRowIndex = cycleBy(startRow, deltaRow, 0, matrix.length - 1);\n var colsInNextRow = matrix[nextRowIndex].length;\n var nextColIndex = clamp$1(colIndex, 0, colsInNextRow - 1);\n return toCell(matrix, nextRowIndex, nextColIndex);\n };\n var moveHorizontal = function (matrix, rowIndex, startCol, deltaCol) {\n var row = matrix[rowIndex];\n var colsInRow = row.length;\n var newColIndex = clamp$1(startCol + deltaCol, 0, colsInRow - 1);\n return toCell(matrix, rowIndex, newColIndex);\n };\n var moveVertical = function (matrix, colIndex, startRow, deltaRow) {\n var nextRowIndex = clamp$1(startRow + deltaRow, 0, matrix.length - 1);\n var colsInNextRow = matrix[nextRowIndex].length;\n var nextColIndex = clamp$1(colIndex, 0, colsInNextRow - 1);\n return toCell(matrix, nextRowIndex, nextColIndex);\n };\n var cycleRight = function (matrix, startRow, startCol) {\n return cycleHorizontal(matrix, startRow, startCol, +1);\n };\n var cycleLeft = function (matrix, startRow, startCol) {\n return cycleHorizontal(matrix, startRow, startCol, -1);\n };\n var cycleUp = function (matrix, startRow, startCol) {\n return cycleVertical(matrix, startCol, startRow, -1);\n };\n var cycleDown = function (matrix, startRow, startCol) {\n return cycleVertical(matrix, startCol, startRow, +1);\n };\n var moveLeft$1 = function (matrix, startRow, startCol) {\n return moveHorizontal(matrix, startRow, startCol, -1);\n };\n var moveRight$1 = function (matrix, startRow, startCol) {\n return moveHorizontal(matrix, startRow, startCol, +1);\n };\n var moveUp$1 = function (matrix, startRow, startCol) {\n return moveVertical(matrix, startCol, startRow, -1);\n };\n var moveDown$1 = function (matrix, startRow, startCol) {\n return moveVertical(matrix, startCol, startRow, +1);\n };\n\n var 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 var focusIn$1 = function (component, matrixConfig, _state) {\n var focused = matrixConfig.previousSelector(component).orThunk(function () {\n var selectors = matrixConfig.selectors;\n return descendant(component.element, selectors.cell);\n });\n focused.each(function (cell) {\n matrixConfig.focusManager.set(component, cell);\n });\n };\n var execute$1 = function (component, simulatedEvent, matrixConfig) {\n return search(component.element).bind(function (focused) {\n return matrixConfig.execute(component, simulatedEvent, focused);\n });\n };\n var toMatrix = function (rows, matrixConfig) {\n return map$2(rows, function (row) {\n return descendants(row, matrixConfig.selectors.cell);\n });\n };\n var doMove = function (ifCycle, ifMove) {\n return function (element, focused, matrixConfig) {\n var move = matrixConfig.cycles ? ifCycle : ifMove;\n return closest$1(focused, matrixConfig.selectors.row).bind(function (inRow) {\n var cellsInRow = descendants(inRow, matrixConfig.selectors.cell);\n return findIndex(cellsInRow, focused).bind(function (colIndex) {\n var allRows = descendants(element, matrixConfig.selectors.row);\n return findIndex(allRows, inRow).bind(function (rowIndex) {\n var matrix = toMatrix(allRows, matrixConfig);\n return move(matrix, rowIndex, colIndex).map(function (next) {\n return next.cell;\n });\n });\n });\n });\n };\n };\n var moveLeft = doMove(cycleLeft, moveLeft$1);\n var moveRight = doMove(cycleRight, moveRight$1);\n var moveNorth = doMove(cycleUp, moveUp$1);\n var moveSouth = doMove(cycleDown, moveDown$1);\n var 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 var getKeyupRules$2 = constant$1([rule(inSet(SPACE), stopEventForFirefox)]);\n var MatrixType = typical(schema$s, NoState.init, getKeydownRules$2, getKeyupRules$2, function () {\n return Optional.some(focusIn$1);\n });\n\n var schema$r = [\n required$1('selector'),\n defaulted('execute', defaultExecute),\n defaulted('moveOnTab', false)\n ];\n var execute = function (component, simulatedEvent, menuConfig) {\n return menuConfig.focusManager.get(component).bind(function (focused) {\n return menuConfig.execute(component, simulatedEvent, focused);\n });\n };\n var focusIn = function (component, menuConfig, _state) {\n descendant(component.element, menuConfig.selector).each(function (first) {\n menuConfig.focusManager.set(component, first);\n });\n };\n var moveUp = function (element, focused, info) {\n return horizontal(element, info.selector, focused, -1);\n };\n var moveDown = function (element, focused, info) {\n return horizontal(element, info.selector, focused, +1);\n };\n var fireShiftTab = function (component, simulatedEvent, menuConfig, menuState) {\n return menuConfig.moveOnTab ? move$1(moveUp)(component, simulatedEvent, menuConfig, menuState) : Optional.none();\n };\n var fireTab = function (component, simulatedEvent, menuConfig, menuState) {\n return menuConfig.moveOnTab ? move$1(moveDown)(component, simulatedEvent, menuConfig, menuState) : Optional.none();\n };\n var getKeydownRules$1 = constant$1([\n rule(inSet(UP), move$1(moveUp)),\n rule(inSet(DOWN), move$1(moveDown)),\n rule(and([\n isShift,\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 var getKeyupRules$1 = constant$1([rule(inSet(SPACE), stopEventForFirefox)]);\n var MenuType = typical(schema$r, NoState.init, getKeydownRules$1, getKeyupRules$1, function () {\n return Optional.some(focusIn);\n });\n\n var 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('focusIn')\n ];\n var getKeydownRules = function (component, simulatedEvent, specialInfo) {\n return [\n rule(inSet(SPACE), specialInfo.onSpace),\n rule(and([\n isNotShift,\n inSet(ENTER)\n ]), specialInfo.onEnter),\n rule(and([\n isShift,\n inSet(ENTER)\n ]), specialInfo.onShiftEnter),\n rule(and([\n isShift,\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 rule(inSet(ESCAPE), specialInfo.onEscape)\n ];\n };\n var getKeyupRules = function (component, simulatedEvent, specialInfo) {\n return specialInfo.stopSpaceKeyup ? [rule(inSet(SPACE), stopEventForFirefox)] : [];\n };\n var SpecialType = typical(schema$q, NoState.init, getKeydownRules, getKeyupRules, function (specialInfo) {\n return specialInfo.focusIn;\n });\n\n var acyclic = AcyclicType.schema();\n var cyclic = CyclicType.schema();\n var flow = FlowType.schema();\n var flatgrid = FlatgridType.schema();\n var matrix = MatrixType.schema();\n var execution = ExecutionType.schema();\n var menu = MenuType.schema();\n var 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 var isFlatgridState = function (keyState) {\n return hasNonNullableKey(keyState, 'setGridSize');\n };\n var Keying = createModes({\n branchKey: 'mode',\n branches: KeyboardBranches,\n name: 'keying',\n active: {\n events: function (keyingConfig, keyingState) {\n var handler = keyingConfig.handler;\n return handler.toEvents(keyingConfig, keyingState);\n }\n },\n apis: {\n focusIn: function (component, keyConfig, keyState) {\n keyConfig.sendFocusIn(keyConfig).fold(function () {\n component.getSystem().triggerFocus(component.element, component.element);\n }, function (sendFocusIn) {\n sendFocusIn(component, keyConfig, keyState);\n });\n },\n setGridSize: function (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 var set$2 = function (component, replaceConfig, replaceState, data) {\n preserve$1(function () {\n var newChildren = map$2(data, component.getSystem().build);\n replaceChildren(component, newChildren);\n }, component.element);\n };\n var insert = function (component, replaceConfig, insertion, childSpec) {\n var child = component.getSystem().build(childSpec);\n attachWith(component, child, insertion);\n };\n var append = function (component, replaceConfig, replaceState, appendee) {\n insert(component, replaceConfig, append$2, appendee);\n };\n var prepend = function (component, replaceConfig, replaceState, prependee) {\n insert(component, replaceConfig, prepend$1, prependee);\n };\n var remove = function (component, replaceConfig, replaceState, removee) {\n var children = contents(component);\n var foundChild = find$5(children, function (child) {\n return eq(removee.element, child.element);\n });\n foundChild.each(detach);\n };\n var contents = function (component, _replaceConfig) {\n return component.components();\n };\n var replaceAt = function (component, replaceConfig, replaceState, replaceeIndex, replacer) {\n var children = contents(component);\n return Optional.from(children[replaceeIndex]).map(function (replacee) {\n remove(component, replaceConfig, replaceState, replacee);\n replacer.each(function (r) {\n insert(component, replaceConfig, function (p, c) {\n appendAt(p, c, replaceeIndex);\n }, r);\n });\n return replacee;\n });\n };\n var replaceBy = function (component, replaceConfig, replaceState, replaceePred, replacer) {\n var children = contents(component);\n return findIndex$1(children, replaceePred).bind(function (replaceeIndex) {\n return replaceAt(component, replaceConfig, replaceState, replaceeIndex, replacer);\n });\n };\n\n var ReplaceApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n append: append,\n prepend: prepend,\n remove: remove,\n replaceAt: replaceAt,\n replaceBy: replaceBy,\n set: set$2,\n contents: contents\n });\n\n var Replacing = create$8({\n fields: [],\n name: 'replacing',\n apis: ReplaceApis\n });\n\n var events$d = function (name, eventHandlers) {\n var events = derive$2(eventHandlers);\n return create$8({\n fields: [required$1('enabled')],\n name: name,\n active: { events: constant$1(events) }\n });\n };\n var config = function (name, eventHandlers) {\n var me = events$d(name, eventHandlers);\n return {\n key: name,\n value: {\n config: {},\n me: me,\n configAsRaw: constant$1({}),\n initialConfig: {},\n state: NoState\n }\n };\n };\n\n var focus$2 = function (component, focusConfig) {\n if (!focusConfig.ignore) {\n focus$3(component.element);\n focusConfig.onFocus(component);\n }\n };\n var blur = function (component, focusConfig) {\n if (!focusConfig.ignore) {\n blur$1(component.element);\n }\n };\n var isFocused = function (component) {\n return hasFocus(component.element);\n };\n\n var FocusApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n focus: focus$2,\n blur: blur,\n isFocused: isFocused\n });\n\n var exhibit$4 = function (base, focusConfig) {\n var mod = focusConfig.ignore ? {} : { attributes: { tabindex: '-1' } };\n return nu$7(mod);\n };\n var events$c = function (focusConfig) {\n return derive$2([run$1(focus$4(), function (component, simulatedEvent) {\n focus$2(component, focusConfig);\n simulatedEvent.stop();\n })].concat(focusConfig.stopMousedown ? [run$1(mousedown(), function (_, simulatedEvent) {\n simulatedEvent.event.prevent();\n })] : []));\n };\n\n var ActiveFocus = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit$4,\n events: events$c\n });\n\n var FocusSchema = [\n onHandler('onFocus'),\n defaulted('stopMousedown', false),\n defaulted('ignore', false)\n ];\n\n var Focusing = create$8({\n fields: FocusSchema,\n name: 'focusing',\n active: ActiveFocus,\n apis: FocusApis\n });\n\n var SetupBehaviourCellState = function (initialState) {\n var init = function () {\n var cell = Cell(initialState);\n var get = function () {\n return cell.get();\n };\n var set = function (newState) {\n return cell.set(newState);\n };\n var clear = function () {\n return cell.set(initialState);\n };\n var readState = function () {\n return cell.get();\n };\n return {\n get: get,\n set: set,\n clear: clear,\n readState: readState\n };\n };\n return { init: init };\n };\n\n var updateAriaState = function (component, toggleConfig, toggleState) {\n var ariaInfo = toggleConfig.aria;\n ariaInfo.update(component, ariaInfo, toggleState.get());\n };\n var updateClass = function (component, toggleConfig, toggleState) {\n toggleConfig.toggleClass.each(function (toggleClass) {\n if (toggleState.get()) {\n add$2(component.element, toggleClass);\n } else {\n remove$2(component.element, toggleClass);\n }\n });\n };\n var toggle$2 = function (component, toggleConfig, toggleState) {\n set$1(component, toggleConfig, toggleState, !toggleState.get());\n };\n var on = function (component, toggleConfig, toggleState) {\n toggleState.set(true);\n updateClass(component, toggleConfig, toggleState);\n updateAriaState(component, toggleConfig, toggleState);\n };\n var off = function (component, toggleConfig, toggleState) {\n toggleState.set(false);\n updateClass(component, toggleConfig, toggleState);\n updateAriaState(component, toggleConfig, toggleState);\n };\n var set$1 = function (component, toggleConfig, toggleState, state) {\n var action = state ? on : off;\n action(component, toggleConfig, toggleState);\n };\n var isOn = function (component, toggleConfig, toggleState) {\n return toggleState.get();\n };\n var onLoad = function (component, toggleConfig, toggleState) {\n set$1(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$1\n });\n\n var exhibit$3 = function () {\n return nu$7({});\n };\n var events$b = function (toggleConfig, toggleState) {\n var execute = executeEvent(toggleConfig, toggleState, toggle$2);\n var 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$b\n });\n\n var updatePressed = function (component, ariaInfo, status) {\n set$8(component.element, 'aria-pressed', status);\n if (ariaInfo.syncWithExpanded) {\n updateExpanded(component, ariaInfo, status);\n }\n };\n var updateSelected = function (component, ariaInfo, status) {\n set$8(component.element, 'aria-selected', status);\n };\n var updateChecked = function (component, ariaInfo, status) {\n set$8(component.element, 'aria-checked', status);\n };\n var updateExpanded = function (component, ariaInfo, status) {\n set$8(component.element, 'aria-expanded', status);\n };\n\n var ToggleSchema = [\n defaulted('selected', false),\n option('toggleClass'),\n defaulted('toggleOnExecute', true),\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 var Toggling = create$8({\n fields: ToggleSchema,\n name: 'toggling',\n active: ActiveToggle,\n apis: ToggleApis,\n state: SetupBehaviourCellState(false)\n });\n\n var pointerEvents = function () {\n var onClick = function (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 var events$a = function (optAction) {\n var executeHandler = function (action) {\n return runOnExecute$1(function (component, simulatedEvent) {\n action(component);\n simulatedEvent.stop();\n });\n };\n return derive$2(flatten([\n optAction.map(executeHandler).toArray(),\n pointerEvents()\n ]));\n };\n\n var hoverEvent = 'alloy.item-hover';\n var focusEvent = 'alloy.item-focus';\n var onHover = function (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: item });\n }\n };\n var onFocus$1 = function (item) {\n emitWith(item, focusEvent, { item: item });\n };\n var hover = constant$1(hoverEvent);\n var focus$1 = constant$1(focusEvent);\n\n var builder$2 = function (detail) {\n return {\n dom: detail.dom,\n domModification: __assign(__assign({}, detail.domModification), { attributes: __assign(__assign(__assign({ 'role': detail.toggling.isSome() ? 'menuitemcheckbox' : 'menuitem' }, detail.domModification.attributes), { 'aria-haspopup': detail.hasSubmenu }), detail.hasSubmenu ? { 'aria-expanded': false } : {}) }),\n behaviours: SketchBehaviours.augment(detail.itemBehaviours, [\n detail.toggling.fold(Toggling.revoke, function (tConfig) {\n return Toggling.config(__assign({ aria: { mode: 'checked' } }, tConfig));\n }),\n Focusing.config({\n ignore: detail.ignoreFocus,\n stopMousedown: detail.ignoreFocus,\n onFocus: function (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', __spreadArray(__spreadArray([], pointerEvents(), true), [\n run$1(mouseover(), onHover),\n run$1(focusItem(), Focusing.focus)\n ], false))\n ]),\n components: detail.components,\n eventOrder: detail.eventOrder\n };\n };\n var schema$p = [\n required$1('data'),\n required$1('components'),\n required$1('dom'),\n defaulted('hasSubmenu', false),\n option('toggling'),\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 var builder$1 = function (detail) {\n return {\n dom: detail.dom,\n components: detail.components,\n events: derive$2([stopper(focusItem())])\n };\n };\n var schema$o = [\n required$1('dom'),\n required$1('components'),\n output$1('builder', builder$1)\n ];\n\n var owner$2 = constant$1('item-widget');\n var parts$h = constant$1([required({\n name: 'widget',\n overrides: function (detail) {\n return {\n behaviours: derive$1([Representing.config({\n store: {\n mode: 'manual',\n getValue: function (_component) {\n return detail.data;\n },\n setValue: noop\n }\n })])\n };\n }\n })]);\n\n var builder = function (detail) {\n var subs = substitutes(owner$2(), detail, parts$h());\n var components = components$1(owner$2(), detail, subs.internals());\n var focusWidget = function (component) {\n return getPart(component, detail, 'widget').map(function (widget) {\n Keying.focusIn(widget);\n return widget;\n });\n };\n var onHorizontalArrow = function (component, simulatedEvent) {\n return inside(simulatedEvent.event.target) ? Optional.none() : function () {\n if (detail.autofocus) {\n simulatedEvent.setSource(component.element);\n return Optional.none();\n } else {\n return Optional.none();\n }\n }();\n };\n return {\n dom: detail.dom,\n components: components,\n domModification: detail.domModification,\n events: derive$2([\n runOnExecute$1(function (component, simulatedEvent) {\n focusWidget(component).each(function (_widget) {\n simulatedEvent.stop();\n });\n }),\n run$1(mouseover(), onHover),\n run$1(focusItem(), function (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: function (component) {\n onFocus$1(component);\n }\n }),\n Keying.config({\n mode: 'special',\n focusIn: detail.autofocus ? function (component) {\n focusWidget(component);\n } : revoke(),\n onLeft: onHorizontalArrow,\n onRight: onHorizontalArrow,\n onEscape: function (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 var 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 var itemSchema$2 = choose$1('type', {\n widget: schema$n,\n item: schema$p,\n separator: schema$o\n });\n var configureGrid = function (detail, movementInfo) {\n return {\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 };\n var configureMatrix = function (detail, movementInfo) {\n return {\n mode: 'matrix',\n selectors: {\n row: movementInfo.rowSelector,\n cell: '.' + detail.markers.item\n },\n focusManager: detail.focusManager\n };\n };\n var configureMenu = function (detail, movementInfo) {\n return {\n mode: 'menu',\n selector: '.' + detail.markers.item,\n moveOnTab: movementInfo.moveOnTab,\n focusManager: detail.focusManager\n };\n };\n var parts$g = constant$1([group({\n factory: {\n sketch: function (spec) {\n var itemInfo = asRawOrDie$1('menu.spec item', itemSchema$2, spec);\n return itemInfo.builder(itemInfo);\n }\n },\n name: 'items',\n unit: 'item',\n defaults: function (detail, u) {\n return has$2(u, 'uid') ? u : __assign(__assign({}, u), { uid: generate$5('item') });\n },\n overrides: function (detail, u) {\n return {\n type: u.type,\n ignoreFocus: detail.fakeFocus,\n domModification: { classes: [detail.markers.item] }\n };\n }\n })]);\n var schema$m = constant$1([\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 ],\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 ]);\n\n var focus = constant$1('alloy.menu-focus');\n\n var make$7 = function (detail, components, _spec, _externals) {\n return {\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 }),\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(), function (menu, simulatedEvent) {\n var event = simulatedEvent.event;\n menu.getSystem().getByDom(event.target).each(function (item) {\n Highlighting.highlight(menu, item);\n simulatedEvent.stop();\n emitWith(menu, focus(), {\n menu: menu,\n item: item\n });\n });\n }),\n run$1(hover(), function (menu, simulatedEvent) {\n var item = simulatedEvent.event.item;\n Highlighting.highlight(menu, item);\n })\n ]),\n components: components,\n eventOrder: detail.eventOrder,\n domModification: { attributes: { role: 'menu' } }\n };\n };\n\n var Menu = composite({\n name: 'Menu',\n configFields: schema$m(),\n partFields: parts$g(),\n factory: make$7\n });\n\n var transpose$1 = function (obj) {\n return tupleMap(obj, function (v, k) {\n return {\n k: v,\n v: k\n };\n });\n };\n var trace = function (items, byItem, byMenu, finish) {\n return get$e(byMenu, finish).bind(function (triggerItem) {\n return get$e(items, triggerItem).bind(function (triggerMenu) {\n var rest = trace(items, byItem, byMenu, triggerMenu);\n return Optional.some([triggerMenu].concat(rest));\n });\n }).getOr([]);\n };\n var generate$2 = function (menus, expansions) {\n var items = {};\n each(menus, function (menuItems, menu) {\n each$1(menuItems, function (item) {\n items[item] = menu;\n });\n });\n var byItem = expansions;\n var byMenu = transpose$1(expansions);\n var menuPaths = map$1(byMenu, function (_triggerItem, submenu) {\n return [submenu].concat(trace(items, byItem, byMenu, submenu));\n });\n return map$1(items, function (menu) {\n return get$e(menuPaths, menu).getOr([menu]);\n });\n };\n\n var init$c = function () {\n var expansions = Cell({});\n var menus = Cell({});\n var paths = Cell({});\n var primary = value$1();\n var directory = Cell({});\n var clear = function () {\n expansions.set({});\n menus.set({});\n paths.set({});\n primary.clear();\n };\n var isClear = function () {\n return primary.get().isNone();\n };\n var setMenuBuilt = function (menuName, built) {\n var _a;\n menus.set(__assign(__assign({}, menus.get()), (_a = {}, _a[menuName] = {\n type: 'prepared',\n menu: built\n }, _a)));\n };\n var setContents = function (sPrimary, sMenus, sExpansions, dir) {\n primary.set(sPrimary);\n expansions.set(sExpansions);\n menus.set(sMenus);\n directory.set(dir);\n var sPaths = generate$2(dir, sExpansions);\n paths.set(sPaths);\n };\n var getTriggeringItem = function (menuValue) {\n return find$4(expansions.get(), function (v, _k) {\n return v === menuValue;\n });\n };\n var getTriggerData = function (menuValue, getItemByValue, path) {\n return getPreparedMenu(menuValue).bind(function (menu) {\n return getTriggeringItem(menuValue).bind(function (triggeringItemValue) {\n return getItemByValue(triggeringItemValue).map(function (triggeredItem) {\n return {\n triggeredMenu: menu,\n triggeringItem: triggeredItem,\n triggeringPath: path\n };\n });\n });\n });\n };\n var getTriggeringPath = function (itemValue, getItemByValue) {\n var extraPath = filter$2(lookupItem(itemValue).toArray(), function (menuValue) {\n return getPreparedMenu(menuValue).isSome();\n });\n return get$e(paths.get(), itemValue).bind(function (path) {\n var revPath = reverse(extraPath.concat(path));\n var triggers = bind$3(revPath, function (menuValue, menuIndex) {\n return getTriggerData(menuValue, getItemByValue, revPath.slice(0, menuIndex + 1)).fold(function () {\n return is$1(primary.get(), menuValue) ? [] : [Optional.none()];\n }, function (data) {\n return [Optional.some(data)];\n });\n });\n return sequence(triggers);\n });\n };\n var expand = function (itemValue) {\n return get$e(expansions.get(), itemValue).map(function (menu) {\n var current = get$e(paths.get(), itemValue).getOr([]);\n return [menu].concat(current);\n });\n };\n var collapse = function (itemValue) {\n return get$e(paths.get(), itemValue).bind(function (path) {\n return path.length > 1 ? Optional.some(path.slice(1)) : Optional.none();\n });\n };\n var refresh = function (itemValue) {\n return get$e(paths.get(), itemValue);\n };\n var getPreparedMenu = function (menuValue) {\n return lookupMenu(menuValue).bind(extractPreparedMenu);\n };\n var lookupMenu = function (menuValue) {\n return get$e(menus.get(), menuValue);\n };\n var lookupItem = function (itemValue) {\n return get$e(expansions.get(), itemValue);\n };\n var otherMenus = function (path) {\n var menuValues = directory.get();\n return difference(keys(menuValues), path);\n };\n var getPrimary = function () {\n return primary.get().bind(getPreparedMenu);\n };\n var getMenus = function () {\n return menus.get();\n };\n return {\n setMenuBuilt: setMenuBuilt,\n setContents: setContents,\n expand: expand,\n refresh: refresh,\n collapse: collapse,\n lookupMenu: lookupMenu,\n lookupItem: lookupItem,\n otherMenus: otherMenus,\n getPrimary: getPrimary,\n getMenus: getMenus,\n clear: clear,\n isClear: isClear,\n getTriggeringPath: getTriggeringPath\n };\n };\n var extractPreparedMenu = function (prep) {\n return prep.type === 'prepared' ? Optional.some(prep.menu) : Optional.none();\n };\n var LayeredState = {\n init: init$c,\n extractPreparedMenu: extractPreparedMenu\n };\n\n var make$6 = function (detail, _rawUiSpec) {\n var submenuParentItems = value$1();\n var buildMenus = function (container, primaryName, menus) {\n return map$1(menus, function (spec, name) {\n var makeSketch = function () {\n return Menu.sketch(__assign(__assign({}, spec), {\n value: name,\n markers: detail.markers,\n fakeFocus: detail.fakeFocus,\n onHighlight: detail.onHighlight,\n focusManager: detail.fakeFocus ? highlights() : dom$2()\n }));\n };\n return name === primaryName ? {\n type: 'prepared',\n menu: container.getSystem().build(makeSketch())\n } : {\n type: 'notbuilt',\n nbMenu: makeSketch\n };\n });\n };\n var layeredState = LayeredState.init();\n var setup = function (container) {\n var componentMap = buildMenus(container, detail.data.primary, detail.data.menus);\n var directory = toDirectory();\n layeredState.setContents(detail.data.primary, componentMap, detail.data.expansions, directory);\n return layeredState.getPrimary();\n };\n var getItemValue = function (item) {\n return Representing.getValue(item).value;\n };\n var getItemByValue = function (_container, menus, itemValue) {\n return findMap(menus, function (menu) {\n if (!menu.getSystem().isConnected()) {\n return Optional.none();\n }\n var candidates = Highlighting.getCandidates(menu);\n return find$5(candidates, function (c) {\n return getItemValue(c) === itemValue;\n });\n });\n };\n var toDirectory = function (_container) {\n return map$1(detail.data.menus, function (data, _menuName) {\n return bind$3(data.items, function (item) {\n return item.type === 'separator' ? [] : [item.data.value];\n });\n });\n };\n var setActiveMenu = function (container, menu) {\n Highlighting.highlight(container, menu);\n Highlighting.getHighlighted(menu).orThunk(function () {\n return Highlighting.getFirst(menu);\n }).each(function (item) {\n dispatch(container, item.element, focusItem());\n });\n };\n var getMenus = function (state, menuValues) {\n return cat(map$2(menuValues, function (mv) {\n return state.lookupMenu(mv).bind(function (prep) {\n return prep.type === 'prepared' ? Optional.some(prep.menu) : Optional.none();\n });\n }));\n };\n var closeOthers = function (container, state, path) {\n var others = getMenus(state, state.otherMenus(path));\n each$1(others, function (o) {\n remove$1(o.element, [detail.markers.backgroundMenu]);\n if (!detail.stayInDom) {\n Replacing.remove(container, o);\n }\n });\n };\n var getSubmenuParents = function (container) {\n return submenuParentItems.get().getOrThunk(function () {\n var r = {};\n var items = descendants(container.element, '.' + detail.markers.item);\n var parentItems = filter$2(items, function (i) {\n return get$d(i, 'aria-haspopup') === 'true';\n });\n each$1(parentItems, function (i) {\n container.getSystem().getByDom(i).each(function (itemComp) {\n var key = getItemValue(itemComp);\n r[key] = itemComp;\n });\n });\n submenuParentItems.set(r);\n return r;\n });\n };\n var updateAriaExpansions = function (container, path) {\n var parentItems = getSubmenuParents(container);\n each(parentItems, function (v, k) {\n var expanded = contains$2(path, k);\n set$8(v.element, 'aria-expanded', expanded);\n });\n };\n var updateMenuPath = function (container, state, path) {\n return Optional.from(path[0]).bind(function (latestMenuName) {\n return state.lookupMenu(latestMenuName).bind(function (menuPrep) {\n if (menuPrep.type === 'notbuilt') {\n return Optional.none();\n } else {\n var activeMenu = menuPrep.menu;\n var rest = getMenus(state, path.slice(1));\n each$1(rest, function (r) {\n add$2(r.element, detail.markers.backgroundMenu);\n });\n if (!inBody(activeMenu.element)) {\n Replacing.append(container, premade(activeMenu));\n }\n remove$1(activeMenu.element, [detail.markers.backgroundMenu]);\n setActiveMenu(container, activeMenu);\n closeOthers(container, state, path);\n return Optional.some(activeMenu);\n }\n });\n });\n };\n var ExpandHighlightDecision;\n (function (ExpandHighlightDecision) {\n ExpandHighlightDecision[ExpandHighlightDecision['HighlightSubmenu'] = 0] = 'HighlightSubmenu';\n ExpandHighlightDecision[ExpandHighlightDecision['HighlightParent'] = 1] = 'HighlightParent';\n }(ExpandHighlightDecision || (ExpandHighlightDecision = {})));\n var buildIfRequired = function (container, menuName, menuPrep) {\n if (menuPrep.type === 'notbuilt') {\n var menu = container.getSystem().build(menuPrep.nbMenu());\n layeredState.setMenuBuilt(menuName, menu);\n return menu;\n } else {\n return menuPrep.menu;\n }\n };\n var expandRight = function (container, item, decision) {\n if (decision === void 0) {\n decision = ExpandHighlightDecision.HighlightSubmenu;\n }\n if (item.hasConfigured(Disabling) && Disabling.isDisabled(item)) {\n return Optional.some(item);\n } else {\n var value = getItemValue(item);\n return layeredState.expand(value).bind(function (path) {\n updateAriaExpansions(container, path);\n return Optional.from(path[0]).bind(function (menuName) {\n return layeredState.lookupMenu(menuName).bind(function (activeMenuPrep) {\n var 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 };\n var collapseLeft = function (container, item) {\n var value = getItemValue(item);\n return layeredState.collapse(value).bind(function (path) {\n updateAriaExpansions(container, path);\n return updateMenuPath(container, layeredState, path).map(function (activeMenu) {\n detail.onCollapseMenu(container, item, activeMenu);\n return activeMenu;\n });\n });\n };\n var updateView = function (container, item) {\n var value = getItemValue(item);\n return layeredState.refresh(value).bind(function (path) {\n updateAriaExpansions(container, path);\n return updateMenuPath(container, layeredState, path);\n });\n };\n var onRight = function (container, item) {\n return inside(item.element) ? Optional.none() : expandRight(container, item, ExpandHighlightDecision.HighlightSubmenu);\n };\n var onLeft = function (container, item) {\n return inside(item.element) ? Optional.none() : collapseLeft(container, item);\n };\n var onEscape = function (container, item) {\n return collapseLeft(container, item).orThunk(function () {\n return detail.onEscape(container, item).map(function () {\n return container;\n });\n });\n };\n var keyOnItem = function (f) {\n return function (container, simulatedEvent) {\n return closest$1(simulatedEvent.getSource(), '.' + detail.markers.item).bind(function (target) {\n return container.getSystem().getByDom(target).toOptional().bind(function (item) {\n return f(container, item).map(always);\n });\n });\n };\n };\n var events = derive$2([\n run$1(focus(), function (sandbox, simulatedEvent) {\n var item = simulatedEvent.event.item;\n layeredState.lookupItem(getItemValue(item)).each(function () {\n var menu = simulatedEvent.event.menu;\n Highlighting.highlight(sandbox, menu);\n var value = getItemValue(simulatedEvent.event.item);\n layeredState.refresh(value).each(function (path) {\n return closeOthers(sandbox, layeredState, path);\n });\n });\n }),\n runOnExecute$1(function (component, simulatedEvent) {\n var target = simulatedEvent.event.target;\n component.getSystem().getByDom(target).each(function (item) {\n var itemValue = getItemValue(item);\n if (itemValue.indexOf('collapse-item') === 0) {\n collapseLeft(component, item);\n }\n expandRight(component, item, ExpandHighlightDecision.HighlightSubmenu).fold(function () {\n detail.onExecute(component, item);\n }, noop);\n });\n }),\n runOnAttached(function (container, _simulatedEvent) {\n setup(container).each(function (primary) {\n Replacing.append(container, premade(primary));\n detail.onOpenMenu(container, primary);\n if (detail.highlightImmediately) {\n setActiveMenu(container, primary);\n }\n });\n })\n ].concat(detail.navigateOnHover ? [run$1(hover(), function (sandbox, simulatedEvent) {\n var item = simulatedEvent.event.item;\n updateView(sandbox, item);\n expandRight(sandbox, item, ExpandHighlightDecision.HighlightParent);\n detail.onHover(sandbox, item);\n })] : []));\n var getActiveItem = function (container) {\n return Highlighting.getHighlighted(container).bind(Highlighting.getHighlighted);\n };\n var collapseMenuApi = function (container) {\n getActiveItem(container).each(function (currentItem) {\n collapseLeft(container, currentItem);\n });\n };\n var highlightPrimary = function (container) {\n layeredState.getPrimary().each(function (primary) {\n setActiveMenu(container, primary);\n });\n };\n var extractMenuFromContainer = function (container) {\n return Optional.from(container.components()[0]).filter(function (comp) {\n return get$d(comp.element, 'role') === 'menu';\n });\n };\n var repositionMenus = function (container) {\n var maybeActivePrimary = layeredState.getPrimary().bind(function (primary) {\n return getActiveItem(container).bind(function (currentItem) {\n var itemValue = getItemValue(currentItem);\n var allMenus = values(layeredState.getMenus());\n var preparedMenus = cat(map$2(allMenus, LayeredState.extractPreparedMenu));\n return layeredState.getTriggeringPath(itemValue, function (v) {\n return getItemByValue(container, preparedMenus, v);\n });\n }).map(function (triggeringPath) {\n return {\n primary: primary,\n triggeringPath: triggeringPath\n };\n });\n });\n maybeActivePrimary.fold(function () {\n extractMenuFromContainer(container).each(function (primaryMenu) {\n detail.onRepositionMenu(container, primaryMenu, []);\n });\n }, function (_a) {\n var primary = _a.primary, triggeringPath = _a.triggeringPath;\n detail.onRepositionMenu(container, primary, triggeringPath);\n });\n };\n var apis = {\n collapseMenu: collapseMenuApi,\n highlightPrimary: highlightPrimary,\n repositionMenus: 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: function (container, _keyInfo) {\n layeredState.getPrimary().each(function (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: function (container) {\n return Highlighting.getHighlighted(container);\n }\n }),\n Replacing.config({})\n ]),\n eventOrder: detail.eventOrder,\n apis: apis,\n events: events\n };\n };\n var collapseItem$1 = constant$1('collapse-item');\n\n var tieredData = function (primary, menus, expansions) {\n return {\n primary: primary,\n menus: menus,\n expansions: expansions\n };\n };\n var singleData = function (name, menu) {\n return {\n primary: name,\n menus: wrap$1(name, menu),\n expansions: {}\n };\n };\n var collapseItem = function (text) {\n return {\n value: generate$6(collapseItem$1()),\n meta: { text: text }\n };\n };\n var 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('highlightImmediately', true),\n requiredObjOf('data', [\n required$1('primary'),\n required$1('menus'),\n required$1('expansions')\n ]),\n defaulted('fakeFocus', false),\n onHandler('onHighlight'),\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: function (apis, tmenu) {\n apis.collapseMenu(tmenu);\n },\n highlightPrimary: function (apis, tmenu) {\n apis.highlightPrimary(tmenu);\n },\n repositionMenus: function (apis, tmenu) {\n apis.repositionMenus(tmenu);\n }\n },\n factory: make$6,\n extraApis: {\n tieredData: tieredData,\n singleData: singleData,\n collapseItem: collapseItem\n }\n });\n\n var makeMenu = function (detail, menuSandbox, placementSpec, menuSpec, getBounds) {\n var lazySink = function () {\n return detail.lazySink(menuSandbox);\n };\n var layouts = menuSpec.type === 'horizontal' ? {\n layouts: {\n onLtr: function () {\n return belowOrAbove();\n },\n onRtl: function () {\n return belowOrAboveRtl();\n }\n }\n } : {};\n var isFirstTierSubmenu = function (triggeringPaths) {\n return triggeringPaths.length === 2;\n };\n var getSubmenuLayouts = function (triggeringPaths) {\n return isFirstTierSubmenu(triggeringPaths) ? layouts : {};\n };\n return tieredMenu.sketch({\n dom: { tag: 'div' },\n data: menuSpec.data,\n markers: menuSpec.menu.markers,\n highlightImmediately: menuSpec.menu.highlightImmediately,\n onEscape: function () {\n Sandboxing.close(menuSandbox);\n detail.onEscape.map(function (handler) {\n return handler(menuSandbox);\n });\n return Optional.some(true);\n },\n onExecute: function () {\n return Optional.some(true);\n },\n onOpenMenu: function (tmenu, menu) {\n Positioning.positionWithinBounds(lazySink().getOrDie(), menu, placementSpec, getBounds());\n },\n onOpenSubmenu: function (tmenu, item, submenu, triggeringPaths) {\n var sink = lazySink().getOrDie();\n Positioning.position(sink, submenu, {\n anchor: __assign({\n type: 'submenu',\n item: item\n }, getSubmenuLayouts(triggeringPaths))\n });\n },\n onRepositionMenu: function (tmenu, primaryMenu, submenuTriggers) {\n var sink = lazySink().getOrDie();\n Positioning.positionWithinBounds(sink, primaryMenu, placementSpec, getBounds());\n each$1(submenuTriggers, function (st) {\n var submenuLayouts = getSubmenuLayouts(st.triggeringPath);\n Positioning.position(sink, st.triggeredMenu, {\n anchor: __assign({\n type: 'submenu',\n item: st.triggeringItem\n }, submenuLayouts)\n });\n });\n }\n });\n };\n var factory$m = function (detail, spec) {\n var isPartOfRelated = function (sandbox, queryElem) {\n var related = detail.getRelated(sandbox);\n return related.exists(function (rel) {\n return isPartOf$1(rel, queryElem);\n });\n };\n var setContent = function (sandbox, thing) {\n Sandboxing.setContent(sandbox, thing);\n };\n var showAt = function (sandbox, thing, placementSpec) {\n showWithin(sandbox, thing, placementSpec, Optional.none());\n };\n var showWithin = function (sandbox, thing, placementSpec, boxElement) {\n showWithinBounds(sandbox, thing, placementSpec, function () {\n return boxElement.map(function (elem) {\n return box$1(elem);\n });\n });\n };\n var showWithinBounds = function (sandbox, thing, placementSpec, getBounds) {\n var sink = detail.lazySink(sandbox).getOrDie();\n Sandboxing.openWhileCloaked(sandbox, thing, function () {\n return Positioning.positionWithinBounds(sink, sandbox, placementSpec, getBounds());\n });\n Representing.setValue(sandbox, Optional.some({\n mode: 'position',\n config: placementSpec,\n getBounds: getBounds\n }));\n };\n var showMenuAt = function (sandbox, placementSpec, menuSpec) {\n showMenuWithinBounds(sandbox, placementSpec, menuSpec, Optional.none);\n };\n var showMenuWithinBounds = function (sandbox, placementSpec, menuSpec, getBounds) {\n var menu = makeMenu(detail, sandbox, placementSpec, menuSpec, getBounds);\n Sandboxing.open(sandbox, menu);\n Representing.setValue(sandbox, Optional.some({\n mode: 'menu',\n menu: menu\n }));\n };\n var hide = function (sandbox) {\n if (Sandboxing.isOpen(sandbox)) {\n Representing.setValue(sandbox, Optional.none());\n Sandboxing.close(sandbox);\n }\n };\n var getContent = function (sandbox) {\n return Sandboxing.getState(sandbox);\n };\n var reposition = function (sandbox) {\n if (Sandboxing.isOpen(sandbox)) {\n Representing.getValue(sandbox).each(function (state) {\n switch (state.mode) {\n case 'menu':\n Sandboxing.getState(sandbox).each(tieredMenu.repositionMenus);\n break;\n case 'position':\n var sink = detail.lazySink(sandbox).getOrDie();\n Positioning.positionWithinBounds(sink, sandbox, state.config, state.getBounds());\n break;\n }\n });\n }\n };\n var apis = {\n setContent: setContent,\n showAt: showAt,\n showWithin: showWithin,\n showWithinBounds: showWithinBounds,\n showMenuAt: showMenuAt,\n showMenuWithinBounds: showMenuWithinBounds,\n hide: hide,\n getContent: getContent,\n reposition: 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: function (sandbox, data, queryElem) {\n return isPartOf$1(data, queryElem) || isPartOfRelated(sandbox, queryElem);\n },\n getAttachPoint: function (sandbox) {\n return detail.lazySink(sandbox).getOrDie();\n },\n onOpen: function (sandbox) {\n detail.onShow(sandbox);\n },\n onClose: function (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: __assign(__assign({}, receivingChannel$1(__assign({ isExtraPart: spec.isExtraPart }, detail.fireDismissalEventInstead.map(function (fe) {\n return { fireEventInstead: { event: fe.event } };\n }).getOr({})))), receivingChannel(__assign(__assign({}, detail.fireRepositionEventInstead.map(function (fe) {\n return { fireEventInstead: { event: fe.event } };\n }).getOr({})), { doReposition: reposition })))\n })\n ]),\n eventOrder: detail.eventOrder,\n apis: apis\n };\n };\n var 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$m,\n apis: {\n showAt: function (apis, component, anchor, thing) {\n apis.showAt(component, anchor, thing);\n },\n showWithin: function (apis, component, anchor, thing, boxElement) {\n apis.showWithin(component, anchor, thing, boxElement);\n },\n showWithinBounds: function (apis, component, anchor, thing, bounds) {\n apis.showWithinBounds(component, anchor, thing, bounds);\n },\n showMenuAt: function (apis, component, anchor, menuSpec) {\n apis.showMenuAt(component, anchor, menuSpec);\n },\n showMenuWithinBounds: function (apis, component, anchor, menuSpec, bounds) {\n apis.showMenuWithinBounds(component, anchor, menuSpec, bounds);\n },\n hide: function (apis, component) {\n apis.hide(component);\n },\n isOpen: function (apis, component) {\n return apis.isOpen(component);\n },\n getContent: function (apis, component) {\n return apis.getContent(component);\n },\n setContent: function (apis, component, thing) {\n apis.setContent(component, thing);\n },\n reposition: function (apis, component) {\n apis.reposition(component);\n }\n }\n });\n\n var labelPrefix = 'layout-inset';\n var westEdgeX = function (anchor) {\n return anchor.x;\n };\n var middleX = function (anchor, element) {\n return anchor.x + anchor.width / 2 - element.width / 2;\n };\n var eastEdgeX = function (anchor, element) {\n return anchor.x + anchor.width - element.width;\n };\n var northY = function (anchor) {\n return anchor.y;\n };\n var southY = function (anchor, element) {\n return anchor.y + anchor.height - element.height;\n };\n var centreY = function (anchor, element) {\n return anchor.y + anchor.height / 2 - element.height / 2;\n };\n var southwest = function (anchor, element, bubbles) {\n return nu$6(eastEdgeX(anchor, element), southY(anchor, element), bubbles.insetSouthwest(), northwest$3(), 'southwest', boundsRestriction(anchor, {\n right: 0,\n bottom: 3\n }), labelPrefix);\n };\n var southeast = function (anchor, element, bubbles) {\n return nu$6(westEdgeX(anchor), southY(anchor, element), bubbles.insetSoutheast(), northeast$3(), 'southeast', boundsRestriction(anchor, {\n left: 1,\n bottom: 3\n }), labelPrefix);\n };\n var northwest = function (anchor, element, bubbles) {\n return nu$6(eastEdgeX(anchor, element), northY(anchor), bubbles.insetNorthwest(), southwest$3(), 'northwest', boundsRestriction(anchor, {\n right: 0,\n top: 2\n }), labelPrefix);\n };\n var northeast = function (anchor, element, bubbles) {\n return nu$6(westEdgeX(anchor), northY(anchor), bubbles.insetNortheast(), southeast$3(), 'northeast', boundsRestriction(anchor, {\n left: 1,\n top: 2\n }), labelPrefix);\n };\n var north = function (anchor, element, bubbles) {\n return nu$6(middleX(anchor, element), northY(anchor), bubbles.insetNorth(), south$3(), 'north', boundsRestriction(anchor, { top: 2 }), labelPrefix);\n };\n var south = function (anchor, element, bubbles) {\n return nu$6(middleX(anchor, element), southY(anchor, element), bubbles.insetSouth(), north$3(), 'south', boundsRestriction(anchor, { bottom: 3 }), labelPrefix);\n };\n var east = function (anchor, element, bubbles) {\n return nu$6(eastEdgeX(anchor, element), centreY(anchor, element), bubbles.insetEast(), west$3(), 'east', boundsRestriction(anchor, { right: 0 }), labelPrefix);\n };\n var west = function (anchor, element, bubbles) {\n return nu$6(westEdgeX(anchor), centreY(anchor, element), bubbles.insetWest(), east$3(), 'west', boundsRestriction(anchor, { left: 1 }), labelPrefix);\n };\n var lookupPreserveLayout = function (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 var preserve = function (anchor, element, bubbles, placee, bounds) {\n var layout = getPlacement(placee).map(lookupPreserveLayout).getOr(north);\n return layout(anchor, element, bubbles, placee, bounds);\n };\n var lookupFlippedLayout = function (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 var flip$2 = function (anchor, element, bubbles, placee, bounds) {\n var layout = getPlacement(placee).map(lookupFlippedLayout).getOr(north);\n return layout(anchor, element, bubbles, placee, bounds);\n };\n\n var global$f = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var factory$l = function (detail) {\n var events = events$a(detail.action);\n var tag = detail.dom.tag;\n var lookupAttr = function (attr) {\n return get$e(detail.dom, 'attributes').bind(function (attrs) {\n return get$e(attrs, attr);\n });\n };\n var getModAttributes = function () {\n if (tag === 'button') {\n var type = lookupAttr('type').getOr('button');\n var roleAttrs = lookupAttr('role').map(function (role) {\n return { role: role };\n }).getOr({});\n return __assign({ type: type }, roleAttrs);\n } else {\n var role = lookupAttr('role').getOr('button');\n return { role: role };\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: detail.components,\n events: 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 var Button = single({\n name: 'Button',\n factory: factory$l,\n configFields: [\n defaulted('uid', undefined),\n required$1('dom'),\n defaulted('components', []),\n SketchBehaviours.field('buttonBehaviours', [\n Focusing,\n Keying\n ]),\n option('action'),\n option('role'),\n defaulted('eventOrder', {})\n ]\n });\n\n var record = function (spec) {\n var uid = isSketchSpec(spec) && hasNonNullableKey(spec, 'uid') ? spec.uid : generate$5('memento');\n var get = function (anyInSystem) {\n return anyInSystem.getSystem().getByUid(uid).getOrDie();\n };\n var getOpt = function (anyInSystem) {\n return anyInSystem.getSystem().getByUid(uid).toOptional();\n };\n var asSpec = function () {\n return __assign(__assign({}, spec), { uid: uid });\n };\n return {\n get: get,\n getOpt: getOpt,\n asSpec: asSpec\n };\n };\n\n var global$e = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n var 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 var defaultIconName = 'temporary-placeholder';\n var defaultIcon = function (icons) {\n return function () {\n return get$e(icons, defaultIconName).getOr('!not found!');\n };\n };\n var getIconName = function (name, icons) {\n var lcName = name.toLowerCase();\n if (global$e.isRtl()) {\n var rtlName = ensureTrailing(lcName, '-rtl');\n return has$2(icons, rtlName) ? rtlName : lcName;\n } else {\n return lcName;\n }\n };\n var lookupIcon = function (name, icons) {\n return get$e(icons, getIconName(name, icons));\n };\n var get$1 = function (name, iconProvider) {\n var icons = iconProvider();\n return lookupIcon(name, icons).getOrThunk(defaultIcon(icons));\n };\n var getOr = function (name, iconProvider, fallbackIcon) {\n var icons = iconProvider();\n return lookupIcon(name, icons).or(fallbackIcon).getOrThunk(defaultIcon(icons));\n };\n var needsRtlTransform = function (iconName) {\n return global$e.isRtl() ? has$2(rtlTransform, iconName) : false;\n };\n var addFocusableBehaviour = function () {\n return config('add-focusable', [runOnAttached(function (comp) {\n child(comp.element, 'svg').each(function (svg) {\n return set$8(svg, 'focusable', 'false');\n });\n })]);\n };\n var renderIcon$2 = function (spec, iconName, icons, fallbackIcon) {\n var _a, _b;\n var rtlIconClasses = needsRtlTransform(iconName) ? ['tox-icon--flip'] : [];\n var iconHtml = get$e(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(__spreadArray(__spreadArray([], (_b = spec.behaviours) !== null && _b !== void 0 ? _b : [], true), [addFocusableBehaviour()], false))\n };\n };\n var render$3 = function (iconName, spec, iconProvider, fallbackIcon) {\n if (fallbackIcon === void 0) {\n fallbackIcon = Optional.none();\n }\n return renderIcon$2(spec, iconName, iconProvider(), fallbackIcon);\n };\n var renderFirst = function (iconNames, spec, iconProvider) {\n var icons = iconProvider();\n var iconName = find$5(iconNames, function (name) {\n return has$2(icons, getIconName(name, icons));\n });\n return renderIcon$2(spec, iconName.getOr(defaultIconName), icons, Optional.none());\n };\n\n var notificationIconMap = {\n success: 'checkmark',\n error: 'warning',\n err: 'error',\n warning: 'warning',\n warn: 'warning',\n info: 'info'\n };\n var factory$k = function (detail) {\n var memBannerText = record({\n dom: {\n tag: 'p',\n innerHtml: detail.translationProvider(detail.text)\n },\n behaviours: derive$1([Replacing.config({})])\n });\n var renderPercentBar = function (percent) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-bar'],\n attributes: { style: 'width: ' + percent + '%' }\n }\n };\n };\n var renderPercentText = function (percent) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-text'],\n innerHtml: percent + '%'\n }\n };\n };\n var 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 var updateProgress = function (comp, percent) {\n if (comp.getSystem().isConnected()) {\n memBannerProgress.getOpt(comp).each(function (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 var updateText = function (comp, text) {\n if (comp.getSystem().isConnected()) {\n var banner = memBannerText.get(comp);\n Replacing.set(banner, [text$1(text)]);\n }\n };\n var apis = {\n updateProgress: updateProgress,\n updateText: updateText\n };\n var iconChoices = flatten([\n detail.icon.toArray(),\n detail.level.toArray(),\n detail.level.bind(function (level) {\n return Optional.from(notificationIconMap[level]);\n }).toArray()\n ]);\n var 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 },\n components: [render$3('close', {\n tag: 'div',\n classes: ['tox-icon'],\n attributes: { 'aria-label': detail.translationProvider('Close') }\n }, detail.iconProvider)],\n action: function (comp) {\n detail.onAction(comp);\n }\n }));\n var notificationIconSpec = renderFirst(iconChoices, {\n tag: 'div',\n classes: ['tox-notification__icon']\n }, detail.iconProvider);\n var notificationBodySpec = {\n dom: {\n tag: 'div',\n classes: ['tox-notification__body']\n },\n components: [memBannerText.asSpec()],\n behaviours: derive$1([Replacing.config({})])\n };\n var components = [\n notificationIconSpec,\n notificationBodySpec\n ];\n return {\n uid: detail.uid,\n dom: {\n tag: 'div',\n attributes: { role: 'alert' },\n classes: detail.level.map(function (level) {\n return [\n 'tox-notification',\n 'tox-notification--in',\n 'tox-notification--' + level\n ];\n }).getOr([\n 'tox-notification',\n 'tox-notification--in'\n ])\n },\n behaviours: derive$1([\n Focusing.config({}),\n config('notification-events', [run$1(focusin(), function (comp) {\n memButton.getOpt(comp).each(Focusing.focus);\n })])\n ]),\n components: components.concat(detail.progress ? [memBannerProgress.asSpec()] : []).concat(!detail.closeButton ? [] : [memButton.asSpec()]),\n apis: apis\n };\n };\n var Notification = single({\n name: 'Notification',\n factory: factory$k,\n configFields: [\n option('level'),\n required$1('progress'),\n required$1('icon'),\n required$1('onAction'),\n required$1('text'),\n required$1('iconProvider'),\n required$1('translationProvider'),\n defaultedBoolean('closeButton', true)\n ],\n apis: {\n updateProgress: function (apis, comp, percent) {\n apis.updateProgress(comp, percent);\n },\n updateText: function (apis, comp, text) {\n apis.updateText(comp, text);\n }\n }\n });\n\n function NotificationManagerImpl (editor, extras, uiMothership) {\n var sharedBackstage = extras.backstage.shared;\n var getLayoutDirection = function (rel) {\n switch (rel) {\n case 'bc-bc':\n return south;\n case 'tc-tc':\n return north;\n case 'tc-bc':\n return north$2;\n case 'bc-tc':\n default:\n return south$2;\n }\n };\n var reposition = function (notifications) {\n if (notifications.length > 0) {\n each$1(notifications, function (notification, index) {\n if (index === 0) {\n notification.moveRel(null, 'banner');\n } else {\n notification.moveRel(notifications[index - 1].getEl(), 'bc-tc');\n }\n });\n }\n };\n var open = function (settings, closeCallback) {\n var hideCloseButton = !settings.closeButton && settings.timeout && (settings.timeout > 0 || settings.timeout < 0);\n var close = function () {\n closeCallback();\n InlineView.hide(notificationWrapper);\n };\n var 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: Optional.from(settings.icon),\n closeButton: !hideCloseButton,\n onAction: close,\n iconProvider: sharedBackstage.providers.icons,\n translationProvider: sharedBackstage.providers.translate\n }));\n var notificationWrapper = build$1(InlineView.sketch(__assign({\n dom: {\n tag: 'div',\n classes: ['tox-notifications-container']\n },\n lazySink: sharedBackstage.getSink,\n fireDismissalEventInstead: {}\n }, sharedBackstage.header.isPositionedAtTop() ? {} : { fireRepositionEventInstead: {} })));\n uiMothership.add(notificationWrapper);\n if (settings.timeout > 0) {\n global$f.setTimeout(function () {\n close();\n }, settings.timeout);\n }\n var getBounds = function () {\n var contentArea = box$1(SugarElement.fromDom(editor.getContentAreaContainer()));\n var win$1 = win();\n var x = clamp$1(win$1.x, contentArea.x, contentArea.right);\n var y = clamp$1(win$1.y, contentArea.y, contentArea.bottom);\n var right = Math.max(contentArea.right, win$1.right);\n var bottom = Math.max(contentArea.bottom, win$1.bottom);\n return Optional.some(bounds(x, y, right - x, bottom - y));\n };\n return {\n close: close,\n moveTo: function (x, y) {\n InlineView.showAt(notificationWrapper, premade(notification), {\n anchor: {\n type: 'makeshift',\n x: x,\n y: y\n }\n });\n },\n moveRel: function (element, rel) {\n var notificationSpec = premade(notification);\n var anchorOverrides = { maxHeightFunction: expandable$1() };\n if (rel !== 'banner' && isNonNullable(element)) {\n var layoutDirection_1 = getLayoutDirection(rel);\n var nodeAnchor = {\n type: 'node',\n root: body(),\n node: Optional.some(SugarElement.fromDom(element)),\n overrides: anchorOverrides,\n layouts: {\n onRtl: function () {\n return [layoutDirection_1];\n },\n onLtr: function () {\n return [layoutDirection_1];\n }\n }\n };\n InlineView.showWithinBounds(notificationWrapper, notificationSpec, { anchor: nodeAnchor }, getBounds);\n } else {\n var anchor = __assign(__assign({}, sharedBackstage.anchors.banner()), { overrides: anchorOverrides });\n InlineView.showWithinBounds(notificationWrapper, notificationSpec, { anchor: anchor }, getBounds);\n }\n },\n text: function (nuText) {\n Notification.updateText(notification, nuText);\n },\n settings: settings,\n getEl: function () {\n return notification.element.dom;\n },\n progressBar: {\n value: function (percent) {\n Notification.updateProgress(notification, percent);\n }\n }\n };\n };\n var close = function (notification) {\n notification.close();\n };\n var getArgs = function (notification) {\n return notification.settings;\n };\n return {\n open: open,\n close: close,\n reposition: reposition,\n getArgs: getArgs\n };\n }\n\n var first = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isNull(timer)) {\n timer = setTimeout(function () {\n timer = null;\n fn.apply(null, args);\n }, rate);\n }\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n var last = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n cancel();\n timer = setTimeout(function () {\n timer = null;\n fn.apply(null, args);\n }, rate);\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n\n var global$d = tinymce.util.Tools.resolve('tinymce.dom.TextSeeker');\n\n var isBoundary = function (dom, node) {\n return dom.isBlock(node) || contains$2([\n 'BR',\n 'IMG',\n 'HR',\n 'INPUT'\n ], node.nodeName) || dom.getContentEditable(node) === 'false';\n };\n var repeatLeft = function (dom, node, offset, process, rootNode) {\n var search = global$d(dom, function (node) {\n return isBoundary(dom, node);\n });\n return Optional.from(search.backwards(node, offset, process, rootNode));\n };\n\n var autocompleteSelector = '[data-mce-autocompleter]';\n var create$5 = function (editor, range) {\n return detect(SugarElement.fromDom(editor.selection.getNode())).getOrThunk(function () {\n var wrapper = SugarElement.fromHtml('', editor.getDoc());\n append$2(wrapper, SugarElement.fromDom(range.extractContents()));\n range.insertNode(wrapper.dom);\n parent(wrapper).each(function (elm) {\n return elm.dom.normalize();\n });\n last$1(wrapper).map(function (last) {\n editor.selection.setCursorLocation(last.dom, getEnd(last));\n });\n return wrapper;\n });\n };\n var detect = function (elm) {\n return closest$1(elm, autocompleteSelector);\n };\n\n var isValidTextRange = function (rng) {\n return rng.collapsed && rng.startContainer.nodeType === 3;\n };\n var getText = function (rng) {\n return rng.toString().replace(/\\u00A0/g, ' ').replace(/\\uFEFF/g, '');\n };\n var isWhitespace = function (chr) {\n return chr !== '' && ' \\xA0\\f\\n\\r\\t\\x0B'.indexOf(chr) !== -1;\n };\n\n var stripTriggerChar = function (text, triggerCh) {\n return text.substring(triggerCh.length);\n };\n var findChar = function (text, index, ch) {\n var i;\n for (i = index - 1; i >= 0; i--) {\n var char = text.charAt(i);\n if (isWhitespace(char)) {\n return Optional.none();\n }\n if (char === ch) {\n break;\n }\n }\n return Optional.some(i);\n };\n var findStart = function (dom, initRange, ch, minChars) {\n if (minChars === void 0) {\n minChars = 0;\n }\n if (!isValidTextRange(initRange)) {\n return Optional.none();\n }\n var findTriggerChIndex = function (element, offset, text) {\n return findChar(text, offset, ch).getOr(offset);\n };\n var root = dom.getParent(initRange.startContainer, dom.isBlock) || dom.getRoot();\n return repeatLeft(dom, initRange.startContainer, initRange.startOffset, findTriggerChIndex, root).bind(function (spot) {\n var 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 var text = getText(range);\n var triggerCharIndex = text.lastIndexOf(ch);\n if (triggerCharIndex !== 0 || stripTriggerChar(text, ch).length < minChars) {\n return Optional.none();\n } else {\n return Optional.some({\n text: stripTriggerChar(text, ch),\n range: range,\n triggerChar: ch\n });\n }\n });\n };\n var getContext = function (dom, initRange, ch, minChars) {\n if (minChars === void 0) {\n minChars = 0;\n }\n return detect(SugarElement.fromDom(initRange.startContainer)).fold(function () {\n return findStart(dom, initRange, ch, minChars);\n }, function (elm) {\n var range = dom.createRng();\n range.selectNode(elm.dom);\n var text = getText(range);\n return Optional.some({\n range: range,\n text: stripTriggerChar(text, ch),\n triggerChar: ch\n });\n });\n };\n\n var setup$e = function (api, editor) {\n editor.on('keypress compositionend', api.onKeypress.throttle);\n editor.on('remove', api.onKeypress.cancel);\n var redirectKeyToItem = function (item, e) {\n emitWith(item, keydown(), { raw: e });\n };\n editor.on('keydown', function (e) {\n var getItem = function () {\n return api.getView().bind(Highlighting.getHighlighted);\n };\n if (e.which === 8) {\n api.onKeypress.throttle(e);\n }\n if (api.isActive()) {\n if (e.which === 27) {\n api.cancelIfNecessary();\n }\n if (api.isMenuOpen()) {\n if (e.which === 13) {\n getItem().each(emitExecute);\n e.preventDefault();\n } else if (e.which === 40) {\n getItem().fold(function () {\n api.getView().each(Highlighting.highlightFirst);\n }, function (item) {\n redirectKeyToItem(item, e);\n });\n e.preventDefault();\n e.stopImmediatePropagation();\n } else if (e.which === 37 || e.which === 38 || e.which === 39) {\n getItem().each(function (item) {\n redirectKeyToItem(item, e);\n e.preventDefault();\n e.stopImmediatePropagation();\n });\n }\n } else {\n if (e.which === 13 || e.which === 38 || e.which === 40) {\n api.cancelIfNecessary();\n }\n }\n }\n });\n editor.on('NodeChange', function (e) {\n if (api.isActive() && !api.isProcessingAction() && detect(SugarElement.fromDom(e.element)).isNone()) {\n api.cancelIfNecessary();\n }\n });\n };\n var AutocompleterEditorEvents = { setup: setup$e };\n\n var global$c = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var point = function (container, offset) {\n return {\n container: container,\n offset: offset\n };\n };\n\n var isText = function (node) {\n return node.nodeType === TEXT;\n };\n var isElement$1 = function (node) {\n return node.nodeType === ELEMENT;\n };\n var toLast = function (node) {\n if (isText(node)) {\n return point(node, node.data.length);\n } else {\n var children = node.childNodes;\n return children.length > 0 ? toLast(children[children.length - 1]) : point(node, children.length);\n }\n };\n var toLeaf = function (node, offset) {\n var children = node.childNodes;\n if (children.length > 0 && offset < children.length) {\n return toLeaf(children[offset], 0);\n } else if (children.length > 0 && isElement$1(node) && children.length === offset) {\n return toLast(children[children.length - 1]);\n } else {\n return point(node, offset);\n }\n };\n\n var isPreviousCharContent = function (dom, leaf) {\n return repeatLeft(dom, leaf.container, leaf.offset, function (element, offset) {\n return offset === 0 ? -1 : offset;\n }, dom.getRoot()).filter(function (spot) {\n var char = spot.container.data.charAt(spot.offset - 1);\n return !isWhitespace(char);\n }).isSome();\n };\n var isStartOfWord = function (dom) {\n return function (rng) {\n var leaf = toLeaf(rng.startContainer, rng.startOffset);\n return !isPreviousCharContent(dom, leaf);\n };\n };\n var getTriggerContext = function (dom, initRange, database) {\n return findMap(database.triggerChars, function (ch) {\n return getContext(dom, initRange, ch);\n });\n };\n var lookup$2 = function (editor, getDatabase) {\n var database = getDatabase();\n var rng = editor.selection.getRng();\n return getTriggerContext(editor.dom, rng, database).bind(function (context) {\n return lookupWithContext(editor, getDatabase, context);\n });\n };\n var lookupWithContext = function (editor, getDatabase, context, fetchOptions) {\n if (fetchOptions === void 0) {\n fetchOptions = {};\n }\n var database = getDatabase();\n var rng = editor.selection.getRng();\n var startText = rng.startContainer.nodeValue;\n var autocompleters = filter$2(database.lookupByChar(context.triggerChar), function (autocompleter) {\n return context.text.length >= autocompleter.minChars && autocompleter.matches.getOrThunk(function () {\n return isStartOfWord(editor.dom);\n })(context.range, startText, context.text);\n });\n if (autocompleters.length === 0) {\n return Optional.none();\n }\n var lookupData = global$c.all(map$2(autocompleters, function (ac) {\n var fetchResult = ac.fetch(context.text, ac.maxResults, fetchOptions);\n return fetchResult.then(function (results) {\n return {\n matchText: context.text,\n items: results,\n columns: ac.columns,\n onAction: ac.onAction,\n highlightOn: ac.highlightOn\n };\n });\n }));\n return Optional.some({\n lookupData: lookupData,\n context: context\n });\n };\n\n var separatorMenuItemSchema = objOf([\n requiredString('type'),\n optionString('text')\n ]);\n var createSeparatorMenuItem = function (spec) {\n return asRaw('separatormenuitem', separatorMenuItemSchema, spec);\n };\n\n var autocompleterItemSchema = objOf([\n defaulted('type', 'autocompleteitem'),\n defaulted('active', false),\n defaulted('disabled', false),\n defaulted('meta', {}),\n requiredString('value'),\n optionString('text'),\n optionString('icon')\n ]);\n var autocompleterSchema = objOf([\n requiredString('type'),\n requiredString('ch'),\n defaultedNumber('minChars', 1),\n defaulted('columns', 1),\n defaultedNumber('maxResults', 10),\n optionFunction('matches'),\n requiredFunction('fetch'),\n requiredFunction('onAction'),\n defaultedArrayOf('highlightOn', [], string)\n ]);\n var createSeparatorItem = function (spec) {\n return asRaw('Autocompleter.Separator', separatorMenuItemSchema, spec);\n };\n var createAutocompleterItem = function (spec) {\n return asRaw('Autocompleter.Item', autocompleterItemSchema, spec);\n };\n var createAutocompleter = function (spec) {\n return asRaw('Autocompleter', autocompleterSchema, spec);\n };\n\n var baseToolbarButtonFields = [\n defaultedBoolean('disabled', false),\n optionString('tooltip'),\n optionString('icon'),\n optionString('text'),\n defaultedFunction('onSetup', function () {\n return noop;\n })\n ];\n var toolbarButtonSchema = objOf([\n requiredString('type'),\n requiredFunction('onAction')\n ].concat(baseToolbarButtonFields));\n var createToolbarButton = function (spec) {\n return asRaw('toolbarbutton', toolbarButtonSchema, spec);\n };\n\n var baseToolbarToggleButtonFields = [defaultedBoolean('active', false)].concat(baseToolbarButtonFields);\n var toggleButtonSchema = objOf(baseToolbarToggleButtonFields.concat([\n requiredString('type'),\n requiredFunction('onAction')\n ]));\n var createToggleButton = function (spec) {\n return asRaw('ToggleButton', toggleButtonSchema, spec);\n };\n\n var 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 var contextButtonFields = baseToolbarButtonFields.concat([\n defaulted('type', 'contextformbutton'),\n defaulted('primary', false),\n requiredFunction('onAction'),\n customField('original', identity$1)\n ]);\n var contextToggleButtonFields = baseToolbarToggleButtonFields.concat([\n defaulted('type', 'contextformbutton'),\n defaulted('primary', false),\n requiredFunction('onAction'),\n customField('original', identity$1)\n ]);\n var launchButtonFields = baseToolbarButtonFields.concat([defaulted('type', 'contextformbutton')]);\n var launchToggleButtonFields = baseToolbarToggleButtonFields.concat([defaulted('type', 'contextformtogglebutton')]);\n var toggleOrNormal = choose$1('type', {\n contextformbutton: contextButtonFields,\n contextformtogglebutton: contextToggleButtonFields\n });\n var contextFormSchema = objOf([\n defaulted('type', 'contextform'),\n defaultedFunction('initValue', constant$1('')),\n optionString('label'),\n requiredArrayOf('commands', toggleOrNormal),\n optionOf('launch', choose$1('type', {\n contextformbutton: launchButtonFields,\n contextformtogglebutton: launchToggleButtonFields\n }))\n ].concat(contextBarFields));\n var createContextForm = function (spec) {\n return asRaw('ContextForm', contextFormSchema, spec);\n };\n\n var contextToolbarSchema = objOf([\n defaulted('type', 'contexttoolbar'),\n requiredString('items')\n ].concat(contextBarFields));\n var createContextToolbar = function (spec) {\n return asRaw('ContextToolbar', contextToolbarSchema, spec);\n };\n\n var stringArray = function (a) {\n var all = {};\n each$1(a, function (key) {\n all[key] = {};\n });\n return keys(all);\n };\n\n var register$b = function (editor) {\n var popups = editor.ui.registry.getAll().popups;\n var dataset = map$1(popups, function (popup) {\n return createAutocompleter(popup).fold(function (err) {\n throw new Error(formatError(err));\n }, identity$1);\n });\n var triggerChars = stringArray(mapToArray(dataset, function (v) {\n return v.ch;\n }));\n var datasetValues = values(dataset);\n var lookupByChar = function (ch) {\n return filter$2(datasetValues, function (dv) {\n return dv.ch === ch;\n });\n };\n return {\n dataset: dataset,\n triggerChars: triggerChars,\n lookupByChar: lookupByChar\n };\n };\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 var navClass = 'tox-menu-nav__js';\n var selectableClass = 'tox-collection__item';\n var colorClass = 'tox-swatch';\n var presetClasses = {\n normal: navClass,\n color: colorClass\n };\n var tickedClass = 'tox-collection__item--enabled';\n var groupHeadingClass = 'tox-collection__group-heading';\n var iconClass = 'tox-collection__item-icon';\n var textClass = 'tox-collection__item-label';\n var accessoryClass = 'tox-collection__item-accessory';\n var caretClass = 'tox-collection__item-caret';\n var checkmarkClass = 'tox-collection__item-checkmark';\n var activeClass = 'tox-collection__item--active';\n var containerClass = 'tox-collection__item-container';\n var containerColumnClass = 'tox-collection__item-container--column';\n var containerRowClass = 'tox-collection__item-container--row';\n var containerAlignRightClass = 'tox-collection__item-container--align-right';\n var containerAlignLeftClass = 'tox-collection__item-container--align-left';\n var containerValignTopClass = 'tox-collection__item-container--valign-top';\n var containerValignMiddleClass = 'tox-collection__item-container--valign-middle';\n var containerValignBottomClass = 'tox-collection__item-container--valign-bottom';\n var classForPreset = function (presets) {\n return get$e(presetClasses, presets).getOr(navClass);\n };\n\n var forMenu = function (presets) {\n if (presets === 'color') {\n return 'tox-swatches';\n } else {\n return 'tox-menu';\n }\n };\n var classes = function (presets) {\n return {\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\n var markers = function (presets) {\n var 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 var dom$1 = function (hasIcons, columns, presets) {\n var 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 var components = [Menu.parts.items({})];\n var part = function (hasIcons, columns, presets) {\n var menuClasses = classes(presets);\n var d = {\n tag: 'div',\n classes: flatten([[menuClasses.tieredMenu]])\n };\n return {\n dom: d,\n markers: markers(presets)\n };\n };\n\n var chunk = function (rowDom, numColumns) {\n return function (items) {\n var chunks = chunk$1(items, numColumns);\n return map$2(chunks, function (c) {\n return {\n dom: rowDom,\n components: c\n };\n });\n };\n };\n var forSwatch = function (columns) {\n return {\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$1\n })]\n }]\n };\n };\n var forToolbar = function (columns) {\n return {\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 };\n var preprocessCollection = function (items, isSeparator) {\n var allSplits = [];\n var currentSplit = [];\n each$1(items, function (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')) {\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, function (s) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-collection__group']\n },\n components: s\n };\n });\n };\n var forCollection = function (columns, initItems, _hasIcons) {\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: [Menu.parts.items({\n preprocess: function (items) {\n if (columns !== 'auto' && columns > 1) {\n return chunk({\n tag: 'div',\n classes: ['tox-collection__group']\n }, columns)(items);\n } else {\n return preprocessCollection(items, function (_item, i) {\n return initItems[i].type === 'separator';\n });\n }\n }\n })]\n };\n };\n var forHorizontalCollection = function (initItems, _hasIcons) {\n return {\n dom: {\n tag: 'div',\n classes: [\n 'tox-collection',\n 'tox-collection--horizontal'\n ]\n },\n components: [Menu.parts.items({\n preprocess: function (items) {\n return preprocessCollection(items, function (_item, i) {\n return initItems[i].type === 'separator';\n });\n }\n })]\n };\n };\n\n var menuHasIcons = function (xs) {\n return exists(xs, function (item) {\n return 'icon' in item && item.icon !== undefined;\n });\n };\n var handleError = function (error) {\n console.error(formatError(error));\n console.log(error);\n return Optional.none();\n };\n var createHorizontalPartialMenuWithAlloyItems = function (value, _hasIcons, items, _columns, _presets) {\n var structure = forHorizontalCollection(items);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n };\n var createPartialMenuWithAlloyItems = function (value, hasIcons, items, columns, presets) {\n if (presets === 'color') {\n var structure = forSwatch(columns);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n }\n if (presets === 'normal' && columns === 'auto') {\n var structure = forCollection(columns, items);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n }\n if (presets === 'normal' && columns === 1) {\n var structure = forCollection(1, items);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n }\n if (presets === 'normal') {\n var structure = forCollection(columns, items);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n }\n if (presets === 'listpreview' && columns !== 'auto') {\n var structure = forToolbar(columns);\n return {\n value: value,\n dom: structure.dom,\n components: structure.components,\n items: items\n };\n }\n return {\n value: value,\n dom: dom$1(hasIcons, columns, presets),\n components: components,\n items: items\n };\n };\n\n var cardImageFields = [\n requiredString('type'),\n requiredString('src'),\n optionString('alt'),\n defaultedArrayOf('classes', [], string)\n ];\n var cardImageSchema = objOf(cardImageFields);\n\n var cardTextFields = [\n requiredString('type'),\n requiredString('text'),\n optionString('name'),\n defaultedArrayOf('classes', ['tox-collection__item-label'], string)\n ];\n var cardTextSchema = objOf(cardTextFields);\n\n var itemSchema$1 = valueThunk(function () {\n return choose$2('type', {\n cardimage: cardImageSchema,\n cardtext: cardTextSchema,\n cardcontainer: cardContainerSchema\n });\n });\n var cardContainerSchema = objOf([\n requiredString('type'),\n defaultedString('direction', 'horizontal'),\n defaultedString('align', 'left'),\n defaultedString('valign', 'middle'),\n requiredArrayOf('items', itemSchema$1)\n ]);\n\n var commonMenuItemFields = [\n defaultedBoolean('disabled', false),\n optionString('text'),\n optionString('shortcut'),\n field$1('value', 'value', defaultedThunk(function () {\n return generate$6('menuitem-value');\n }), anyValue()),\n defaulted('meta', {})\n ];\n\n var cardMenuItemSchema = objOf([\n requiredString('type'),\n optionString('label'),\n requiredArrayOf('items', itemSchema$1),\n defaultedFunction('onSetup', function () {\n return noop;\n }),\n defaultedFunction('onAction', noop)\n ].concat(commonMenuItemFields));\n var createCardMenuItem = function (spec) {\n return asRaw('cardmenuitem', cardMenuItemSchema, spec);\n };\n\n var choiceMenuItemSchema = objOf([\n requiredString('type'),\n defaultedBoolean('active', false),\n optionString('icon')\n ].concat(commonMenuItemFields));\n var createChoiceMenuItem = function (spec) {\n return asRaw('choicemenuitem', choiceMenuItemSchema, spec);\n };\n\n var baseFields = [\n requiredString('type'),\n requiredString('fancytype'),\n defaultedFunction('onAction', noop)\n ];\n var insertTableFields = [defaulted('initData', {})].concat(baseFields);\n var colorSwatchFields = [defaultedObjOf('initData', {}, [\n defaultedBoolean('allowCustomColors', true),\n optionArrayOf('colors', anyValue())\n ])].concat(baseFields);\n var fancyMenuItemSchema = choose$1('fancytype', {\n inserttable: insertTableFields,\n colorswatch: colorSwatchFields\n });\n var createFancyMenuItem = function (spec) {\n return asRaw('fancymenuitem', fancyMenuItemSchema, spec);\n };\n\n var menuItemSchema = objOf([\n requiredString('type'),\n defaultedFunction('onSetup', function () {\n return noop;\n }),\n defaultedFunction('onAction', noop),\n optionString('icon')\n ].concat(commonMenuItemFields));\n var createMenuItem = function (spec) {\n return asRaw('menuitem', menuItemSchema, spec);\n };\n\n var nestedMenuItemSchema = objOf([\n requiredString('type'),\n requiredFunction('getSubmenuItems'),\n defaultedFunction('onSetup', function () {\n return noop;\n }),\n optionString('icon')\n ].concat(commonMenuItemFields));\n var createNestedMenuItem = function (spec) {\n return asRaw('nestedmenuitem', nestedMenuItemSchema, spec);\n };\n\n var toggleMenuItemSchema = objOf([\n requiredString('type'),\n optionString('icon'),\n defaultedBoolean('active', false),\n defaultedFunction('onSetup', function () {\n return noop;\n }),\n requiredFunction('onAction')\n ].concat(commonMenuItemFields));\n var createToggleMenuItem = function (spec) {\n return asRaw('togglemenuitem', toggleMenuItemSchema, spec);\n };\n\n var detectSize = function (comp, margin, selectorClass) {\n var descendants$1 = descendants(comp.element, '.' + selectorClass);\n if (descendants$1.length > 0) {\n var columnLength = findIndex$1(descendants$1, function (c) {\n var thisTop = c.dom.getBoundingClientRect().top;\n var 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 var namedEvents = function (name, handlers) {\n return derive$1([config(name, handlers)]);\n };\n var unnamedEvents = function (handlers) {\n return namedEvents(generate$6('unnamed-events'), handlers);\n };\n var SimpleBehaviours = {\n namedEvents: namedEvents,\n unnamedEvents: unnamedEvents\n };\n\n var ExclusivityChannel = generate$6('tooltip.exclusive');\n var ShowTooltipEvent = generate$6('tooltip.show');\n var HideTooltipEvent = generate$6('tooltip.hide');\n\n var hideAllExclusive = function (component, _tConfig, _tState) {\n component.getSystem().broadcastOn([ExclusivityChannel], {});\n };\n var setComponents = function (component, tConfig, tState, specs) {\n tState.getTooltip().each(function (tooltip) {\n if (tooltip.getSystem().isConnected()) {\n Replacing.set(tooltip, specs);\n }\n });\n };\n\n var TooltippingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n hideAllExclusive: hideAllExclusive,\n setComponents: setComponents\n });\n\n var events$9 = function (tooltipConfig, state) {\n var hide = function (comp) {\n state.getTooltip().each(function (p) {\n detach(p);\n tooltipConfig.onHide(comp, p);\n state.clearTooltip();\n });\n state.clearTimer();\n };\n var show = function (comp) {\n if (!state.isShowing()) {\n hideAllExclusive(comp);\n var sink = tooltipConfig.lazySink(comp).getOrDie();\n var popup = comp.getSystem().build({\n dom: tooltipConfig.tooltipDom,\n components: tooltipConfig.tooltipComponents,\n events: derive$2(tooltipConfig.mode === 'normal' ? [\n run$1(mouseover(), function (_) {\n emit(comp, ShowTooltipEvent);\n }),\n run$1(mouseout(), function (_) {\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 return derive$2(flatten([\n [\n run$1(ShowTooltipEvent, function (comp) {\n state.resetTimer(function () {\n show(comp);\n }, tooltipConfig.delay);\n }),\n run$1(HideTooltipEvent, function (comp) {\n state.resetTimer(function () {\n hide(comp);\n }, tooltipConfig.delay);\n }),\n run$1(receive(), function (comp, message) {\n var receivingData = message;\n if (!receivingData.universal) {\n if (contains$2(receivingData.channels, ExclusivityChannel)) {\n hide(comp);\n }\n }\n }),\n runOnDetached(function (comp) {\n hide(comp);\n })\n ],\n tooltipConfig.mode === 'normal' ? [\n run$1(focusin(), function (comp) {\n emit(comp, ShowTooltipEvent);\n }),\n run$1(postBlur(), function (comp) {\n emit(comp, HideTooltipEvent);\n }),\n run$1(mouseover(), function (comp) {\n emit(comp, ShowTooltipEvent);\n }),\n run$1(mouseout(), function (comp) {\n emit(comp, HideTooltipEvent);\n })\n ] : [\n run$1(highlight$1(), function (comp, _se) {\n emit(comp, ShowTooltipEvent);\n }),\n run$1(dehighlight$1(), function (comp) {\n emit(comp, HideTooltipEvent);\n })\n ]\n ]));\n };\n\n var ActiveTooltipping = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$9\n });\n\n var TooltippingSchema = [\n required$1('lazySink'),\n required$1('tooltipDom'),\n defaulted('exclusive', true),\n defaulted('tooltipComponents', []),\n defaulted('delay', 300),\n defaultedStringEnum('mode', 'normal', [\n 'normal',\n 'follow-highlight'\n ]),\n defaulted('anchor', function (comp) {\n return {\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 };\n }),\n onHandler('onHide'),\n onHandler('onShow')\n ];\n\n var init$b = function () {\n var timer = value$1();\n var popup = value$1();\n var clearTimer = function () {\n timer.on(clearTimeout);\n };\n var resetTimer = function (f, delay) {\n clearTimer();\n timer.set(setTimeout(f, delay));\n };\n var readState = constant$1('not-implemented');\n return nu$8({\n getTooltip: popup.get,\n isShowing: popup.isSet,\n setTooltip: popup.set,\n clearTooltip: popup.clear,\n clearTimer: clearTimer,\n resetTimer: resetTimer,\n readState: readState\n });\n };\n\n var TooltippingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$b\n });\n\n var Tooltipping = create$8({\n fields: TooltippingSchema,\n name: 'tooltipping',\n active: ActiveTooltipping,\n state: TooltippingState,\n apis: TooltippingApis\n });\n\n var escape = function (text) {\n return text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n };\n\n var global$b = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$a = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n var getSkinUrl = function (editor) {\n var skin = editor.getParam('skin');\n var skinUrl = editor.getParam('skin_url');\n if (skin !== false) {\n var skinName = skin ? skin : 'oxide';\n if (skinUrl) {\n skinUrl = editor.documentBaseURI.toAbsolute(skinUrl);\n } else {\n skinUrl = global$a.baseURL + '/skins/ui/' + skinName;\n }\n }\n return skinUrl;\n };\n var isReadOnly = function (editor) {\n return editor.getParam('readonly', false, 'boolean');\n };\n var isSkinDisabled = function (editor) {\n return editor.getParam('skin') === false;\n };\n var getHeightSetting = function (editor) {\n return editor.getParam('height', Math.max(editor.getElement().offsetHeight, 200));\n };\n var getWidthSetting = function (editor) {\n return editor.getParam('width', global$b.DOM.getStyle(editor.getElement(), 'width'));\n };\n var getMinWidthSetting = function (editor) {\n return Optional.from(editor.getParam('min_width')).filter(isNumber);\n };\n var getMinHeightSetting = function (editor) {\n return Optional.from(editor.getParam('min_height')).filter(isNumber);\n };\n var getMaxWidthSetting = function (editor) {\n return Optional.from(editor.getParam('max_width')).filter(isNumber);\n };\n var getMaxHeightSetting = function (editor) {\n return Optional.from(editor.getParam('max_height')).filter(isNumber);\n };\n var getUserStyleFormats = function (editor) {\n return Optional.from(editor.getParam('style_formats')).filter(isArray);\n };\n var isMergeStyleFormats = function (editor) {\n return editor.getParam('style_formats_merge', false, 'boolean');\n };\n var getLineHeightFormats = function (editor) {\n return editor.getParam('lineheight_formats', '1 1.1 1.2 1.3 1.4 1.5 2', 'string').split(' ');\n };\n var getContentLanguages = function (editor) {\n return editor.getParam('content_langs', undefined, 'array');\n };\n var getRemovedMenuItems = function (editor) {\n return editor.getParam('removed_menuitems', '');\n };\n var isMenubarEnabled = function (editor) {\n return editor.getParam('menubar', true, 'boolean') !== false;\n };\n var isToolbarEnabled = function (editor) {\n var toolbar = editor.getParam('toolbar', true);\n var isToolbarTrue = toolbar === true;\n var isToolbarString = isString(toolbar);\n var isToolbarObjectArray = isArray(toolbar) && toolbar.length > 0;\n return !isMultipleToolbars(editor) && (isToolbarObjectArray || isToolbarString || isToolbarTrue);\n };\n var getMultipleToolbarsSetting = function (editor) {\n var toolbars = range$2(9, function (num) {\n return editor.getParam('toolbar' + (num + 1), false, 'string');\n });\n var toolbarArray = filter$2(toolbars, function (toolbar) {\n return typeof toolbar === 'string';\n });\n return toolbarArray.length > 0 ? Optional.some(toolbarArray) : Optional.none();\n };\n var isMultipleToolbars = function (editor) {\n return getMultipleToolbarsSetting(editor).fold(function () {\n var toolbar = editor.getParam('toolbar', [], 'string[]');\n return toolbar.length > 0;\n }, always);\n };\n var ToolbarMode;\n (function (ToolbarMode) {\n ToolbarMode['default'] = 'wrap';\n ToolbarMode['floating'] = 'floating';\n ToolbarMode['sliding'] = 'sliding';\n ToolbarMode['scrolling'] = 'scrolling';\n }(ToolbarMode || (ToolbarMode = {})));\n var getToolbarMode = function (editor) {\n return editor.getParam('toolbar_mode', '', 'string');\n };\n var ToolbarLocation;\n (function (ToolbarLocation) {\n ToolbarLocation['auto'] = 'auto';\n ToolbarLocation['top'] = 'top';\n ToolbarLocation['bottom'] = 'bottom';\n }(ToolbarLocation || (ToolbarLocation = {})));\n var getToolbarGroups = function (editor) {\n return editor.getParam('toolbar_groups', {}, 'object');\n };\n var getToolbarLocation = function (editor) {\n return editor.getParam('toolbar_location', ToolbarLocation.auto, 'string');\n };\n var isToolbarLocationBottom = function (editor) {\n return getToolbarLocation(editor) === ToolbarLocation.bottom;\n };\n var fixedContainerSelector = function (editor) {\n return editor.getParam('fixed_toolbar_container', '', 'string');\n };\n var fixedToolbarContainerTarget = function (editor) {\n return editor.getParam('fixed_toolbar_container_target');\n };\n var isToolbarPersist = function (editor) {\n return editor.getParam('toolbar_persist', false, 'boolean');\n };\n var fixedContainerTarget = function (editor) {\n if (!editor.inline) {\n return Optional.none();\n }\n var selector = fixedContainerSelector(editor);\n if (selector.length > 0) {\n return descendant(body(), selector);\n }\n var element = fixedToolbarContainerTarget(editor);\n if (isNonNullable(element)) {\n return Optional.some(SugarElement.fromDom(element));\n }\n return Optional.none();\n };\n var useFixedContainer = function (editor) {\n return editor.inline && fixedContainerTarget(editor).isSome();\n };\n var getUiContainer = function (editor) {\n var fixedContainer = fixedContainerTarget(editor);\n return fixedContainer.getOrThunk(function () {\n return getContentContainer(getRootNode(SugarElement.fromDom(editor.getElement())));\n });\n };\n var isDistractionFree = function (editor) {\n return editor.inline && !isMenubarEnabled(editor) && !isToolbarEnabled(editor) && !isMultipleToolbars(editor);\n };\n var isStickyToolbar = function (editor) {\n var isStickyToolbar = editor.getParam('toolbar_sticky', false, 'boolean');\n return (isStickyToolbar || editor.inline) && !useFixedContainer(editor) && !isDistractionFree(editor);\n };\n var getStickyToolbarOffset = function (editor) {\n return editor.getParam('toolbar_sticky_offset', 0, 'number');\n };\n var isDraggableModal$1 = function (editor) {\n return editor.getParam('draggable_modal', false, 'boolean');\n };\n var getMenus = function (editor) {\n var menu = editor.getParam('menu');\n if (menu) {\n return map$1(menu, function (menu) {\n return __assign(__assign({}, menu), { items: menu.items });\n });\n } else {\n return {};\n }\n };\n var getMenubar = function (editor) {\n return editor.getParam('menubar');\n };\n var getToolbar = function (editor) {\n return editor.getParam('toolbar', true);\n };\n var getFilePickerCallback = function (editor) {\n return editor.getParam('file_picker_callback');\n };\n var getFilePickerTypes = function (editor) {\n return editor.getParam('file_picker_types');\n };\n var getFileBrowserCallbackTypes = function (editor) {\n return editor.getParam('file_browser_callback_types');\n };\n var noTypeaheadUrls = function (editor) {\n return editor.getParam('typeahead_urls') === false;\n };\n var getAnchorTop = function (editor) {\n return editor.getParam('anchor_top', '#top');\n };\n var getAnchorBottom = function (editor) {\n return editor.getParam('anchor_bottom', '#bottom');\n };\n var getFilePickerValidatorHandler = function (editor) {\n var handler = editor.getParam('file_picker_validator_handler', undefined, 'function');\n if (handler === undefined) {\n return editor.getParam('filepicker_validator_handler', undefined, 'function');\n } else {\n return handler;\n }\n };\n\n var ReadOnlyChannel = 'silver.readonly';\n var ReadOnlyDataSchema = objOf([requiredBoolean('readonly')]);\n var broadcastReadonly = function (uiComponents, readonly) {\n var outerContainer = uiComponents.outerContainer;\n var target = outerContainer.element;\n if (readonly) {\n uiComponents.mothership.broadcastOn([dismissPopups()], { target: target });\n uiComponents.uiMothership.broadcastOn([dismissPopups()], { target: target });\n }\n uiComponents.mothership.broadcastOn([ReadOnlyChannel], { readonly: readonly });\n uiComponents.uiMothership.broadcastOn([ReadOnlyChannel], { readonly: readonly });\n };\n var setupReadonlyModeSwitch = function (editor, uiComponents) {\n editor.on('init', function () {\n if (editor.mode.isReadOnly()) {\n broadcastReadonly(uiComponents, true);\n }\n });\n editor.on('SwitchMode', function () {\n return broadcastReadonly(uiComponents, editor.mode.isReadOnly());\n });\n if (isReadOnly(editor)) {\n editor.setMode('readonly');\n }\n };\n var receivingConfig = function () {\n var _a;\n return Receiving.config({\n channels: (_a = {}, _a[ReadOnlyChannel] = {\n schema: ReadOnlyDataSchema,\n onReceive: function (comp, data) {\n Disabling.set(comp, data.readonly);\n }\n }, _a)\n });\n };\n\n var item = function (disabled) {\n return Disabling.config({\n disabled: disabled,\n disableClass: 'tox-collection__item--state-disabled'\n });\n };\n var button = function (disabled) {\n return Disabling.config({ disabled: disabled });\n };\n var splitButton = function (disabled) {\n return Disabling.config({\n disabled: disabled,\n disableClass: 'tox-tbtn--disabled'\n });\n };\n var toolbarButton = function (disabled) {\n return Disabling.config({\n disabled: disabled,\n disableClass: 'tox-tbtn--disabled',\n useNative: false\n });\n };\n var DisablingConfigs = {\n item: item,\n button: button,\n splitButton: splitButton,\n toolbarButton: toolbarButton\n };\n\n var runWithApi = function (info, comp) {\n var api = info.getApi(comp);\n return function (f) {\n f(api);\n };\n };\n var onControlAttached = function (info, editorOffCell) {\n return runOnAttached(function (comp) {\n var run = runWithApi(info, comp);\n run(function (api) {\n var onDestroy = info.onSetup(api);\n if (isFunction(onDestroy)) {\n editorOffCell.set(onDestroy);\n }\n });\n });\n };\n var onControlDetached = function (getApi, editorOffCell) {\n return runOnDetached(function (comp) {\n return runWithApi(getApi, comp)(editorOffCell.get());\n });\n };\n\n var _a$1;\n var onMenuItemExecute = function (info, itemResponse) {\n return runOnExecute$1(function (comp, simulatedEvent) {\n runWithApi(info, comp)(info.onAction);\n if (!info.triggersSubmenu && itemResponse === ItemResponse$1.CLOSE_ON_EXECUTE) {\n emit(comp, sandboxClose());\n simulatedEvent.stop();\n }\n });\n };\n var menuItemEventOrder = (_a$1 = {}, _a$1[execute$5()] = [\n 'disabling',\n 'alloy.base.behaviour',\n 'toggling',\n 'item-events'\n ], _a$1);\n\n var componentRenderPipeline = cat;\n var renderCommonItem = function (spec, structure, itemResponse, providersbackstage) {\n var 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(function () {\n return spec.disabled || providersbackstage.isDisabled();\n }),\n receivingConfig(),\n Replacing.config({})\n ].concat(spec.itemBehaviours))\n };\n };\n var buildData = function (source) {\n return {\n value: source.value,\n meta: __assign({ text: source.text.getOr('') }, source.meta)\n };\n };\n\n var global$9 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var convertText = function (source) {\n var mac = {\n alt: '⌥',\n ctrl: '⌃',\n shift: '⇧',\n meta: '⌘',\n access: '⌃⌥'\n };\n var other = {\n meta: 'Ctrl',\n access: 'Shift+Alt'\n };\n var replace = global$9.mac ? mac : other;\n var shortcut = source.split('+');\n var updated = map$2(shortcut, function (segment) {\n var search = segment.toLowerCase().trim();\n return has$2(replace, search) ? replace[search] : segment;\n });\n return global$9.mac ? updated.join('') : updated.join('+');\n };\n\n var renderIcon$1 = function (name, icons, classes) {\n if (classes === void 0) {\n classes = [iconClass];\n }\n return render$3(name, {\n tag: 'div',\n classes: classes\n }, icons);\n };\n var renderText = function (text) {\n return {\n dom: {\n tag: 'div',\n classes: [textClass]\n },\n components: [text$1(global$e.translate(text))]\n };\n };\n var renderHtml = function (html, classes) {\n return {\n dom: {\n tag: 'div',\n classes: classes,\n innerHtml: html\n }\n };\n };\n var renderStyledText = function (style, text) {\n return {\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$1(global$e.translate(text))]\n }]\n };\n };\n var renderShortcut = function (shortcut) {\n return {\n dom: {\n tag: 'div',\n classes: [accessoryClass],\n innerHtml: convertText(shortcut)\n }\n };\n };\n var renderCheckmark = function (icons) {\n return renderIcon$1('checkmark', icons, [checkmarkClass]);\n };\n var renderSubmenuCaret = function (icons) {\n return renderIcon$1('chevron-right', icons, [caretClass]);\n };\n var renderDownwardsCaret = function (icons) {\n return renderIcon$1('chevron-down', icons, [caretClass]);\n };\n var renderContainer = function (container, components) {\n var directionClass = container.direction === 'vertical' ? containerColumnClass : containerRowClass;\n var alignClass = container.align === 'left' ? containerAlignLeftClass : containerAlignRightClass;\n var getValignClass = function () {\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: components\n };\n };\n var renderImage = function (src, classes, alt) {\n return {\n dom: {\n tag: 'img',\n classes: classes,\n attributes: {\n src: src,\n alt: alt.getOr('')\n }\n }\n };\n };\n\n var renderColorStructure = function (item, providerBackstage, fallbackIcon) {\n var colorPickerCommand = 'custom';\n var removeColorCommand = 'remove';\n var itemText = item.ariaLabel;\n var itemValue = item.value;\n var iconSvg = item.iconContent.map(function (name) {\n return getOr(name, providerBackstage.icons, fallbackIcon);\n });\n var getDom = function () {\n var common = colorClass;\n var icon = iconSvg.getOr('');\n var attributes = itemText.map(function (text) {\n return { title: providerBackstage.translate(text) };\n }).getOr({});\n var baseDom = {\n tag: 'div',\n attributes: attributes,\n classes: [common]\n };\n if (itemValue === colorPickerCommand) {\n return __assign(__assign({}, baseDom), {\n tag: 'button',\n classes: __spreadArray(__spreadArray([], baseDom.classes, true), ['tox-swatches__picker-btn'], false),\n innerHtml: icon\n });\n } else if (itemValue === removeColorCommand) {\n return __assign(__assign({}, baseDom), {\n classes: __spreadArray(__spreadArray([], baseDom.classes, true), ['tox-swatch--remove'], false),\n innerHtml: icon\n });\n } else {\n return __assign(__assign({}, baseDom), {\n attributes: __assign(__assign({}, baseDom.attributes), { 'data-mce-color': itemValue }),\n styles: { 'background-color': itemValue }\n });\n }\n };\n return {\n dom: getDom(),\n optComponents: []\n };\n };\n var renderItemDomStructure = function (ariaLabel) {\n var domTitle = ariaLabel.map(function (label) {\n return { attributes: { title: global$e.translate(label) } };\n }).getOr({});\n return __assign({\n tag: 'div',\n classes: [\n navClass,\n selectableClass\n ]\n }, domTitle);\n };\n var renderNormalItemStructure = function (info, providersBackstage, renderIcons, fallbackIcon) {\n var iconSpec = {\n tag: 'div',\n classes: [iconClass]\n };\n var renderIcon = function (iconName) {\n return render$3(iconName, iconSpec, providersBackstage.icons, fallbackIcon);\n };\n var renderEmptyIcon = function () {\n return Optional.some({ dom: iconSpec });\n };\n var leftIcon = renderIcons ? info.iconContent.map(renderIcon).orThunk(renderEmptyIcon) : Optional.none();\n var checkmark = info.checkMark;\n var textRender = Optional.from(info.meta).fold(function () {\n return renderText;\n }, function (meta) {\n return has$2(meta, 'style') ? curry(renderStyledText, meta.style) : renderText;\n });\n var content = info.htmlContent.fold(function () {\n return info.textContent.map(textRender);\n }, function (html) {\n return Optional.some(renderHtml(html, [textClass]));\n });\n var 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 var renderItemStructure = function (info, providersBackstage, renderIcons, fallbackIcon) {\n if (fallbackIcon === void 0) {\n fallbackIcon = Optional.none();\n }\n if (info.presets === 'color') {\n return renderColorStructure(info, providersBackstage, fallbackIcon);\n } else {\n return renderNormalItemStructure(info, providersBackstage, renderIcons, fallbackIcon);\n }\n };\n\n var tooltipBehaviour = function (meta, sharedBackstage) {\n return get$e(meta, 'tooltipWorker').map(function (tooltipWorker) {\n return [Tooltipping.config({\n lazySink: sharedBackstage.getSink,\n tooltipDom: {\n tag: 'div',\n classes: ['tox-tooltip-worker-container']\n },\n tooltipComponents: [],\n anchor: function (comp) {\n return {\n type: 'submenu',\n item: comp,\n overrides: { maxHeightFunction: expandable$1 }\n };\n },\n mode: 'follow-highlight',\n onShow: function (component, _tooltip) {\n tooltipWorker(function (elm) {\n Tooltipping.setComponents(component, [external$2({ element: SugarElement.fromDom(elm) })]);\n });\n }\n })];\n }).getOr([]);\n };\n var encodeText = function (text) {\n return global$b.DOM.encode(text);\n };\n var replaceText = function (text, matchText) {\n var translated = global$e.translate(text);\n var encoded = encodeText(translated);\n if (matchText.length > 0) {\n var escapedMatchRegex = new RegExp(escape(matchText), 'gi');\n return encoded.replace(escapedMatchRegex, function (match) {\n return '' + match + '';\n });\n } else {\n return encoded;\n }\n };\n var renderAutocompleteItem = function (spec, matchText, useText, presets, onItemValueHandler, itemResponse, sharedBackstage, renderIcons) {\n if (renderIcons === void 0) {\n renderIcons = true;\n }\n var structure = renderItemStructure({\n presets: presets,\n textContent: Optional.none(),\n htmlContent: useText ? spec.text.map(function (text) {\n return replaceText(text, matchText);\n }) : 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 return renderCommonItem({\n data: buildData(spec),\n disabled: spec.disabled,\n getApi: constant$1({}),\n onAction: function (_api) {\n return onItemValueHandler(spec.value, spec.meta);\n },\n onSetup: constant$1(noop),\n triggersSubmenu: false,\n itemBehaviours: tooltipBehaviour(spec.meta, sharedBackstage)\n }, structure, itemResponse, sharedBackstage.providers);\n };\n\n var render$2 = function (items, extras) {\n return map$2(items, function (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 var shouldHighlight = item.name.exists(function (name) {\n return contains$2(extras.cardText.highlightOn, name);\n });\n var matchText = shouldHighlight ? Optional.from(extras.cardText.matchText).getOr('') : '';\n return renderHtml(replaceText(item.text, matchText), item.classes);\n }\n });\n };\n var renderCardMenuItem = function (spec, itemResponse, sharedBackstage, extras) {\n var getApi = function (component) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n Disabling.set(component, state);\n each$1(descendants(component.element, '*'), function (elm) {\n component.getSystem().getByDom(elm).each(function (comp) {\n if (comp.hasConfigured(Disabling)) {\n Disabling.set(comp, state);\n }\n });\n });\n }\n };\n };\n var 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 data: buildData(__assign({ text: Optional.none() }, spec)),\n disabled: spec.disabled,\n getApi: 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 var renderChoiceItem = function (spec, useText, presets, onItemValueHandler, isSelected, itemResponse, providersBackstage, renderIcons) {\n if (renderIcons === void 0) {\n renderIcons = true;\n }\n var getApi = function (component) {\n return {\n setActive: function (state) {\n Toggling.set(component, state);\n },\n isActive: function () {\n return Toggling.isOn(component);\n },\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var structure = renderItemStructure({\n presets: 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 return deepMerge(renderCommonItem({\n data: buildData(spec),\n disabled: spec.disabled,\n getApi: getApi,\n onAction: function (_api) {\n return onItemValueHandler(spec.value);\n },\n onSetup: function (api) {\n api.setActive(isSelected);\n return noop;\n },\n triggersSubmenu: false,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage), {\n toggling: {\n toggleClass: tickedClass,\n toggleOnExecute: false,\n selected: spec.active\n }\n });\n };\n\n var parts$f = generate$3(owner$2(), parts$h());\n\n var hexColour = function (value) {\n return { value: value };\n };\n var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n var longformRegex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n var isHexString = function (hex) {\n return shorthandRegex.test(hex) || longformRegex.test(hex);\n };\n var normalizeHex = function (hex) {\n return removeLeading(hex, '#').toUpperCase();\n };\n var fromString$1 = function (hex) {\n return isHexString(hex) ? Optional.some({ value: normalizeHex(hex) }) : Optional.none();\n };\n var getLongForm = function (hex) {\n var hexString = hex.value.replace(shorthandRegex, function (m, r, g, b) {\n return r + r + g + g + b + b;\n });\n return { value: hexString };\n };\n var extractValues = function (hex) {\n var longForm = getLongForm(hex);\n var splitForm = longformRegex.exec(longForm.value);\n return splitForm === null ? [\n 'FFFFFF',\n 'FF',\n 'FF',\n 'FF'\n ] : splitForm;\n };\n var toHex = function (component) {\n var hex = component.toString(16);\n return (hex.length === 1 ? '0' + hex : hex).toUpperCase();\n };\n var fromRgba = function (rgbaColour) {\n var value = toHex(rgbaColour.red) + toHex(rgbaColour.green) + toHex(rgbaColour.blue);\n return hexColour(value);\n };\n\n var min = Math.min;\n var max = Math.max;\n var round$1 = Math.round;\n var rgbRegex = /^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/;\n var rgbaRegex = /^rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*(\\d?(?:\\.\\d+)?)\\)/;\n var rgbaColour = function (red, green, blue, alpha) {\n return {\n red: red,\n green: green,\n blue: blue,\n alpha: alpha\n };\n };\n var isRgbaComponent = function (value) {\n var num = parseInt(value, 10);\n return num.toString() === value && num >= 0 && num <= 255;\n };\n var fromHsv = function (hsv) {\n var r;\n var g;\n var b;\n var hue = (hsv.hue || 0) % 360;\n var saturation = hsv.saturation / 100;\n var 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 var side = hue / 60;\n var chroma = brightness * saturation;\n var x = chroma * (1 - Math.abs(side % 2 - 1));\n var 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 var fromHex = function (hexColour) {\n var result = extractValues(hexColour);\n var red = parseInt(result[1], 16);\n var green = parseInt(result[2], 16);\n var blue = parseInt(result[3], 16);\n return rgbaColour(red, green, blue, 1);\n };\n var fromStringValues = function (red, green, blue, alpha) {\n var r = parseInt(red, 10);\n var g = parseInt(green, 10);\n var b = parseInt(blue, 10);\n var a = parseFloat(alpha);\n return rgbaColour(r, g, b, a);\n };\n var fromString = function (rgbaString) {\n if (rgbaString === 'transparent') {\n return Optional.some(rgbaColour(0, 0, 0, 0));\n }\n var rgbMatch = rgbRegex.exec(rgbaString);\n if (rgbMatch !== null) {\n return Optional.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], '1'));\n }\n var 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 var toString = function (rgba) {\n return 'rgba(' + rgba.red + ',' + rgba.green + ',' + rgba.blue + ',' + rgba.alpha + ')';\n };\n var red = rgbaColour(255, 0, 0, 1);\n\n var fireSkinLoaded$1 = function (editor) {\n return editor.fire('SkinLoaded');\n };\n var fireSkinLoadError$1 = function (editor, error) {\n return editor.fire('SkinLoadError', error);\n };\n var fireResizeEditor = function (editor) {\n return editor.fire('ResizeEditor');\n };\n var fireResizeContent = function (editor, e) {\n return editor.fire('ResizeContent', e);\n };\n var fireScrollContent = function (editor, e) {\n return editor.fire('ScrollContent', e);\n };\n var fireTextColorChange = function (editor, data) {\n return editor.fire('TextColorChange', data);\n };\n\n var hsvColour = function (hue, saturation, value) {\n return {\n hue: hue,\n saturation: saturation,\n value: value\n };\n };\n var fromRgb = function (rgbaColour) {\n var h = 0;\n var s = 0;\n var v = 0;\n var r = rgbaColour.red / 255;\n var g = rgbaColour.green / 255;\n var b = rgbaColour.blue / 255;\n var minRGB = Math.min(r, Math.min(g, b));\n var maxRGB = Math.max(r, Math.max(g, b));\n if (minRGB === maxRGB) {\n v = minRGB;\n return hsvColour(0, 0, v * 100);\n }\n var 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 var hexToHsv = function (hex) {\n return fromRgb(fromHex(hex));\n };\n var hsvToHex = function (hsv) {\n return fromRgba(fromHsv(hsv));\n };\n var anyToHex = function (color) {\n return fromString$1(color).orThunk(function () {\n return fromString(color).map(fromRgba);\n }).getOrThunk(function () {\n var canvas = document.createElement('canvas');\n canvas.height = 1;\n canvas.width = 1;\n var 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 var rgba = canvasContext.getImageData(0, 0, 1, 1).data;\n var r = rgba[0];\n var g = rgba[1];\n var b = rgba[2];\n var a = rgba[3];\n return fromRgba(rgbaColour(r, g, b, a));\n });\n };\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.util.LocalStorage');\n\n var storageName = 'tinymce-custom-colors';\n function ColorCache (max) {\n if (max === void 0) {\n max = 10;\n }\n var storageString = global$8.getItem(storageName);\n var localstorage = isString(storageString) ? JSON.parse(storageString) : [];\n var prune = function (list) {\n var diff = max - list.length;\n return diff < 0 ? list.slice(0, max) : list;\n };\n var cache = prune(localstorage);\n var add = function (key) {\n indexOf(cache, key).each(remove);\n cache.unshift(key);\n if (cache.length > max) {\n cache.pop();\n }\n global$8.setItem(storageName, JSON.stringify(cache));\n };\n var remove = function (idx) {\n cache.splice(idx, 1);\n };\n var state = function () {\n return cache.slice(0);\n };\n return {\n add: add,\n state: state\n };\n }\n\n var choiceItem = 'choiceitem';\n var defaultColors = [\n {\n type: choiceItem,\n text: 'Light Green',\n value: '#BFEDD2'\n },\n {\n type: choiceItem,\n text: 'Light Yellow',\n value: '#FBEEB8'\n },\n {\n type: choiceItem,\n text: 'Light Red',\n value: '#F8CAC6'\n },\n {\n type: choiceItem,\n text: 'Light Purple',\n value: '#ECCAFA'\n },\n {\n type: choiceItem,\n text: 'Light Blue',\n value: '#C2E0F4'\n },\n {\n type: choiceItem,\n text: 'Green',\n value: '#2DC26B'\n },\n {\n type: choiceItem,\n text: 'Yellow',\n value: '#F1C40F'\n },\n {\n type: choiceItem,\n text: 'Red',\n value: '#E03E2D'\n },\n {\n type: choiceItem,\n text: 'Purple',\n value: '#B96AD9'\n },\n {\n type: choiceItem,\n text: 'Blue',\n value: '#3598DB'\n },\n {\n type: choiceItem,\n text: 'Dark Turquoise',\n value: '#169179'\n },\n {\n type: choiceItem,\n text: 'Orange',\n value: '#E67E23'\n },\n {\n type: choiceItem,\n text: 'Dark Red',\n value: '#BA372A'\n },\n {\n type: choiceItem,\n text: 'Dark Purple',\n value: '#843FA1'\n },\n {\n type: choiceItem,\n text: 'Dark Blue',\n value: '#236FA1'\n },\n {\n type: choiceItem,\n text: 'Light Gray',\n value: '#ECF0F1'\n },\n {\n type: choiceItem,\n text: 'Medium Gray',\n value: '#CED4D9'\n },\n {\n type: choiceItem,\n text: 'Gray',\n value: '#95A5A6'\n },\n {\n type: choiceItem,\n text: 'Dark Gray',\n value: '#7E8C8D'\n },\n {\n type: choiceItem,\n text: 'Navy Blue',\n value: '#34495E'\n },\n {\n type: choiceItem,\n text: 'Black',\n value: '#000000'\n },\n {\n type: choiceItem,\n text: 'White',\n value: '#ffffff'\n }\n ];\n var colorCache = ColorCache(10);\n var mapColors = function (colorMap) {\n var colors = [];\n for (var i = 0; i < colorMap.length; i += 2) {\n colors.push({\n text: colorMap[i + 1],\n value: '#' + anyToHex(colorMap[i]).value,\n type: 'choiceitem'\n });\n }\n return colors;\n };\n var getColorCols$2 = function (editor, defaultCols) {\n return editor.getParam('color_cols', defaultCols, 'number');\n };\n var hasCustomColors$1 = function (editor) {\n return editor.getParam('custom_colors') !== false;\n };\n var getColorMap = function (editor) {\n return editor.getParam('color_map');\n };\n var getColors$2 = function (editor) {\n var unmapped = getColorMap(editor);\n return unmapped !== undefined ? mapColors(unmapped) : defaultColors;\n };\n var getCurrentColors = function () {\n return map$2(colorCache.state(), function (color) {\n return {\n type: choiceItem,\n text: color,\n value: color\n };\n });\n };\n var addColor = function (color) {\n colorCache.add(color);\n };\n\n var fallbackColor = '#000000';\n var getCurrentColor = function (editor, format) {\n var color;\n editor.dom.getParents(editor.selection.getStart(), function (elm) {\n var value;\n if (value = elm.style[format === 'forecolor' ? 'color' : 'background-color']) {\n color = color ? color : value;\n }\n });\n return Optional.from(color);\n };\n var applyFormat = function (editor, format, value) {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.formatter.apply(format, { value: value });\n editor.nodeChanged();\n });\n };\n var removeFormat = function (editor, format) {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.formatter.remove(format, { value: null }, null, true);\n editor.nodeChanged();\n });\n };\n var registerCommands = function (editor) {\n editor.addCommand('mceApplyTextcolor', function (format, value) {\n applyFormat(editor, format, value);\n });\n editor.addCommand('mceRemoveTextcolor', function (format) {\n removeFormat(editor, format);\n });\n };\n var calcCols = function (colors) {\n return Math.max(5, Math.ceil(Math.sqrt(colors)));\n };\n var getColorCols$1 = function (editor) {\n var colors = getColors$2(editor);\n var defaultCols = calcCols(colors.length);\n return getColorCols$2(editor, defaultCols);\n };\n var getAdditionalColors = function (hasCustom) {\n var type = 'choiceitem';\n var remove = {\n type: type,\n text: 'Remove color',\n icon: 'color-swatch-remove-color',\n value: 'remove'\n };\n var custom = {\n type: type,\n text: 'Custom color',\n icon: 'color-picker',\n value: 'custom'\n };\n return hasCustom ? [\n remove,\n custom\n ] : [remove];\n };\n var applyColor = function (editor, format, value, onChoice) {\n if (value === 'custom') {\n var dialog = colorPickerDialog(editor);\n dialog(function (colorOpt) {\n colorOpt.each(function (color) {\n addColor(color);\n editor.execCommand('mceApplyTextcolor', format, color);\n onChoice(color);\n });\n }, 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 var getColors$1 = function (colors, hasCustom) {\n return colors.concat(getCurrentColors().concat(getAdditionalColors(hasCustom)));\n };\n var getFetch$1 = function (colors, hasCustom) {\n return function (callback) {\n callback(getColors$1(colors, hasCustom));\n };\n };\n var setIconColor = function (splitButtonApi, name, newColor) {\n var id = name === 'forecolor' ? 'tox-icon-text-color__color' : 'tox-icon-highlight-bg-color__color';\n splitButtonApi.setIconFill(id, newColor);\n };\n var registerTextColorButton = function (editor, name, format, tooltip, lastColor) {\n editor.ui.registry.addSplitButton(name, {\n tooltip: tooltip,\n presets: 'color',\n icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',\n select: function (value) {\n var optCurrentRgb = getCurrentColor(editor, format);\n return optCurrentRgb.bind(function (currentRgb) {\n return fromString(currentRgb).map(function (rgba) {\n var currentHex = fromRgba(rgba).value;\n return contains$1(value.toLowerCase(), currentHex);\n });\n }).getOr(false);\n },\n columns: getColorCols$1(editor),\n fetch: getFetch$1(getColors$2(editor), hasCustomColors$1(editor)),\n onAction: function (_splitButtonApi) {\n applyColor(editor, format, lastColor.get(), noop);\n },\n onItemAction: function (_splitButtonApi, value) {\n applyColor(editor, format, value, function (newColor) {\n lastColor.set(newColor);\n fireTextColorChange(editor, {\n name: name,\n color: newColor\n });\n });\n },\n onSetup: function (splitButtonApi) {\n setIconColor(splitButtonApi, name, lastColor.get());\n var handler = function (e) {\n if (e.name === name) {\n setIconColor(splitButtonApi, e.name, e.color);\n }\n };\n editor.on('TextColorChange', handler);\n return function () {\n editor.off('TextColorChange', handler);\n };\n }\n });\n };\n var registerTextColorMenuItem = function (editor, name, format, text) {\n editor.ui.registry.addNestedMenuItem(name, {\n text: text,\n icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color',\n getSubmenuItems: function () {\n return [{\n type: 'fancymenuitem',\n fancytype: 'colorswatch',\n onAction: function (data) {\n applyColor(editor, format, data.value, noop);\n }\n }];\n }\n });\n };\n var colorPickerDialog = function (editor) {\n return function (callback, value) {\n var isValid = false;\n var onSubmit = function (api) {\n var data = api.getData();\n var 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 var onAction = function (_api, details) {\n if (details.name === 'hex-valid') {\n isValid = details.value;\n }\n };\n var 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: initialData,\n onAction: onAction,\n onSubmit: onSubmit,\n onClose: noop,\n onCancel: function () {\n callback(Optional.none());\n }\n });\n };\n };\n var register$a = function (editor) {\n registerCommands(editor);\n var lastForeColor = Cell(fallbackColor);\n var lastBackColor = Cell(fallbackColor);\n registerTextColorButton(editor, 'forecolor', 'forecolor', 'Text color', lastForeColor);\n registerTextColorButton(editor, 'backcolor', 'hilitecolor', 'Background color', lastBackColor);\n registerTextColorMenuItem(editor, 'forecolor', 'forecolor', 'Text color');\n registerTextColorMenuItem(editor, 'backcolor', 'hilitecolor', 'Background color');\n };\n\n var createPartialChoiceMenu = function (value, items, onItemValueHandler, columns, presets, itemResponse, select, providersBackstage) {\n var hasIcons = menuHasIcons(items);\n var presetItemTypes = presets !== 'color' ? 'normal' : 'color';\n var alloyItems = createChoiceItems(items, onItemValueHandler, columns, presetItemTypes, itemResponse, select, providersBackstage);\n return createPartialMenuWithAlloyItems(value, hasIcons, alloyItems, columns, presets);\n };\n var createChoiceItems = function (items, onItemValueHandler, columns, itemPresets, itemResponse, select, providersBackstage) {\n return cat(map$2(items, function (item) {\n if (item.type === 'choiceitem') {\n return createChoiceMenuItem(item).fold(handleError, function (d) {\n return Optional.some(renderChoiceItem(d, columns === 1, itemPresets, onItemValueHandler, select(item.value), itemResponse, providersBackstage, menuHasIcons(items)));\n });\n } else {\n return Optional.none();\n }\n }));\n };\n\n var deriveMenuMovement = function (columns, presets) {\n var 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 var rowClass = presets === 'color' ? 'tox-swatches__row' : 'tox-collection__group';\n return {\n mode: 'matrix',\n rowSelector: '.' + rowClass\n };\n }\n };\n var deriveCollectionMovement = function (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 var renderColorSwatchItem = function (spec, backstage) {\n var items = getColorItems(spec, backstage);\n var columns = backstage.colorinput.getColorCols();\n var presets = 'color';\n var menuSpec = createPartialChoiceMenu(generate$6('menu-value'), items, function (value) {\n spec.onAction({ value: value });\n }, columns, presets, ItemResponse$1.CLOSE_ON_EXECUTE, never, backstage.shared.providers);\n var widgetSpec = __assign(__assign({}, menuSpec), {\n markers: markers(presets),\n movement: deriveMenuMovement(columns, presets)\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 var getColorItems = function (spec, backstage) {\n var useCustomColors = spec.initData.allowCustomColors && backstage.colorinput.hasCustomColors();\n return spec.initData.colors.fold(function () {\n return getColors$1(backstage.colorinput.getColors(), useCustomColors);\n }, function (colors) {\n return colors.concat(getAdditionalColors(useCustomColors));\n });\n };\n\n var cellOverEvent = generate$6('cell-over');\n var cellExecuteEvent = generate$6('cell-execute');\n var makeCell = function (row, col, labelId) {\n var _a;\n var emitCellOver = function (c) {\n return emitWith(c, cellOverEvent, {\n row: row,\n col: col\n });\n };\n var emitExecute = function (c) {\n return emitWith(c, cellExecuteEvent, {\n row: row,\n col: col\n });\n };\n var onClick = function (c, se) {\n se.stop();\n emitExecute(c);\n };\n return build$1({\n dom: {\n tag: 'div',\n attributes: (_a = { role: 'button' }, _a['aria-labelledby'] = labelId, _a)\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 var makeCells = function (labelId, numRows, numCols) {\n var cells = [];\n for (var i = 0; i < numRows; i++) {\n var row = [];\n for (var j = 0; j < numCols; j++) {\n row.push(makeCell(i, j, labelId));\n }\n cells.push(row);\n }\n return cells;\n };\n var selectCells = function (cells, selectedRow, selectedColumn, numRows, numColumns) {\n for (var i = 0; i < numRows; i++) {\n for (var j = 0; j < numColumns; j++) {\n Toggling.set(cells[i][j], i <= selectedRow && j <= selectedColumn);\n }\n }\n };\n var makeComponents = function (cells) {\n return bind$3(cells, function (cellRow) {\n return map$2(cellRow, premade);\n });\n };\n var makeLabelText = function (row, col) {\n return text$1(col + 'x' + row);\n };\n var renderInsertTableMenuItem = function (spec) {\n var numRows = 10;\n var numColumns = 10;\n var sizeLabelId = generate$6('size-label');\n var cells = makeCells(sizeLabelId, numRows, numColumns);\n var emptyLabelText = makeLabelText(0, 0);\n var memLabel = record({\n dom: {\n tag: 'span',\n classes: ['tox-insert-table-picker__label'],\n attributes: { id: sizeLabelId }\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(function (c) {\n Replacing.set(memLabel.get(c), [emptyLabelText]);\n }),\n runWithTarget(cellOverEvent, function (c, t, e) {\n var _a = e.event, row = _a.row, col = _a.col;\n selectCells(cells, row, col, numRows, numColumns);\n Replacing.set(memLabel.get(c), [makeLabelText(row + 1, col + 1)]);\n }),\n runWithTarget(cellExecuteEvent, function (c, _, e) {\n var _a = e.event, row = _a.row, col = _a.col;\n spec.onAction({\n numRows: row + 1,\n numColumns: col + 1\n });\n emit(c, sandboxClose());\n })\n ]),\n Keying.config({\n initSize: {\n numRows: numRows,\n numColumns: numColumns\n },\n mode: 'flatgrid',\n selector: '[role=\"button\"]'\n })\n ])\n })]\n };\n };\n\n var fancyMenuItems = {\n inserttable: renderInsertTableMenuItem,\n colorswatch: renderColorSwatchItem\n };\n var renderFancyMenuItem = function (spec, backstage) {\n return get$e(fancyMenuItems, spec.fancytype).map(function (render) {\n return render(spec, backstage);\n });\n };\n\n var renderNestedItem = function (spec, itemResponse, providersBackstage, renderIcons, downwardsCaret) {\n if (renderIcons === void 0) {\n renderIcons = true;\n }\n if (downwardsCaret === void 0) {\n downwardsCaret = false;\n }\n var caret = downwardsCaret ? renderDownwardsCaret(providersBackstage.icons) : renderSubmenuCaret(providersBackstage.icons);\n var getApi = function (component) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var 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 data: buildData(spec),\n getApi: getApi,\n disabled: spec.disabled,\n onAction: noop,\n onSetup: spec.onSetup,\n triggersSubmenu: true,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage);\n };\n\n var renderNormalItem = function (spec, itemResponse, providersBackstage, renderIcons) {\n if (renderIcons === void 0) {\n renderIcons = true;\n }\n var getApi = function (component) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var 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 data: buildData(spec),\n getApi: getApi,\n disabled: spec.disabled,\n onAction: spec.onAction,\n onSetup: spec.onSetup,\n triggersSubmenu: false,\n itemBehaviours: []\n }, structure, itemResponse, providersBackstage);\n };\n\n var renderSeparatorItem = function (spec) {\n var innerHtml = spec.text.fold(function () {\n return {};\n }, function (text) {\n return { innerHtml: text };\n });\n return {\n type: 'separator',\n dom: __assign({\n tag: 'div',\n classes: [\n selectableClass,\n groupHeadingClass\n ]\n }, innerHtml),\n components: []\n };\n };\n\n var renderToggleMenuItem = function (spec, itemResponse, providersBackstage, renderIcons) {\n if (renderIcons === void 0) {\n renderIcons = true;\n }\n var getApi = function (component) {\n return {\n setActive: function (state) {\n Toggling.set(component, state);\n },\n isActive: function () {\n return Toggling.isOn(component);\n },\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var 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 data: buildData(spec),\n disabled: spec.disabled,\n getApi: 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 });\n };\n\n var autocomplete = renderAutocompleteItem;\n var separator$3 = renderSeparatorItem;\n var normal = renderNormalItem;\n var nested = renderNestedItem;\n var toggle$1 = renderToggleMenuItem;\n var fancy = renderFancyMenuItem;\n var card = renderCardMenuItem;\n\n var FocusMode;\n (function (FocusMode) {\n FocusMode[FocusMode['ContentFocus'] = 0] = 'ContentFocus';\n FocusMode[FocusMode['UiFocus'] = 1] = 'UiFocus';\n }(FocusMode || (FocusMode = {})));\n var createMenuItemFromBridge = function (item, itemResponse, backstage, menuHasIcons, isHorizontalMenu) {\n var providersBackstage = backstage.shared.providers;\n var parseForHorizontalMenu = function (menuitem) {\n return !isHorizontalMenu ? menuitem : __assign(__assign({}, menuitem), {\n shortcut: Optional.none(),\n icon: menuitem.text.isSome() ? Optional.none() : menuitem.icon\n });\n };\n switch (item.type) {\n case 'menuitem':\n return createMenuItem(item).fold(handleError, function (d) {\n return Optional.some(normal(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons));\n });\n case 'nestedmenuitem':\n return createNestedMenuItem(item).fold(handleError, function (d) {\n return Optional.some(nested(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons, isHorizontalMenu));\n });\n case 'togglemenuitem':\n return createToggleMenuItem(item).fold(handleError, function (d) {\n return Optional.some(toggle$1(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons));\n });\n case 'separator':\n return createSeparatorMenuItem(item).fold(handleError, function (d) {\n return Optional.some(separator$3(d));\n });\n case 'fancymenuitem':\n return createFancyMenuItem(item).fold(handleError, function (d) {\n return fancy(parseForHorizontalMenu(d), backstage);\n });\n default: {\n console.error('Unknown item in general menu', item);\n return Optional.none();\n }\n }\n };\n var createAutocompleteItems = function (items, matchText, onItemValueHandler, columns, itemResponse, sharedBackstage, highlightOn) {\n var renderText = columns === 1;\n var renderIcons = !renderText || menuHasIcons(items);\n return cat(map$2(items, function (item) {\n switch (item.type) {\n case 'separator':\n return createSeparatorItem(item).fold(handleError, function (d) {\n return Optional.some(separator$3(d));\n });\n case 'cardmenuitem':\n return createCardMenuItem(item).fold(handleError, function (d) {\n return Optional.some(card(__assign(__assign({}, d), {\n onAction: function (api) {\n d.onAction(api);\n onItemValueHandler(d.value, d.meta);\n }\n }), itemResponse, sharedBackstage, {\n itemBehaviours: tooltipBehaviour(d.meta, sharedBackstage),\n cardText: {\n matchText: matchText,\n highlightOn: highlightOn\n }\n }));\n });\n case 'autocompleteitem':\n default:\n return createAutocompleterItem(item).fold(handleError, function (d) {\n return Optional.some(autocomplete(d, matchText, renderText, 'normal', onItemValueHandler, itemResponse, sharedBackstage, renderIcons));\n });\n }\n }));\n };\n var createPartialMenu = function (value, items, itemResponse, backstage, isHorizontalMenu) {\n var hasIcons = menuHasIcons(items);\n var alloyItems = cat(map$2(items, function (item) {\n var itemHasIcon = function (i) {\n return isHorizontalMenu ? !has$2(i, 'text') : hasIcons;\n };\n var createItem = function (i) {\n return createMenuItemFromBridge(i, itemResponse, backstage, itemHasIcon(i), isHorizontalMenu);\n };\n if (item.type === 'nestedmenuitem' && item.getSubmenuItems().length <= 0) {\n return createItem(__assign(__assign({}, item), { disabled: true }));\n } else {\n return createItem(item);\n }\n }));\n var createPartial = isHorizontalMenu ? createHorizontalPartialMenuWithAlloyItems : createPartialMenuWithAlloyItems;\n return createPartial(value, hasIcons, alloyItems, 1, 'normal');\n };\n var createTieredDataFrom = function (partialMenu) {\n return tieredMenu.singleData(partialMenu.value, partialMenu);\n };\n var createMenuFrom = function (partialMenu, columns, focusMode, presets) {\n var focusManager = focusMode === FocusMode.ContentFocus ? highlights() : dom$2();\n var movement = deriveMenuMovement(columns, presets);\n var menuMarkers = markers(presets);\n return {\n dom: partialMenu.dom,\n components: partialMenu.components,\n items: partialMenu.items,\n value: partialMenu.value,\n markers: {\n selectedItem: menuMarkers.selectedItem,\n item: menuMarkers.item\n },\n movement: movement,\n fakeFocus: focusMode === FocusMode.ContentFocus,\n focusManager: focusManager,\n menuBehaviours: SimpleBehaviours.unnamedEvents(columns !== 'auto' ? [] : [runOnAttached(function (comp, _se) {\n detectSize(comp, 4, menuMarkers.item).each(function (_a) {\n var numColumns = _a.numColumns, numRows = _a.numRows;\n Keying.setGridSize(comp, numRows, numColumns);\n });\n })])\n };\n };\n\n var register$9 = function (editor, sharedBackstage) {\n var activeAutocompleter = value$1();\n var processingAction = Cell(false);\n var autocompleter = build$1(InlineView.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-autocompleter']\n },\n components: [],\n fireDismissalEventInstead: {},\n inlineBehaviours: derive$1([config('dismissAutocompleter', [run$1(dismissRequested(), function () {\n return cancelIfNecessary();\n })])]),\n lazySink: sharedBackstage.getSink\n }));\n var isMenuOpen = function () {\n return InlineView.isOpen(autocompleter);\n };\n var isActive = function () {\n return activeAutocompleter.get().isSome();\n };\n var hideIfNecessary = function () {\n if (isActive()) {\n InlineView.hide(autocompleter);\n }\n };\n var cancelIfNecessary = function () {\n if (isActive()) {\n var lastElement = activeAutocompleter.get().map(function (ac) {\n return ac.element;\n });\n detect(lastElement.getOr(SugarElement.fromDom(editor.selection.getNode()))).each(unwrap);\n hideIfNecessary();\n activeAutocompleter.clear();\n processingAction.set(false);\n }\n };\n var getAutocompleters = cached(function () {\n return register$b(editor);\n });\n var getCombinedItems = function (triggerChar, matches) {\n var columns = findMap(matches, function (m) {\n return Optional.from(m.columns);\n }).getOr(1);\n return bind$3(matches, function (match) {\n var choices = match.items;\n return createAutocompleteItems(choices, match.matchText, function (itemValue, itemMeta) {\n var nr = editor.selection.getRng();\n getContext(editor.dom, nr, triggerChar).fold(function () {\n return console.error('Lost context. Cursor probably moved');\n }, function (_a) {\n var range = _a.range;\n var autocompleterApi = {\n hide: function () {\n cancelIfNecessary();\n },\n reload: function (fetchOptions) {\n hideIfNecessary();\n load(fetchOptions);\n }\n };\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 var commenceIfNecessary = function (context) {\n if (!isActive()) {\n var wrapper = create$5(editor, context.range);\n activeAutocompleter.set({\n triggerChar: context.triggerChar,\n element: wrapper,\n matchLength: context.text.length\n });\n processingAction.set(false);\n }\n };\n var display = function (ac, context, lookupData, items) {\n ac.matchLength = context.text.length;\n var columns = findMap(lookupData, function (ld) {\n return Optional.from(ld.columns);\n }).getOr(1);\n InlineView.showAt(autocompleter, Menu.sketch(createMenuFrom(createPartialMenuWithAlloyItems('autocompleter-value', true, items, columns, 'normal'), columns, FocusMode.ContentFocus, 'normal')), {\n anchor: {\n type: 'node',\n root: SugarElement.fromDom(editor.getBody()),\n node: Optional.from(ac.element)\n }\n });\n InlineView.getContent(autocompleter).each(Highlighting.highlightFirst);\n };\n var doLookup = function (fetchOptions) {\n return activeAutocompleter.get().map(function (ac) {\n return getContext(editor.dom, editor.selection.getRng(), ac.triggerChar).bind(function (newContext) {\n return lookupWithContext(editor, getAutocompleters, newContext, fetchOptions);\n });\n }).getOrThunk(function () {\n return lookup$2(editor, getAutocompleters);\n });\n };\n var load = function (fetchOptions) {\n doLookup(fetchOptions).fold(cancelIfNecessary, function (lookupInfo) {\n commenceIfNecessary(lookupInfo.context);\n lookupInfo.lookupData.then(function (lookupData) {\n activeAutocompleter.get().map(function (ac) {\n var context = lookupInfo.context;\n if (ac.triggerChar === context.triggerChar) {\n var combinedItems = getCombinedItems(context.triggerChar, lookupData);\n if (combinedItems.length > 0) {\n display(ac, context, lookupData, combinedItems);\n } else if (context.text.length - ac.matchLength >= 10) {\n cancelIfNecessary();\n } else {\n hideIfNecessary();\n }\n }\n });\n });\n });\n };\n var onKeypress = last(function (e) {\n if (e.which === 27) {\n return;\n }\n load();\n }, 50);\n var autocompleterUiApi = {\n onKeypress: onKeypress,\n cancelIfNecessary: cancelIfNecessary,\n isMenuOpen: isMenuOpen,\n isActive: isActive,\n isProcessingAction: processingAction.get,\n getView: function () {\n return InlineView.getContent(autocompleter);\n }\n };\n if (editor.hasPlugin('rtc') === false) {\n AutocompleterEditorEvents.setup(autocompleterUiApi, editor);\n }\n };\n var Autocompleter = { register: register$9 };\n\n var closest = function (scope, selector, isRoot) {\n return closest$1(scope, selector, isRoot).isSome();\n };\n\n var DelayedFunction = function (fun, delay) {\n var ref = null;\n var schedule = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n ref = setTimeout(function () {\n fun.apply(null, args);\n ref = null;\n }, delay);\n };\n var cancel = function () {\n if (ref !== null) {\n clearTimeout(ref);\n ref = null;\n }\n };\n return {\n cancel: cancel,\n schedule: schedule\n };\n };\n\n var SIGNIFICANT_MOVE = 5;\n var LONGPRESS_DELAY = 400;\n var getTouch = function (event) {\n var 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 var isFarEnough = function (touch, data) {\n var distX = Math.abs(touch.clientX - data.x);\n var distY = Math.abs(touch.clientY - data.y);\n return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE;\n };\n var monitor = function (settings) {\n var startData = value$1();\n var longpressFired = Cell(false);\n var longpress$1 = DelayedFunction(function (event) {\n settings.triggerEvent(longpress(), event);\n longpressFired.set(true);\n }, LONGPRESS_DELAY);\n var handleTouchstart = function (event) {\n getTouch(event).each(function (touch) {\n longpress$1.cancel();\n var 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 var handleTouchmove = function (event) {\n longpress$1.cancel();\n getTouch(event).each(function (touch) {\n startData.on(function (data) {\n if (isFarEnough(touch, data)) {\n startData.clear();\n }\n });\n });\n return Optional.none();\n };\n var handleTouchend = function (event) {\n longpress$1.cancel();\n var isSame = function (data) {\n return eq(data.target, event.target);\n };\n return startData.get().filter(isSame).map(function (_data) {\n if (longpressFired.get()) {\n event.prevent();\n return false;\n } else {\n return settings.triggerEvent(tap(), event);\n }\n });\n };\n var 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 var fireIfReady = function (event, type) {\n return get$e(handlers, type).bind(function (handler) {\n return handler(event);\n });\n };\n return { fireIfReady: fireIfReady };\n };\n\n var isDangerous = function (event) {\n var keyEv = event.raw;\n return keyEv.which === BACKSPACE[0] && !contains$2([\n 'input',\n 'textarea'\n ], name$2(event.target)) && !closest(event.target, '[contenteditable=\"true\"]');\n };\n var isFirefox = function () {\n return detect$1().browser.isFirefox();\n };\n var bindFocus = function (container, handler) {\n if (isFirefox()) {\n return capture(container, 'focus', handler);\n } else {\n return bind(container, 'focusin', handler);\n }\n };\n var bindBlur = function (container, handler) {\n if (isFirefox()) {\n return capture(container, 'blur', handler);\n } else {\n return bind(container, 'focusout', handler);\n }\n };\n var setup$d = function (container, rawSettings) {\n var settings = __assign({ stopBackspace: true }, rawSettings);\n var 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 var tapEvent = monitor(settings);\n var 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 ]), function (type) {\n return bind(container, type, function (event) {\n tapEvent.fireIfReady(event, type).each(function (tapStopped) {\n if (tapStopped) {\n event.kill();\n }\n });\n var stopped = settings.triggerEvent(type, event);\n if (stopped) {\n event.kill();\n }\n });\n });\n var pasteTimeout = value$1();\n var onPaste = bind(container, 'paste', function (event) {\n tapEvent.fireIfReady(event, 'paste').each(function (tapStopped) {\n if (tapStopped) {\n event.kill();\n }\n });\n var stopped = settings.triggerEvent('paste', event);\n if (stopped) {\n event.kill();\n }\n pasteTimeout.set(setTimeout(function () {\n settings.triggerEvent(postPaste(), event);\n }, 0));\n });\n var onKeydown = bind(container, 'keydown', function (event) {\n var stopped = settings.triggerEvent('keydown', event);\n if (stopped) {\n event.kill();\n } else if (settings.stopBackspace && isDangerous(event)) {\n event.prevent();\n }\n });\n var onFocusIn = bindFocus(container, function (event) {\n var stopped = settings.triggerEvent('focusin', event);\n if (stopped) {\n event.kill();\n }\n });\n var focusoutTimeout = value$1();\n var onFocusOut = bindBlur(container, function (event) {\n var stopped = settings.triggerEvent('focusout', event);\n if (stopped) {\n event.kill();\n }\n focusoutTimeout.set(setTimeout(function () {\n settings.triggerEvent(postBlur(), event);\n }, 0));\n });\n var unbind = function () {\n each$1(simpleEvents, function (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: unbind };\n };\n\n var derive = function (rawEvent, rawTarget) {\n var source = get$e(rawEvent, 'target').getOr(rawTarget);\n return Cell(source);\n };\n\n var fromSource = function (event, source) {\n var stopper = Cell(false);\n var cutter = Cell(false);\n var stop = function () {\n stopper.set(true);\n };\n var cut = function () {\n cutter.set(true);\n };\n return {\n stop: stop,\n cut: cut,\n isStopped: stopper.get,\n isCut: cutter.get,\n event: event,\n setSource: source.set,\n getSource: source.get\n };\n };\n var fromExternal = function (event) {\n var stopper = Cell(false);\n var stop = function () {\n stopper.set(true);\n };\n return {\n stop: stop,\n cut: noop,\n isStopped: stopper.get,\n isCut: never,\n event: 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 var adt$1 = Adt.generate([\n { stopped: [] },\n { resume: ['element'] },\n { complete: [] }\n ]);\n var doTriggerHandler = function (lookup, eventType, rawEvent, target, source, logger) {\n var handler = lookup(eventType, target);\n var simulatedEvent = fromSource(rawEvent, source);\n return handler.fold(function () {\n logger.logEventNoHandlers(eventType, target);\n return adt$1.complete();\n }, function (handlerInfo) {\n var descHandler = handlerInfo.descHandler;\n var 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(function () {\n logger.logNoParent(eventType, handlerInfo.element, descHandler.purpose);\n return adt$1.complete();\n }, function (parent) {\n logger.logEventResponse(eventType, handlerInfo.element, descHandler.purpose);\n return adt$1.resume(parent);\n });\n }\n });\n };\n var doTriggerOnUntilStopped = function (lookup, eventType, rawEvent, rawTarget, source, logger) {\n return doTriggerHandler(lookup, eventType, rawEvent, rawTarget, source, logger).fold(always, function (parent) {\n return doTriggerOnUntilStopped(lookup, eventType, rawEvent, parent, source, logger);\n }, never);\n };\n var triggerHandler = function (lookup, eventType, rawEvent, target, logger) {\n var source = derive(rawEvent, target);\n return doTriggerHandler(lookup, eventType, rawEvent, target, source, logger);\n };\n var broadcast = function (listeners, rawEvent, _logger) {\n var simulatedEvent = fromExternal(rawEvent);\n each$1(listeners, function (listener) {\n var descHandler = listener.descHandler;\n var handler = getCurried(descHandler);\n handler(simulatedEvent);\n });\n return simulatedEvent.isStopped();\n };\n var triggerUntilStopped = function (lookup, eventType, rawEvent, logger) {\n return triggerOnUntilStopped(lookup, eventType, rawEvent, rawEvent.target, logger);\n };\n var triggerOnUntilStopped = function (lookup, eventType, rawEvent, rawTarget, logger) {\n var source = derive(rawEvent, rawTarget);\n return doTriggerOnUntilStopped(lookup, eventType, rawEvent, rawTarget, source, logger);\n };\n\n var eventHandler = function (element, descHandler) {\n return {\n element: element,\n descHandler: descHandler\n };\n };\n var broadcastHandler = function (id, handler) {\n return {\n id: id,\n descHandler: handler\n };\n };\n var EventRegistry = function () {\n var registry = {};\n var registerId = function (extraArgs, id, events) {\n each(events, function (v, k) {\n var handlers = registry[k] !== undefined ? registry[k] : {};\n handlers[id] = curryArgs(v, extraArgs);\n registry[k] = handlers;\n });\n };\n var findHandler = function (handlers, elem) {\n return read$1(elem).bind(function (id) {\n return get$e(handlers, id);\n }).map(function (descHandler) {\n return eventHandler(elem, descHandler);\n });\n };\n var filterByType = function (type) {\n return get$e(registry, type).map(function (handlers) {\n return mapToArray(handlers, function (f, id) {\n return broadcastHandler(id, f);\n });\n }).getOr([]);\n };\n var find = function (isAboveRoot, type, target) {\n return get$e(registry, type).bind(function (handlers) {\n return closest$4(target, function (elem) {\n return findHandler(handlers, elem);\n }, isAboveRoot);\n });\n };\n var unregisterId = function (id) {\n each(registry, function (handlersById, _eventName) {\n if (has$2(handlersById, id)) {\n delete handlersById[id];\n }\n });\n };\n return {\n registerId: registerId,\n unregisterId: unregisterId,\n filterByType: filterByType,\n find: find\n };\n };\n\n var Registry = function () {\n var events = EventRegistry();\n var components = {};\n var readOrTag = function (component) {\n var elem = component.element;\n return read$1(elem).getOrThunk(function () {\n return write('uid-', component.element);\n });\n };\n var failOnDuplicate = function (component, tagId) {\n var 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 var register = function (component) {\n var tagId = readOrTag(component);\n if (hasNonNullableKey(components, tagId)) {\n failOnDuplicate(component, tagId);\n }\n var extraArgs = [component];\n events.registerId(extraArgs, tagId, component.events);\n components[tagId] = component;\n };\n var unregister = function (component) {\n read$1(component.element).each(function (tagId) {\n delete components[tagId];\n events.unregisterId(tagId);\n });\n };\n var filter = function (type) {\n return events.filterByType(type);\n };\n var find = function (isAboveRoot, type, target) {\n return events.find(isAboveRoot, type, target);\n };\n var getById = function (id) {\n return get$e(components, id);\n };\n return {\n find: find,\n filter: filter,\n register: register,\n unregister: unregister,\n getById: getById\n };\n };\n\n var factory$j = function (detail) {\n var _a = detail.dom, attributes = _a.attributes, domWithoutAttributes = __rest(_a, ['attributes']);\n return {\n uid: detail.uid,\n dom: __assign({\n tag: 'div',\n attributes: __assign({ role: 'presentation' }, attributes)\n }, domWithoutAttributes),\n components: detail.components,\n behaviours: get$2(detail.containerBehaviours),\n events: detail.events,\n domModification: detail.domModification,\n eventOrder: detail.eventOrder\n };\n };\n var 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 var takeover = function (root) {\n var isAboveRoot = function (el) {\n return parent(root.element).fold(always, function (parent) {\n return eq(el, parent);\n });\n };\n var registry = Registry();\n var lookup = function (eventName, target) {\n return registry.find(isAboveRoot, eventName, target);\n };\n var domEvents = setup$d(root.element, {\n triggerEvent: function (eventName, event) {\n return monitorEvent(eventName, event.target, function (logger) {\n return triggerUntilStopped(lookup, eventName, event, logger);\n });\n }\n });\n var systemApi = {\n debugInfo: constant$1('real'),\n triggerEvent: function (eventName, target, data) {\n monitorEvent(eventName, target, function (logger) {\n return triggerOnUntilStopped(lookup, eventName, data, target, logger);\n });\n },\n triggerFocus: function (target, originator) {\n read$1(target).fold(function () {\n focus$3(target);\n }, function (_alloyId) {\n monitorEvent(focus$4(), target, function (logger) {\n triggerHandler(lookup, focus$4(), {\n originator: originator,\n kill: noop,\n prevent: noop,\n target: target\n }, target, logger);\n return false;\n });\n });\n },\n triggerEscape: function (comp, simulatedEvent) {\n systemApi.triggerEvent('keydown', comp.element, simulatedEvent.event);\n },\n getByUid: function (uid) {\n return getByUid(uid);\n },\n getByDom: function (elem) {\n return getByDom(elem);\n },\n build: build$1,\n addToGui: function (c) {\n add(c);\n },\n removeFromGui: function (c) {\n remove(c);\n },\n addToWorld: function (c) {\n addToWorld(c);\n },\n removeFromWorld: function (c) {\n removeFromWorld(c);\n },\n broadcast: function (message) {\n broadcast$1(message);\n },\n broadcastOn: function (channels, message) {\n broadcastOn(channels, message);\n },\n broadcastEvent: function (eventName, event) {\n broadcastEvent(eventName, event);\n },\n isConnected: always\n };\n var addToWorld = function (component) {\n component.connect(systemApi);\n if (!isText$1(component.element)) {\n registry.register(component);\n each$1(component.components(), addToWorld);\n systemApi.triggerEvent(systemInit(), component.element, { target: component.element });\n }\n };\n var removeFromWorld = function (component) {\n if (!isText$1(component.element)) {\n each$1(component.components(), removeFromWorld);\n registry.unregister(component);\n }\n component.disconnect();\n };\n var add = function (component) {\n attach(root, component);\n };\n var remove = function (component) {\n detach(component);\n };\n var destroy = function () {\n domEvents.unbind();\n remove$5(root.element);\n };\n var broadcastData = function (data) {\n var receivers = registry.filter(receive());\n each$1(receivers, function (receiver) {\n var descHandler = receiver.descHandler;\n var handler = getCurried(descHandler);\n handler(data);\n });\n };\n var broadcast$1 = function (message) {\n broadcastData({\n universal: true,\n data: message\n });\n };\n var broadcastOn = function (channels, message) {\n broadcastData({\n universal: false,\n channels: channels,\n data: message\n });\n };\n var broadcastEvent = function (eventName, event) {\n var listeners = registry.filter(eventName);\n return broadcast(listeners, event);\n };\n var getByUid = function (uid) {\n return registry.getById(uid).fold(function () {\n return Result.error(new Error('Could not find component with uid: \"' + uid + '\" in system.'));\n }, Result.value);\n };\n var getByDom = function (elem) {\n var uid = read$1(elem).getOr('not found');\n return getByUid(uid);\n };\n addToWorld(root);\n return {\n root: root,\n element: root.element,\n destroy: destroy,\n add: add,\n remove: remove,\n getByUid: getByUid,\n getByDom: getByDom,\n addToWorld: addToWorld,\n removeFromWorld: removeFromWorld,\n broadcast: broadcast$1,\n broadcastOn: broadcastOn,\n broadcastEvent: broadcastEvent\n };\n };\n\n var renderBar = function (spec, backstage) {\n return {\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\n var schema$l = constant$1([\n defaulted('prefix', 'form-field'),\n field('fieldBehaviours', [\n Composing,\n Representing\n ])\n ]);\n var parts$e = constant$1([\n optional({\n schema: [required$1('dom')],\n name: 'label'\n }),\n optional({\n factory: {\n sketch: function (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: function (spec) {\n var excludeFactory = exclude(spec, ['factory']);\n return spec.factory.sketch(excludeFactory);\n }\n },\n schema: [required$1('factory')],\n name: 'field'\n })\n ]);\n\n var factory$i = function (detail, components, _spec, _externals) {\n var behaviours = augment(detail.fieldBehaviours, [\n Composing.config({\n find: function (container) {\n return getPart(container, detail, 'field');\n }\n }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function (field) {\n return Composing.getCurrent(field).bind(Representing.getValue);\n },\n setValue: function (field, value) {\n Composing.getCurrent(field).each(function (current) {\n Representing.setValue(current, value);\n });\n }\n }\n })\n ]);\n var events = derive$2([runOnAttached(function (component, _simulatedEvent) {\n var ps = getParts(component, detail, [\n 'label',\n 'field',\n 'aria-descriptor'\n ]);\n ps.field().each(function (field) {\n var id = generate$6(detail.prefix);\n ps.label().each(function (label) {\n set$8(label.element, 'for', id);\n set$8(field.element, 'id', id);\n });\n ps['aria-descriptor']().each(function (descriptor) {\n var descriptorId = generate$6(detail.prefix);\n set$8(descriptor.element, 'id', descriptorId);\n set$8(field.element, 'aria-describedby', descriptorId);\n });\n });\n })]);\n var apis = {\n getField: function (container) {\n return getPart(container, detail, 'field');\n },\n getLabel: function (container) {\n return getPart(container, detail, 'label');\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: behaviours,\n events: events,\n apis: apis\n };\n };\n var FormField = composite({\n name: 'FormField',\n configFields: schema$l(),\n partFields: parts$e(),\n factory: factory$i,\n apis: {\n getField: function (apis, comp) {\n return apis.getField(comp);\n },\n getLabel: function (apis, comp) {\n return apis.getLabel(comp);\n }\n }\n });\n\n var exhibit$2 = function (base, tabConfig) {\n return nu$7({\n attributes: wrapAll([{\n key: tabConfig.tabAttr,\n value: 'true'\n }])\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 var Tabstopping = create$8({\n fields: TabstopSchema,\n name: 'tabstopping',\n active: ActiveTabstopping\n });\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.html.Entities');\n\n var renderFormFieldWith = function (pLabel, pField, extraClasses, extraBehaviours) {\n var spec = renderFormFieldSpecWith(pLabel, pField, extraClasses, extraBehaviours);\n return FormField.sketch(spec);\n };\n var renderFormField = function (pLabel, pField) {\n return renderFormFieldWith(pLabel, pField, [], []);\n };\n var renderFormFieldSpecWith = function (pLabel, pField, extraClasses, extraBehaviours) {\n return {\n dom: renderFormFieldDomWith(extraClasses),\n components: pLabel.toArray().concat([pField]),\n fieldBehaviours: derive$1(extraBehaviours)\n };\n };\n var renderFormFieldDom = function () {\n return renderFormFieldDomWith([]);\n };\n var renderFormFieldDomWith = function (extraClasses) {\n return {\n tag: 'div',\n classes: ['tox-form__group'].concat(extraClasses)\n };\n };\n var renderLabel$2 = function (label, providersBackstage) {\n return FormField.parts.label({\n dom: {\n tag: 'label',\n classes: ['tox-label'],\n innerHtml: providersBackstage.translate(label)\n }\n });\n };\n\n var formChangeEvent = generate$6('form-component-change');\n var formCloseEvent = generate$6('form-close');\n var formCancelEvent = generate$6('form-cancel');\n var formActionEvent = generate$6('form-action');\n var formSubmitEvent = generate$6('form-submit');\n var formBlockEvent = generate$6('form-block');\n var formUnblockEvent = generate$6('form-unblock');\n var formTabChangeEvent = generate$6('form-tabchange');\n var formResizeEvent = generate$6('form-resize');\n\n var renderCollection = function (spec, providersBackstage) {\n var _a;\n var pLabel = spec.label.map(function (label) {\n return renderLabel$2(label, providersBackstage);\n });\n var runOnItem = function (f) {\n return function (comp, se) {\n closest$1(se.event.target, '[data-collection-item-value]').each(function (target) {\n f(comp, se, target, get$d(target, 'data-collection-item-value'));\n });\n };\n };\n var setContents = function (comp, items) {\n var htmlLines = map$2(items, function (item) {\n var itemText = global$e.translate(item.text);\n var textContent = spec.columns === 1 ? '
    ' + itemText + '
    ' : '';\n var iconContent = '
    ' + item.icon + '
    ';\n var mapItemName = {\n '_': ' ',\n ' - ': ' ',\n '-': ' '\n };\n var ariaLabel = itemText.replace(/\\_| \\- |\\-/g, function (match) {\n return mapItemName[match];\n });\n var disabledClass = providersBackstage.isDisabled() ? ' tox-collection__item--state-disabled' : '';\n return '
    ' + iconContent + textContent + '
    ';\n });\n var chunks = spec.columns !== 'auto' && spec.columns > 1 ? chunk$1(htmlLines, spec.columns) : [htmlLines];\n var html = map$2(chunks, function (ch) {\n return '
    ' + ch.join('') + '
    ';\n });\n set$5(comp.element, html.join(''));\n };\n var onClick = runOnItem(function (comp, se, tgt, itemValue) {\n se.stop();\n if (!providersBackstage.isDisabled()) {\n emitWith(comp, formActionEvent, {\n name: spec.name,\n value: itemValue\n });\n }\n });\n var collectionEvents = [\n run$1(mouseover(), runOnItem(function (comp, se, tgt) {\n focus$3(tgt);\n })),\n run$1(click(), onClick),\n run$1(tap(), onClick),\n run$1(focusin(), runOnItem(function (comp, se, tgt) {\n descendant(comp.element, '.' + activeClass).each(function (currentActive) {\n remove$2(currentActive, activeClass);\n });\n add$2(tgt, activeClass);\n })),\n run$1(focusout(), runOnItem(function (comp) {\n descendant(comp.element, '.' + activeClass).each(function (currentActive) {\n remove$2(currentActive, activeClass);\n });\n })),\n runOnExecute$1(runOnItem(function (comp, se, tgt, itemValue) {\n emitWith(comp, formActionEvent, {\n name: spec.name,\n value: itemValue\n });\n }))\n ];\n var iterCollectionItems = function (comp, applyAttributes) {\n return map$2(descendants(comp.element, '.tox-collection__item'), applyAttributes);\n };\n var 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$1 },\n behaviours: derive$1([\n Disabling.config({\n disabled: providersBackstage.isDisabled,\n onDisabled: function (comp) {\n iterCollectionItems(comp, function (childElm) {\n add$2(childElm, 'tox-collection__item--state-disabled');\n set$8(childElm, 'aria-disabled', true);\n });\n },\n onEnabled: function (comp) {\n iterCollectionItems(comp, function (childElm) {\n remove$2(childElm, 'tox-collection__item--state-disabled');\n remove$7(childElm, 'aria-disabled');\n });\n }\n }),\n receivingConfig(),\n Replacing.config({}),\n Representing.config({\n store: {\n mode: 'memory',\n initialValue: []\n },\n onSetValue: function (comp, items) {\n setContents(comp, items);\n if (spec.columns === 'auto') {\n detectSize(comp, 5, 'tox-collection__item').each(function (_a) {\n var numRows = _a.numRows, numColumns = _a.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: (_a = {}, _a[execute$5()] = [\n 'disabling',\n 'alloy.base.behaviour',\n 'collection-events'\n ], _a)\n });\n var extraClasses = ['tox-form__group--collection'];\n return renderFormFieldWith(pLabel, pField, extraClasses, []);\n };\n\n var schema$k = constant$1([\n option('data'),\n defaulted('inputAttributes', {}),\n defaulted('inputStyles', {}),\n defaulted('tag', 'input'),\n defaulted('inputClasses', []),\n onHandler('onSetValue'),\n defaulted('styles', {}),\n defaulted('eventOrder', {}),\n field('inputBehaviours', [\n Representing,\n Focusing\n ]),\n defaulted('selectOnFocus', true)\n ]);\n var focusBehaviours = function (detail) {\n return derive$1([Focusing.config({\n onFocus: !detail.selectOnFocus ? noop : function (component) {\n var input = component.element;\n var value = get$5(input);\n input.dom.setSelectionRange(0, value.length);\n }\n })]);\n };\n var behaviours = function (detail) {\n return __assign(__assign({}, focusBehaviours(detail)), augment(detail.inputBehaviours, [Representing.config({\n store: __assign(__assign({ mode: 'manual' }, detail.data.map(function (data) {\n return { initialValue: data };\n }).getOr({})), {\n getValue: function (input) {\n return get$5(input.element);\n },\n setValue: function (input, data) {\n var current = get$5(input.element);\n if (current !== data) {\n set$4(input.element, data);\n }\n }\n }),\n onSetValue: detail.onSetValue\n })]));\n };\n var dom = function (detail) {\n return {\n tag: detail.tag,\n attributes: __assign({ type: 'text' }, detail.inputAttributes),\n styles: detail.inputStyles,\n classes: detail.inputClasses\n };\n };\n\n var factory$h = function (detail, _spec) {\n return {\n uid: detail.uid,\n dom: dom(detail),\n components: [],\n behaviours: behaviours(detail),\n eventOrder: detail.eventOrder\n };\n };\n var Input = single({\n name: 'Input',\n configFields: schema$k(),\n factory: factory$h\n });\n\n var exports$1 = {}, module = { exports: exports$1 };\n (function (define, exports, module, require) {\n (function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.EphoxContactWrapper = factory());\n }(this, function () {\n var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n var promise = { exports: {} };\n (function (module) {\n (function (root) {\n var setTimeoutFunc = setTimeout;\n function noop() {\n }\n function bind(fn, thisArg) {\n return function () {\n fn.apply(thisArg, arguments);\n };\n }\n function Promise(fn) {\n if (typeof this !== 'object')\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function')\n throw new TypeError('not a function');\n this._state = 0;\n this._handled = false;\n this._value = undefined;\n this._deferreds = [];\n doResolve(fn, this);\n }\n function handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function () {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n }\n function resolve(self, newValue) {\n try {\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n }\n function reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n }\n function finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function () {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n }\n function Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n }\n function doResolve(fn, self) {\n var done = false;\n try {\n fn(function (value) {\n if (done)\n return;\n done = true;\n resolve(self, value);\n }, function (reason) {\n if (done)\n return;\n done = true;\n reject(self, reason);\n });\n } catch (ex) {\n if (done)\n return;\n done = true;\n reject(self, ex);\n }\n }\n Promise.prototype['catch'] = function (onRejected) {\n return this.then(null, onRejected);\n };\n Promise.prototype.then = function (onFulfilled, onRejected) {\n var prom = new this.constructor(noop);\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n };\n Promise.all = function (arr) {\n var args = Array.prototype.slice.call(arr);\n return new Promise(function (resolve, reject) {\n if (args.length === 0)\n return resolve([]);\n var remaining = args.length;\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n };\n Promise.resolve = function (value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n return new Promise(function (resolve) {\n resolve(value);\n });\n };\n Promise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n };\n Promise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n };\n Promise._immediateFn = typeof setImmediate === 'function' ? function (fn) {\n setImmediate(fn);\n } : function (fn) {\n setTimeoutFunc(fn, 0);\n };\n Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err);\n }\n };\n Promise._setImmediateFn = function _setImmediateFn(fn) {\n Promise._immediateFn = fn;\n };\n Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {\n Promise._unhandledRejectionFn = fn;\n };\n if (module.exports) {\n module.exports = Promise;\n } else if (!root.Promise) {\n root.Promise = Promise;\n }\n }(commonjsGlobal));\n }(promise));\n var promisePolyfill = promise.exports;\n var Global = function () {\n if (typeof window !== 'undefined') {\n return window;\n } else {\n return Function('return this;')();\n }\n }();\n var promisePolyfill_1 = { boltExport: Global.Promise || promisePolyfill };\n return promisePolyfill_1;\n }));\n }(undefined, exports$1, module));\n var Promise$1 = module.exports.boltExport;\n\n var nu$3 = function (baseFn) {\n var data = Optional.none();\n var callbacks = [];\n var map = function (f) {\n return nu$3(function (nCallback) {\n get(function (data) {\n nCallback(f(data));\n });\n });\n };\n var get = function (nCallback) {\n if (isReady()) {\n call(nCallback);\n } else {\n callbacks.push(nCallback);\n }\n };\n var set = function (x) {\n if (!isReady()) {\n data = Optional.some(x);\n run(callbacks);\n callbacks = [];\n }\n };\n var isReady = function () {\n return data.isSome();\n };\n var run = function (cbs) {\n each$1(cbs, call);\n };\n var call = function (cb) {\n data.each(function (x) {\n setTimeout(function () {\n cb(x);\n }, 0);\n });\n };\n baseFn(set);\n return {\n get: get,\n map: map,\n isReady: isReady\n };\n };\n var pure$1 = function (a) {\n return nu$3(function (callback) {\n callback(a);\n });\n };\n var LazyValue = {\n nu: nu$3,\n pure: pure$1\n };\n\n var errorReporter = function (err) {\n setTimeout(function () {\n throw err;\n }, 0);\n };\n var make$5 = function (run) {\n var get = function (callback) {\n run().then(callback, errorReporter);\n };\n var map = function (fab) {\n return make$5(function () {\n return run().then(fab);\n });\n };\n var bind = function (aFutureB) {\n return make$5(function () {\n return run().then(function (v) {\n return aFutureB(v).toPromise();\n });\n });\n };\n var anonBind = function (futureB) {\n return make$5(function () {\n return run().then(function () {\n return futureB.toPromise();\n });\n });\n };\n var toLazy = function () {\n return LazyValue.nu(get);\n };\n var toCached = function () {\n var cache = null;\n return make$5(function () {\n if (cache === null) {\n cache = run();\n }\n return cache;\n });\n };\n var toPromise = run;\n return {\n map: map,\n bind: bind,\n anonBind: anonBind,\n toLazy: toLazy,\n toCached: toCached,\n toPromise: toPromise,\n get: get\n };\n };\n var nu$2 = function (baseFn) {\n return make$5(function () {\n return new Promise$1(baseFn);\n });\n };\n var pure = function (a) {\n return make$5(function () {\n return Promise$1.resolve(a);\n });\n };\n var Future = {\n nu: nu$2,\n pure: pure\n };\n\n var ariaElements = [\n 'input',\n 'textarea'\n ];\n var isAriaElement = function (elem) {\n var name = name$2(elem);\n return contains$2(ariaElements, name);\n };\n var markValid = function (component, invalidConfig) {\n var elem = invalidConfig.getRoot(component).getOr(component.element);\n remove$2(elem, invalidConfig.invalidClass);\n invalidConfig.notify.each(function (notifyInfo) {\n if (isAriaElement(component.element)) {\n set$8(component.element, 'aria-invalid', false);\n }\n notifyInfo.getContainer(component).each(function (container) {\n set$5(container, notifyInfo.validHtml);\n });\n notifyInfo.onValid(component);\n });\n };\n var markInvalid = function (component, invalidConfig, invalidState, text) {\n var elem = invalidConfig.getRoot(component).getOr(component.element);\n add$2(elem, invalidConfig.invalidClass);\n invalidConfig.notify.each(function (notifyInfo) {\n if (isAriaElement(component.element)) {\n set$8(component.element, 'aria-invalid', true);\n }\n notifyInfo.getContainer(component).each(function (container) {\n set$5(container, text);\n });\n notifyInfo.onInvalid(component, text);\n });\n };\n var query = function (component, invalidConfig, _invalidState) {\n return invalidConfig.validator.fold(function () {\n return Future.pure(Result.value(true));\n }, function (validatorInfo) {\n return validatorInfo.validate(component);\n });\n };\n var run = function (component, invalidConfig, invalidState) {\n invalidConfig.notify.each(function (notifyInfo) {\n notifyInfo.onValidate(component);\n });\n return query(component, invalidConfig).map(function (valid) {\n if (component.getSystem().isConnected()) {\n return valid.fold(function (err) {\n markInvalid(component, invalidConfig, invalidState, err);\n return Result.error(err);\n }, function (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 var isInvalid = function (component, invalidConfig) {\n var 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 var events$8 = function (invalidConfig, invalidState) {\n return invalidConfig.validator.map(function (validatorInfo) {\n return derive$2([run$1(validatorInfo.onEvent, function (component) {\n run(component, invalidConfig, invalidState).get(identity$1);\n })].concat(validatorInfo.validateOnLoad ? [runOnAttached(function (component) {\n run(component, invalidConfig, invalidState).get(noop);\n })] : []));\n }).getOr({});\n };\n\n var ActiveInvalidate = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$8\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 var Invalidating = create$8({\n fields: InvalidateSchema,\n name: 'invalidating',\n active: ActiveInvalidate,\n apis: InvalidateApis,\n extra: {\n validation: function (validator) {\n return function (component) {\n var v = Representing.getValue(component);\n return Future.pure(validator(v));\n };\n }\n }\n });\n\n var getCoupled = function (component, coupleConfig, coupleState, name) {\n return coupleState.getOrCreate(component, coupleConfig, name);\n };\n\n var CouplingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getCoupled: getCoupled\n });\n\n var CouplingSchema = [requiredOf('others', setOf(Result.value, anyValue()))];\n\n var init$a = function () {\n var coupled = {};\n var getOrCreate = function (component, coupleConfig, name) {\n var available = keys(coupleConfig.others);\n if (!available) {\n throw new Error('Cannot find coupled component: ' + name + '. Known coupled components: ' + JSON.stringify(available, null, 2));\n } else {\n return get$e(coupled, name).getOrThunk(function () {\n var builder = get$e(coupleConfig.others, name).getOrDie('No information found for coupled component: ' + name);\n var spec = builder(component);\n var built = component.getSystem().build(spec);\n coupled[name] = built;\n return built;\n });\n }\n };\n var readState = constant$1({});\n return nu$8({\n readState: readState,\n getOrCreate: getOrCreate\n });\n };\n\n var CouplingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$a\n });\n\n var Coupling = create$8({\n fields: CouplingSchema,\n name: 'coupling',\n apis: CouplingApis,\n state: CouplingState\n });\n\n var suffix = constant$1('sink');\n var 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 var HighlightOnOpen;\n (function (HighlightOnOpen) {\n HighlightOnOpen[HighlightOnOpen['HighlightFirst'] = 0] = 'HighlightFirst';\n HighlightOnOpen[HighlightOnOpen['HighlightNone'] = 1] = 'HighlightNone';\n }(HighlightOnOpen || (HighlightOnOpen = {})));\n var getAnchor = function (detail, component) {\n var hotspot = detail.getHotspot(component).getOr(component);\n var type = 'hotspot';\n var overrides = detail.getAnchorOverrides();\n return detail.layouts.fold(function () {\n return {\n type: type,\n hotspot: hotspot,\n overrides: overrides\n };\n }, function (layouts) {\n return {\n type: type,\n hotspot: hotspot,\n overrides: overrides,\n layouts: layouts\n };\n });\n };\n var fetch = function (detail, mapFetch, component) {\n var fetcher = detail.fetch;\n return fetcher(component).map(mapFetch);\n };\n var openF = function (detail, mapFetch, anchor, component, sandbox, externals, highlightOnOpen) {\n var futureData = fetch(detail, mapFetch, component);\n var getLazySink = getSink(component, detail);\n return futureData.map(function (tdata) {\n return tdata.bind(function (data) {\n return Optional.from(tieredMenu.sketch(__assign(__assign({}, externals.menu()), {\n uid: generate$5(''),\n data: data,\n highlightImmediately: highlightOnOpen === HighlightOnOpen.HighlightFirst,\n onOpenMenu: function (tmenu, menu) {\n var sink = getLazySink().getOrDie();\n Positioning.position(sink, menu, { anchor: anchor });\n Sandboxing.decloak(sandbox);\n },\n onOpenSubmenu: function (tmenu, item, submenu) {\n var sink = getLazySink().getOrDie();\n Positioning.position(sink, submenu, {\n anchor: {\n type: 'submenu',\n item: item\n }\n });\n Sandboxing.decloak(sandbox);\n },\n onRepositionMenu: function (tmenu, primaryMenu, submenuTriggers) {\n var sink = getLazySink().getOrDie();\n Positioning.position(sink, primaryMenu, { anchor: anchor });\n each$1(submenuTriggers, function (st) {\n Positioning.position(sink, st.triggeredMenu, {\n anchor: {\n type: 'submenu',\n item: st.triggeringItem\n }\n });\n });\n },\n onEscape: function () {\n Focusing.focus(component);\n Sandboxing.close(sandbox);\n return Optional.some(true);\n }\n })));\n });\n });\n };\n var open = function (detail, mapFetch, hotspot, sandbox, externals, onOpenSync, highlightOnOpen) {\n var anchor = getAnchor(detail, hotspot);\n var processed = openF(detail, mapFetch, anchor, hotspot, sandbox, externals, highlightOnOpen);\n return processed.map(function (tdata) {\n tdata.fold(function () {\n if (Sandboxing.isOpen(sandbox)) {\n Sandboxing.close(sandbox);\n }\n }, function (data) {\n Sandboxing.cloak(sandbox);\n Sandboxing.open(sandbox, data);\n onOpenSync(sandbox);\n });\n return sandbox;\n });\n };\n var close = function (detail, mapFetch, component, sandbox, _externals, _onOpenSync, _highlightOnOpen) {\n Sandboxing.close(sandbox);\n return Future.pure(sandbox);\n };\n var togglePopup = function (detail, mapFetch, hotspot, externals, onOpenSync, highlightOnOpen) {\n var sandbox = Coupling.getCoupled(hotspot, 'sandbox');\n var showing = Sandboxing.isOpen(sandbox);\n var action = showing ? close : open;\n return action(detail, mapFetch, hotspot, sandbox, externals, onOpenSync, highlightOnOpen);\n };\n var matchWidth = function (hotspot, container, useMinWidth) {\n var menu = Composing.getCurrent(container).getOr(container);\n var buttonWidth = get$a(hotspot.element);\n if (useMinWidth) {\n set$7(menu.element, 'min-width', buttonWidth + 'px');\n } else {\n set$6(menu.element, buttonWidth);\n }\n };\n var getSink = function (anyInSystem, sinkDetail) {\n return anyInSystem.getSystem().getByUid(sinkDetail.uid + '-' + suffix()).map(function (internalSink) {\n return function () {\n return Result.value(internalSink);\n };\n }).getOrThunk(function () {\n return sinkDetail.lazySink.fold(function () {\n return function () {\n return Result.error(new Error('No internal sink is specified, nor could an external sink be found'));\n };\n }, function (lazySinkFn) {\n return function () {\n return lazySinkFn(anyInSystem);\n };\n });\n });\n };\n var doRepositionMenus = function (sandbox) {\n Sandboxing.getState(sandbox).each(function (tmenu) {\n tieredMenu.repositionMenus(tmenu);\n });\n };\n var makeSandbox$1 = function (detail, hotspot, extras) {\n var ariaOwner = manager();\n var onOpen = function (component, menu) {\n var anchor = getAnchor(detail, hotspot);\n ariaOwner.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 var onClose = function (component, menu) {\n ariaOwner.unlink(hotspot.element);\n if (extras !== undefined && extras.onClose !== undefined) {\n extras.onClose(component, menu);\n }\n };\n var lazySink = getSink(hotspot, detail);\n return {\n dom: {\n tag: 'div',\n classes: detail.sandboxClasses,\n attributes: {\n id: ariaOwner.id,\n role: 'listbox'\n }\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: onOpen,\n onClose: onClose,\n isPartOf: function (container, data, queryElem) {\n return isPartOf$1(data, queryElem) || isPartOf$1(hotspot, queryElem);\n },\n getAttachPoint: function () {\n return lazySink().getOrDie();\n }\n }),\n Composing.config({\n find: function (sandbox) {\n return Sandboxing.getState(sandbox).bind(function (menu) {\n return Composing.getCurrent(menu);\n });\n }\n }),\n Receiving.config({ channels: __assign(__assign({}, receivingChannel$1({ isExtraPart: never })), receivingChannel({ doReposition: doRepositionMenus })) })\n ])\n };\n };\n var repositionMenus = function (comp) {\n var sandbox = Coupling.getCoupled(comp, 'sandbox');\n doRepositionMenus(sandbox);\n };\n\n var sandboxFields = function () {\n return [\n defaulted('sandboxClasses', []),\n SketchBehaviours.field('sandboxBehaviours', [\n Composing,\n Receiving,\n Sandboxing,\n Representing\n ])\n ];\n };\n\n var schema$j = 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('lazySink'),\n defaulted('matchWidth', false),\n defaulted('useMinWidth', false),\n option('role')\n ].concat(sandboxFields()));\n var parts$d = constant$1([\n external$1({\n schema: [tieredMenuMarkers()],\n name: 'menu',\n defaults: function (detail) {\n return { onExecute: detail.onExecute };\n }\n }),\n partType$1()\n ]);\n\n var factory$g = function (detail, components, _spec, externals) {\n var _a;\n var lookupAttr = function (attr) {\n return get$e(detail.dom, 'attributes').bind(function (attrs) {\n return get$e(attrs, attr);\n });\n };\n var switchToMenu = function (sandbox) {\n Sandboxing.getState(sandbox).each(function (tmenu) {\n tieredMenu.highlightPrimary(tmenu);\n });\n };\n var action = function (component) {\n var onOpenSync = switchToMenu;\n togglePopup(detail, identity$1, component, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n };\n var apis = {\n expand: function (comp) {\n if (!Toggling.isOn(comp)) {\n togglePopup(detail, identity$1, comp, externals, noop, HighlightOnOpen.HighlightNone).get(noop);\n }\n },\n open: function (comp) {\n if (!Toggling.isOn(comp)) {\n togglePopup(detail, identity$1, comp, externals, noop, HighlightOnOpen.HighlightFirst).get(noop);\n }\n },\n isOpen: Toggling.isOn,\n close: function (comp) {\n if (Toggling.isOn(comp)) {\n togglePopup(detail, identity$1, comp, externals, noop, HighlightOnOpen.HighlightFirst).get(noop);\n }\n },\n repositionMenus: function (comp) {\n if (Toggling.isOn(comp)) {\n repositionMenus(comp);\n }\n }\n };\n var triggerExecute = function (comp, _se) {\n emitExecute(comp);\n return Optional.some(true);\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: 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: function (hotspot) {\n return makeSandbox$1(detail, hotspot, {\n onOpen: function () {\n return Toggling.on(hotspot);\n },\n onClose: function () {\n return Toggling.off(hotspot);\n }\n });\n }\n }\n }),\n Keying.config({\n mode: 'special',\n onSpace: triggerExecute,\n onEnter: triggerExecute,\n onDown: function (comp, _se) {\n if (Dropdown.isOpen(comp)) {\n var sandbox = Coupling.getCoupled(comp, 'sandbox');\n switchToMenu(sandbox);\n } else {\n Dropdown.open(comp);\n }\n return Optional.some(true);\n },\n onEscape: function (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$a(Optional.some(action)),\n eventOrder: __assign(__assign({}, detail.eventOrder), (_a = {}, _a[execute$5()] = [\n 'disabling',\n 'toggling',\n 'alloy.base.behaviour'\n ], _a)),\n apis: apis,\n domModification: {\n attributes: __assign(__assign({ 'aria-haspopup': 'true' }, detail.role.fold(function () {\n return {};\n }, function (role) {\n return { role: role };\n })), detail.dom.tag === 'button' ? { type: lookupAttr('type').getOr('button') } : {})\n }\n };\n };\n var Dropdown = composite({\n name: 'Dropdown',\n configFields: schema$j(),\n partFields: parts$d(),\n factory: factory$g,\n apis: {\n open: function (apis, comp) {\n return apis.open(comp);\n },\n expand: function (apis, comp) {\n return apis.expand(comp);\n },\n close: function (apis, comp) {\n return apis.close(comp);\n },\n isOpen: function (apis, comp) {\n return apis.isOpen(comp);\n },\n repositionMenus: function (apis, comp) {\n return apis.repositionMenus(comp);\n }\n }\n });\n\n var exhibit$1 = function () {\n return nu$7({\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 };\n var events$7 = function () {\n return derive$2([abort(selectstart(), always)]);\n };\n\n var ActiveUnselecting = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$7,\n exhibit: exhibit$1\n });\n\n var Unselecting = create$8({\n fields: [],\n name: 'unselecting',\n active: ActiveUnselecting\n });\n\n var renderPanelButton = function (spec, sharedBackstage) {\n return Dropdown.sketch({\n dom: spec.dom,\n components: spec.components,\n toggleClass: 'mce-active',\n dropdownBehaviours: derive$1([\n DisablingConfigs.button(sharedBackstage.providers.isDisabled),\n receivingConfig(),\n Unselecting.config({}),\n Tabstopping.config({})\n ]),\n layouts: spec.layouts,\n sandboxClasses: ['tox-dialog__popups'],\n lazySink: sharedBackstage.getSink,\n fetch: function (comp) {\n return Future.nu(function (callback) {\n return spec.fetch(callback);\n }).map(function (items) {\n return Optional.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$6('menu-value'), items, function (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 });\n },\n parts: { menu: part(false, 1, spec.presets) }\n });\n };\n\n var colorInputChangeEvent = generate$6('color-input-change');\n var colorSwatchChangeEvent = generate$6('color-swatch-change');\n var colorPickerCancelEvent = generate$6('color-picker-cancel');\n var renderColorInput = function (spec, sharedBackstage, colorInputBackstage) {\n var pField = FormField.parts.field({\n factory: Input,\n inputClasses: ['tox-textfield'],\n onSetValue: function (c) {\n return Invalidating.run(c).get(noop);\n },\n inputBehaviours: derive$1([\n Disabling.config({ disabled: sharedBackstage.providers.isDisabled }),\n receivingConfig(),\n Tabstopping.config({}),\n Invalidating.config({\n invalidClass: 'tox-textbox-field-invalid',\n getRoot: function (comp) {\n return parent(comp.element);\n },\n notify: {\n onValid: function (comp) {\n var val = Representing.getValue(comp);\n emitWith(comp, colorInputChangeEvent, { color: val });\n }\n },\n validator: {\n validateOnLoad: false,\n validate: function (input) {\n var inputValue = Representing.getValue(input);\n if (inputValue.length === 0) {\n return Future.pure(Result.value(true));\n } else {\n var span = SugarElement.fromTag('span');\n set$7(span, 'background-color', inputValue);\n var res = getRaw(span, 'background-color').fold(function () {\n return Result.error('blah');\n }, function (_) {\n return Result.value(inputValue);\n });\n return Future.pure(res);\n }\n }\n }\n })\n ]),\n selectOnFocus: false\n });\n var pLabel = spec.label.map(function (label) {\n return renderLabel$2(label, sharedBackstage.providers);\n });\n var emitSwatchChange = function (colorBit, value) {\n emitWith(colorBit, colorSwatchChangeEvent, { value: value });\n };\n var onItemAction = function (comp, value) {\n memColorButton.getOpt(comp).each(function (colorBit) {\n if (value === 'custom') {\n colorInputBackstage.colorPicker(function (valueOpt) {\n valueOpt.fold(function () {\n return emit(colorBit, colorPickerCancelEvent);\n }, function (value) {\n emitSwatchChange(colorBit, value);\n addColor(value);\n });\n }, '#ffffff');\n } else if (value === 'remove') {\n emitSwatchChange(colorBit, '');\n } else {\n emitSwatchChange(colorBit, value);\n }\n });\n };\n var memColorButton = record(renderPanelButton({\n dom: {\n tag: 'span',\n attributes: { 'aria-label': sharedBackstage.providers.translate('Color swatch') }\n },\n layouts: {\n onRtl: function () {\n return [\n southwest$2,\n southeast$2,\n south$2\n ];\n },\n onLtr: function () {\n return [\n southeast$2,\n southwest$2,\n south$2\n ];\n }\n },\n components: [],\n fetch: getFetch$1(colorInputBackstage.getColors(), colorInputBackstage.hasCustomColors()),\n columns: colorInputBackstage.getColorCols(),\n presets: 'color',\n onItemAction: onItemAction\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, function (comp, se) {\n memColorButton.getOpt(comp).each(function (colorButton) {\n set$7(colorButton.element, 'background-color', se.event.color);\n });\n emitWith(comp, formChangeEvent, { name: spec.name });\n }),\n run$1(colorSwatchChangeEvent, function (comp, se) {\n FormField.getField(comp).each(function (field) {\n Representing.setValue(field, se.event.value);\n Composing.getCurrent(comp).each(Focusing.focus);\n });\n }),\n run$1(colorPickerCancelEvent, function (comp, _se) {\n FormField.getField(comp).each(function (_field) {\n Composing.getCurrent(comp).each(Focusing.focus);\n });\n })\n ])])\n });\n };\n\n var labelPart = optional({\n schema: [required$1('dom')],\n name: 'label'\n });\n var edgePart = function (name) {\n return optional({\n name: '' + name + '-edge',\n overrides: function (detail) {\n var action = detail.model.manager.edgeActions[name];\n return action.fold(function () {\n return {};\n }, function (a) {\n return {\n events: derive$2([\n runActionExtra(touchstart(), function (comp, se, d) {\n return a(comp, d);\n }, [detail]),\n runActionExtra(mousedown(), function (comp, se, d) {\n return a(comp, d);\n }, [detail]),\n runActionExtra(mousemove(), function (comp, se, det) {\n if (det.mouseIsDown.get()) {\n a(comp, det);\n }\n }, [detail])\n ])\n };\n });\n }\n });\n };\n var tlEdgePart = edgePart('top-left');\n var tedgePart = edgePart('top');\n var trEdgePart = edgePart('top-right');\n var redgePart = edgePart('right');\n var brEdgePart = edgePart('bottom-right');\n var bedgePart = edgePart('bottom');\n var blEdgePart = edgePart('bottom-left');\n var ledgePart = edgePart('left');\n var thumbPart = required({\n name: 'thumb',\n defaults: constant$1({ dom: { styles: { position: 'absolute' } } }),\n overrides: function (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 var spectrumPart = required({\n schema: [customField('mouseIsDown', function () {\n return Cell(false);\n })],\n name: 'spectrum',\n overrides: function (detail) {\n var modelDetail = detail.model;\n var model = modelDetail.manager;\n var setValueFrom = function (component, simulatedEvent) {\n return model.getValueFromEvent(simulatedEvent).map(function (value) {\n return model.setValueFrom(component, detail, value);\n });\n };\n return {\n behaviours: derive$1([\n Keying.config({\n mode: 'special',\n onLeft: function (spectrum) {\n return model.onLeft(spectrum, detail);\n },\n onRight: function (spectrum) {\n return model.onRight(spectrum, detail);\n },\n onUp: function (spectrum) {\n return model.onUp(spectrum, detail);\n },\n onDown: function (spectrum) {\n return model.onDown(spectrum, detail);\n }\n }),\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(), function (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 var _sliderChangeEvent = 'slider.change.value';\n var sliderChangeEvent = constant$1(_sliderChangeEvent);\n var isTouchEvent$2 = function (evt) {\n return evt.type.indexOf('touch') !== -1;\n };\n var getEventSource = function (simulatedEvent) {\n var evt = simulatedEvent.event.raw;\n if (isTouchEvent$2(evt)) {\n var touchEvent = evt;\n return touchEvent.touches !== undefined && touchEvent.touches.length === 1 ? Optional.some(touchEvent.touches[0]).map(function (t) {\n return SugarPosition(t.clientX, t.clientY);\n }) : Optional.none();\n } else {\n var mouseEvent = evt;\n return mouseEvent.clientX !== undefined ? Optional.some(mouseEvent).map(function (me) {\n return SugarPosition(me.clientX, me.clientY);\n }) : Optional.none();\n }\n };\n\n var t = 'top', r = 'right', b = 'bottom', l = 'left';\n var minX = function (detail) {\n return detail.model.minX;\n };\n var minY = function (detail) {\n return detail.model.minY;\n };\n var min1X = function (detail) {\n return detail.model.minX - 1;\n };\n var min1Y = function (detail) {\n return detail.model.minY - 1;\n };\n var maxX = function (detail) {\n return detail.model.maxX;\n };\n var maxY = function (detail) {\n return detail.model.maxY;\n };\n var max1X = function (detail) {\n return detail.model.maxX + 1;\n };\n var max1Y = function (detail) {\n return detail.model.maxY + 1;\n };\n var range = function (detail, max, min) {\n return max(detail) - min(detail);\n };\n var xRange = function (detail) {\n return range(detail, maxX, minX);\n };\n var yRange = function (detail) {\n return range(detail, maxY, minY);\n };\n var halfX = function (detail) {\n return xRange(detail) / 2;\n };\n var halfY = function (detail) {\n return yRange(detail) / 2;\n };\n var step = function (detail) {\n return detail.stepSize;\n };\n var snap = function (detail) {\n return detail.snapToGrid;\n };\n var snapStart = function (detail) {\n return detail.snapStart;\n };\n var rounded = function (detail) {\n return detail.rounded;\n };\n var hasEdge = function (detail, edgeName) {\n return detail[edgeName + '-edge'] !== undefined;\n };\n var hasLEdge = function (detail) {\n return hasEdge(detail, l);\n };\n var hasREdge = function (detail) {\n return hasEdge(detail, r);\n };\n var hasTEdge = function (detail) {\n return hasEdge(detail, t);\n };\n var hasBEdge = function (detail) {\n return hasEdge(detail, b);\n };\n var currentValue = function (detail) {\n return detail.model.value.get();\n };\n\n var xValue = function (x) {\n return { x: x };\n };\n var yValue = function (y) {\n return { y: y };\n };\n var xyValue = function (x, y) {\n return {\n x: x,\n y: y\n };\n };\n var fireSliderChange$3 = function (component, value) {\n emitWith(component, sliderChangeEvent(), { value: value });\n };\n var setToTLEdgeXY = function (edge, detail) {\n fireSliderChange$3(edge, xyValue(min1X(detail), min1Y(detail)));\n };\n var setToTEdge = function (edge, detail) {\n fireSliderChange$3(edge, yValue(min1Y(detail)));\n };\n var setToTEdgeXY = function (edge, detail) {\n fireSliderChange$3(edge, xyValue(halfX(detail), min1Y(detail)));\n };\n var setToTREdgeXY = function (edge, detail) {\n fireSliderChange$3(edge, xyValue(max1X(detail), min1Y(detail)));\n };\n var setToREdge = function (edge, detail) {\n fireSliderChange$3(edge, xValue(max1X(detail)));\n };\n var setToREdgeXY = function (edge, detail) {\n fireSliderChange$3(edge, xyValue(max1X(detail), halfY(detail)));\n };\n var setToBREdgeXY = function (edge, detail) {\n fireSliderChange$3(edge, xyValue(max1X(detail), max1Y(detail)));\n };\n var setToBEdge = function (edge, detail) {\n fireSliderChange$3(edge, yValue(max1Y(detail)));\n };\n var setToBEdgeXY = function (edge, detail) {\n fireSliderChange$3(edge, xyValue(halfX(detail), max1Y(detail)));\n };\n var setToBLEdgeXY = function (edge, detail) {\n fireSliderChange$3(edge, xyValue(min1X(detail), max1Y(detail)));\n };\n var setToLEdge = function (edge, detail) {\n fireSliderChange$3(edge, xValue(min1X(detail)));\n };\n var setToLEdgeXY = function (edge, detail) {\n fireSliderChange$3(edge, xyValue(min1X(detail), halfY(detail)));\n };\n\n var reduceBy = function (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 var increaseBy = function (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 var capValue = function (value, min, max) {\n return Math.max(min, Math.min(max, value));\n };\n var snapValueOf = function (value, min, max, step, snapStart) {\n return snapStart.fold(function () {\n var initValue = value - min;\n var extraValue = Math.round(initValue / step) * step;\n return capValue(min + extraValue, min - 1, max + 1);\n }, function (start) {\n var remainder = (value - start) % step;\n var adjustment = Math.round(remainder / step);\n var rawSteps = Math.floor((value - start) / step);\n var maxSteps = Math.floor((max - start) / step);\n var numSteps = Math.min(maxSteps, rawSteps + adjustment);\n var r = start + numSteps * step;\n return Math.max(start, r);\n });\n };\n var findOffsetOf = function (value, min, max) {\n return Math.min(max, Math.max(value, min)) - min;\n };\n var findValueOf = function (args) {\n var min = args.min, max = args.max, range = args.range, value = args.value, step = args.step, snap = args.snap, snapStart = args.snapStart, rounded = args.rounded, hasMinEdge = args.hasMinEdge, hasMaxEdge = args.hasMaxEdge, minBound = args.minBound, maxBound = args.maxBound, screenRange = args.screenRange;\n var capMin = hasMinEdge ? min - 1 : min;\n var capMax = hasMaxEdge ? max + 1 : max;\n if (value < minBound) {\n return capMin;\n } else if (value > maxBound) {\n return capMax;\n } else {\n var offset = findOffsetOf(value, minBound, maxBound);\n var 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 var findOffsetOfValue$2 = function (args) {\n var min = args.min, max = args.max, range = args.range, value = args.value, hasMinEdge = args.hasMinEdge, hasMaxEdge = args.hasMaxEdge, maxBound = args.maxBound, maxOffset = args.maxOffset, centerMinEdge = args.centerMinEdge, centerMaxEdge = args.centerMaxEdge;\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 var top = 'top', right = 'right', bottom = 'bottom', left = 'left', width = 'width', height = 'height';\n var getBounds = function (component) {\n return component.element.dom.getBoundingClientRect();\n };\n var getBoundsProperty = function (bounds, property) {\n return bounds[property];\n };\n var getMinXBounds = function (component) {\n var bounds = getBounds(component);\n return getBoundsProperty(bounds, left);\n };\n var getMaxXBounds = function (component) {\n var bounds = getBounds(component);\n return getBoundsProperty(bounds, right);\n };\n var getMinYBounds = function (component) {\n var bounds = getBounds(component);\n return getBoundsProperty(bounds, top);\n };\n var getMaxYBounds = function (component) {\n var bounds = getBounds(component);\n return getBoundsProperty(bounds, bottom);\n };\n var getXScreenRange = function (component) {\n var bounds = getBounds(component);\n return getBoundsProperty(bounds, width);\n };\n var getYScreenRange = function (component) {\n var bounds = getBounds(component);\n return getBoundsProperty(bounds, height);\n };\n var getCenterOffsetOf = function (componentMinEdge, componentMaxEdge, spectrumMinEdge) {\n return (componentMinEdge + componentMaxEdge) / 2 - spectrumMinEdge;\n };\n var getXCenterOffSetOf = function (component, spectrum) {\n var componentBounds = getBounds(component);\n var spectrumBounds = getBounds(spectrum);\n var componentMinEdge = getBoundsProperty(componentBounds, left);\n var componentMaxEdge = getBoundsProperty(componentBounds, right);\n var spectrumMinEdge = getBoundsProperty(spectrumBounds, left);\n return getCenterOffsetOf(componentMinEdge, componentMaxEdge, spectrumMinEdge);\n };\n var getYCenterOffSetOf = function (component, spectrum) {\n var componentBounds = getBounds(component);\n var spectrumBounds = getBounds(spectrum);\n var componentMinEdge = getBoundsProperty(componentBounds, top);\n var componentMaxEdge = getBoundsProperty(componentBounds, bottom);\n var spectrumMinEdge = getBoundsProperty(spectrumBounds, top);\n return getCenterOffsetOf(componentMinEdge, componentMaxEdge, spectrumMinEdge);\n };\n\n var fireSliderChange$2 = function (spectrum, value) {\n emitWith(spectrum, sliderChangeEvent(), { value: value });\n };\n var sliderValue$2 = function (x) {\n return { x: x };\n };\n var findValueOfOffset$1 = function (spectrum, detail, left) {\n var 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 var setValueFrom$2 = function (spectrum, detail, value) {\n var xValue = findValueOfOffset$1(spectrum, detail, value);\n var sliderVal = sliderValue$2(xValue);\n fireSliderChange$2(spectrum, sliderVal);\n return xValue;\n };\n var setToMin$2 = function (spectrum, detail) {\n var min = minX(detail);\n fireSliderChange$2(spectrum, sliderValue$2(min));\n };\n var setToMax$2 = function (spectrum, detail) {\n var max = maxX(detail);\n fireSliderChange$2(spectrum, sliderValue$2(max));\n };\n var moveBy$2 = function (direction, spectrum, detail) {\n var f = direction > 0 ? increaseBy : reduceBy;\n var xValue = f(currentValue(detail).x, minX(detail), maxX(detail), step(detail));\n fireSliderChange$2(spectrum, sliderValue$2(xValue));\n return Optional.some(xValue);\n };\n var handleMovement$2 = function (direction) {\n return function (spectrum, detail) {\n return moveBy$2(direction, spectrum, detail).map(always);\n };\n };\n var getValueFromEvent$2 = function (simulatedEvent) {\n var pos = getEventSource(simulatedEvent);\n return pos.map(function (p) {\n return p.left;\n });\n };\n var findOffsetOfValue$1 = function (spectrum, detail, value, minEdge, maxEdge) {\n var minOffset = 0;\n var maxOffset = getXScreenRange(spectrum);\n var centerMinEdge = minEdge.bind(function (edge) {\n return Optional.some(getXCenterOffSetOf(edge, spectrum));\n }).getOr(minOffset);\n var centerMaxEdge = maxEdge.bind(function (edge) {\n return Optional.some(getXCenterOffSetOf(edge, spectrum));\n }).getOr(maxOffset);\n var args = {\n min: minX(detail),\n max: maxX(detail),\n range: xRange(detail),\n value: value,\n hasMinEdge: hasLEdge(detail),\n hasMaxEdge: hasREdge(detail),\n minBound: getMinXBounds(spectrum),\n minOffset: minOffset,\n maxBound: getMaxXBounds(spectrum),\n maxOffset: maxOffset,\n centerMinEdge: centerMinEdge,\n centerMaxEdge: centerMaxEdge\n };\n return findOffsetOfValue$2(args);\n };\n var findPositionOfValue$1 = function (slider, spectrum, value, minEdge, maxEdge, detail) {\n var offset = findOffsetOfValue$1(spectrum, detail, value, minEdge, maxEdge);\n return getMinXBounds(spectrum) - getMinXBounds(slider) + offset;\n };\n var setPositionFromValue$2 = function (slider, thumb, detail, edges) {\n var value = currentValue(detail);\n var pos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value.x, edges.getLeftEdge(slider), edges.getRightEdge(slider), detail);\n var thumbRadius = get$a(thumb.element) / 2;\n set$7(thumb.element, 'left', pos - thumbRadius + 'px');\n };\n var onLeft$2 = handleMovement$2(-1);\n var onRight$2 = handleMovement$2(1);\n var onUp$2 = Optional.none;\n var onDown$2 = Optional.none;\n var 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 var fireSliderChange$1 = function (spectrum, value) {\n emitWith(spectrum, sliderChangeEvent(), { value: value });\n };\n var sliderValue$1 = function (y) {\n return { y: y };\n };\n var findValueOfOffset = function (spectrum, detail, top) {\n var 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 var setValueFrom$1 = function (spectrum, detail, value) {\n var yValue = findValueOfOffset(spectrum, detail, value);\n var sliderVal = sliderValue$1(yValue);\n fireSliderChange$1(spectrum, sliderVal);\n return yValue;\n };\n var setToMin$1 = function (spectrum, detail) {\n var min = minY(detail);\n fireSliderChange$1(spectrum, sliderValue$1(min));\n };\n var setToMax$1 = function (spectrum, detail) {\n var max = maxY(detail);\n fireSliderChange$1(spectrum, sliderValue$1(max));\n };\n var moveBy$1 = function (direction, spectrum, detail) {\n var f = direction > 0 ? increaseBy : reduceBy;\n var yValue = f(currentValue(detail).y, minY(detail), maxY(detail), step(detail));\n fireSliderChange$1(spectrum, sliderValue$1(yValue));\n return Optional.some(yValue);\n };\n var handleMovement$1 = function (direction) {\n return function (spectrum, detail) {\n return moveBy$1(direction, spectrum, detail).map(always);\n };\n };\n var getValueFromEvent$1 = function (simulatedEvent) {\n var pos = getEventSource(simulatedEvent);\n return pos.map(function (p) {\n return p.top;\n });\n };\n var findOffsetOfValue = function (spectrum, detail, value, minEdge, maxEdge) {\n var minOffset = 0;\n var maxOffset = getYScreenRange(spectrum);\n var centerMinEdge = minEdge.bind(function (edge) {\n return Optional.some(getYCenterOffSetOf(edge, spectrum));\n }).getOr(minOffset);\n var centerMaxEdge = maxEdge.bind(function (edge) {\n return Optional.some(getYCenterOffSetOf(edge, spectrum));\n }).getOr(maxOffset);\n var args = {\n min: minY(detail),\n max: maxY(detail),\n range: yRange(detail),\n value: value,\n hasMinEdge: hasTEdge(detail),\n hasMaxEdge: hasBEdge(detail),\n minBound: getMinYBounds(spectrum),\n minOffset: minOffset,\n maxBound: getMaxYBounds(spectrum),\n maxOffset: maxOffset,\n centerMinEdge: centerMinEdge,\n centerMaxEdge: centerMaxEdge\n };\n return findOffsetOfValue$2(args);\n };\n var findPositionOfValue = function (slider, spectrum, value, minEdge, maxEdge, detail) {\n var offset = findOffsetOfValue(spectrum, detail, value, minEdge, maxEdge);\n return getMinYBounds(spectrum) - getMinYBounds(slider) + offset;\n };\n var setPositionFromValue$1 = function (slider, thumb, detail, edges) {\n var value = currentValue(detail);\n var pos = findPositionOfValue(slider, edges.getSpectrum(slider), value.y, edges.getTopEdge(slider), edges.getBottomEdge(slider), detail);\n var thumbRadius = get$b(thumb.element) / 2;\n set$7(thumb.element, 'top', pos - thumbRadius + 'px');\n };\n var onLeft$1 = Optional.none;\n var onRight$1 = Optional.none;\n var onUp$1 = handleMovement$1(-1);\n var onDown$1 = handleMovement$1(1);\n var 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 var fireSliderChange = function (spectrum, value) {\n emitWith(spectrum, sliderChangeEvent(), { value: value });\n };\n var sliderValue = function (x, y) {\n return {\n x: x,\n y: y\n };\n };\n var setValueFrom = function (spectrum, detail, value) {\n var xValue = findValueOfOffset$1(spectrum, detail, value.left);\n var yValue = findValueOfOffset(spectrum, detail, value.top);\n var val = sliderValue(xValue, yValue);\n fireSliderChange(spectrum, val);\n return val;\n };\n var moveBy = function (direction, isVerticalMovement, spectrum, detail) {\n var f = direction > 0 ? increaseBy : reduceBy;\n var xValue = isVerticalMovement ? currentValue(detail).x : f(currentValue(detail).x, minX(detail), maxX(detail), step(detail));\n var yValue = !isVerticalMovement ? currentValue(detail).y : f(currentValue(detail).y, minY(detail), maxY(detail), step(detail));\n fireSliderChange(spectrum, sliderValue(xValue, yValue));\n return Optional.some(xValue);\n };\n var handleMovement = function (direction, isVerticalMovement) {\n return function (spectrum, detail) {\n return moveBy(direction, isVerticalMovement, spectrum, detail).map(always);\n };\n };\n var setToMin = function (spectrum, detail) {\n var mX = minX(detail);\n var mY = minY(detail);\n fireSliderChange(spectrum, sliderValue(mX, mY));\n };\n var setToMax = function (spectrum, detail) {\n var mX = maxX(detail);\n var mY = maxY(detail);\n fireSliderChange(spectrum, sliderValue(mX, mY));\n };\n var getValueFromEvent = function (simulatedEvent) {\n return getEventSource(simulatedEvent);\n };\n var setPositionFromValue = function (slider, thumb, detail, edges) {\n var value = currentValue(detail);\n var xPos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value.x, edges.getLeftEdge(slider), edges.getRightEdge(slider), detail);\n var yPos = findPositionOfValue(slider, edges.getSpectrum(slider), value.y, edges.getTopEdge(slider), edges.getBottomEdge(slider), detail);\n var thumbXRadius = get$a(thumb.element) / 2;\n var thumbYRadius = get$b(thumb.element) / 2;\n set$7(thumb.element, 'left', xPos - thumbXRadius + 'px');\n set$7(thumb.element, 'top', yPos - thumbYRadius + 'px');\n };\n var onLeft = handleMovement(-1, false);\n var onRight = handleMovement(1, false);\n var onUp = handleMovement(-1, true);\n var onDown = handleMovement(1, true);\n var 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 var SliderSchema = [\n defaulted('stepSize', 1),\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('snapStart'),\n requiredOf('model', choose$1('mode', {\n x: [\n defaulted('minX', 0),\n defaulted('maxX', 100),\n customField('value', function (spec) {\n return Cell(spec.mode.minX);\n }),\n required$1('getInitialValue'),\n output$1('manager', HorizontalModel)\n ],\n y: [\n defaulted('minY', 0),\n defaulted('maxY', 100),\n customField('value', function (spec) {\n return Cell(spec.mode.minY);\n }),\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', function (spec) {\n return Cell({\n x: spec.mode.minX,\n y: spec.mode.minY\n });\n }),\n required$1('getInitialValue'),\n output$1('manager', TwoDModel)\n ]\n })),\n field('sliderBehaviours', [\n Keying,\n Representing\n ]),\n customField('mouseIsDown', function () {\n return Cell(false);\n })\n ];\n\n var sketch$2 = function (detail, components, _spec, _externals) {\n var _a;\n var getThumb = function (component) {\n return getPartOrDie(component, detail, 'thumb');\n };\n var getSpectrum = function (component) {\n return getPartOrDie(component, detail, 'spectrum');\n };\n var getLeftEdge = function (component) {\n return getPart(component, detail, 'left-edge');\n };\n var getRightEdge = function (component) {\n return getPart(component, detail, 'right-edge');\n };\n var getTopEdge = function (component) {\n return getPart(component, detail, 'top-edge');\n };\n var getBottomEdge = function (component) {\n return getPart(component, detail, 'bottom-edge');\n };\n var modelDetail = detail.model;\n var model = modelDetail.manager;\n var refresh = function (slider, thumb) {\n model.setPositionFromValue(slider, thumb, detail, {\n getLeftEdge: getLeftEdge,\n getRightEdge: getRightEdge,\n getTopEdge: getTopEdge,\n getBottomEdge: getBottomEdge,\n getSpectrum: getSpectrum\n });\n };\n var setValue = function (slider, newValue) {\n modelDetail.value.set(newValue);\n var thumb = getThumb(slider);\n refresh(slider, thumb);\n };\n var changeValue = function (slider, newValue) {\n setValue(slider, newValue);\n var thumb = getThumb(slider);\n detail.onChange(slider, thumb, newValue);\n return Optional.some(true);\n };\n var resetToMin = function (slider) {\n model.setToMin(slider, detail);\n };\n var resetToMax = function (slider) {\n model.setToMax(slider, detail);\n };\n var choose = function (slider) {\n var fireOnChoose = function () {\n getPart(slider, detail, 'thumb').each(function (thumb) {\n var value = modelDetail.value.get();\n detail.onChoose(slider, thumb, value);\n });\n };\n var wasDown = detail.mouseIsDown.get();\n detail.mouseIsDown.set(false);\n if (wasDown) {\n fireOnChoose();\n }\n };\n var onDragStart = function (slider, simulatedEvent) {\n simulatedEvent.stop();\n detail.mouseIsDown.set(true);\n detail.onDragStart(slider, getThumb(slider));\n };\n var onDragEnd = function (slider, simulatedEvent) {\n simulatedEvent.stop();\n detail.onDragEnd(slider, getThumb(slider));\n choose(slider);\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: augment(detail.sliderBehaviours, [\n Keying.config({\n mode: 'special',\n focusIn: function (slider) {\n return getPart(slider, detail, 'spectrum').map(Keying.focusIn).map(always);\n }\n }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function (_) {\n return modelDetail.value.get();\n }\n }\n }),\n Receiving.config({ channels: (_a = {}, _a[mouseReleased()] = { onReceive: choose }, _a) })\n ]),\n events: derive$2([\n run$1(sliderChangeEvent(), function (slider, simulatedEvent) {\n changeValue(slider, simulatedEvent.event.value);\n }),\n runOnAttached(function (slider, _simulatedEvent) {\n var getInitial = modelDetail.getInitialValue();\n modelDetail.value.set(getInitial);\n var thumb = getThumb(slider);\n refresh(slider, thumb);\n var 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(), onDragStart),\n run$1(mouseup(), onDragEnd)\n ]),\n apis: {\n resetToMin: resetToMin,\n resetToMax: resetToMax,\n setValue: setValue,\n refresh: refresh\n },\n domModification: { styles: { position: 'relative' } }\n };\n };\n\n var Slider = composite({\n name: 'Slider',\n configFields: SliderSchema,\n partFields: SliderParts,\n factory: sketch$2,\n apis: {\n setValue: function (apis, slider, value) {\n apis.setValue(slider, value);\n },\n resetToMin: function (apis, slider) {\n apis.resetToMin(slider);\n },\n resetToMax: function (apis, slider) {\n apis.resetToMax(slider);\n },\n refresh: function (apis, slider) {\n apis.refresh(slider);\n }\n }\n });\n\n var fieldsUpdate = generate$6('rgb-hex-update');\n var sliderUpdate = generate$6('slider-update');\n var paletteUpdate = generate$6('palette-update');\n\n var sliderFactory = function (translate, getClass) {\n var spectrum = Slider.parts.spectrum({\n dom: {\n tag: 'div',\n classes: [getClass('hue-slider-spectrum')],\n attributes: { role: 'presentation' }\n }\n });\n var 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: { role: 'presentation' }\n },\n rounded: false,\n model: {\n mode: 'y',\n getInitialValue: constant$1({ y: 0 })\n },\n components: [\n spectrum,\n thumb\n ],\n sliderBehaviours: derive$1([Focusing.config({})]),\n onChange: function (slider, _thumb, value) {\n emitWith(slider, sliderUpdate, { value: value });\n }\n });\n };\n\n var owner$1 = 'form';\n var schema$i = [field('formBehaviours', [Representing])];\n var getPartName$1 = function (name) {\n return '';\n };\n var sketch$1 = function (fSpec) {\n var parts = function () {\n var record = [];\n var field = function (name, config) {\n record.push(name);\n return generateOne$1(owner$1, getPartName$1(name), config);\n };\n return {\n field: field,\n record: constant$1(record)\n };\n }();\n var spec = fSpec(parts);\n var partNames = parts.record();\n var fieldParts = map$2(partNames, function (n) {\n return required({\n name: n,\n pname: getPartName$1(n)\n });\n });\n return composite$1(owner$1, schema$i, fieldParts, make$4, spec);\n };\n var toResult = function (o, e) {\n return o.fold(function () {\n return Result.error(e);\n }, Result.value);\n };\n var make$4 = function (detail, components) {\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: augment(detail.formBehaviours, [Representing.config({\n store: {\n mode: 'manual',\n getValue: function (form) {\n var resPs = getAllParts(form, detail);\n return map$1(resPs, function (resPThunk, pName) {\n return resPThunk().bind(function (v) {\n var 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 },\n setValue: function (form, values) {\n each(values, function (newValue, key) {\n getPart(form, detail, key).each(function (wrapper) {\n Composing.getCurrent(wrapper).each(function (field) {\n Representing.setValue(field, newValue);\n });\n });\n });\n }\n }\n })]),\n apis: {\n getField: function (form, key) {\n return getPart(form, detail, key).bind(Composing.getCurrent);\n }\n }\n };\n };\n var Form = {\n getField: makeApi(function (apis, component, key) {\n return apis.getField(component, key);\n }),\n sketch: sketch$1\n };\n\n var validInput = generate$6('valid-input');\n var invalidInput = generate$6('invalid-input');\n var validatingInput = generate$6('validating-input');\n var translatePrefix = 'colorcustom.rgb.';\n var rgbFormFactory = function (translate, getClass, onValidHexx, onInvalidHexx) {\n var invalidation = function (label, isValid) {\n return Invalidating.config({\n invalidClass: getClass('invalid'),\n notify: {\n onValidate: function (comp) {\n emitWith(comp, validatingInput, { type: label });\n },\n onValid: function (comp) {\n emitWith(comp, validInput, {\n type: label,\n value: Representing.getValue(comp)\n });\n },\n onInvalid: function (comp) {\n emitWith(comp, invalidInput, {\n type: label,\n value: Representing.getValue(comp)\n });\n }\n },\n validator: {\n validate: function (comp) {\n var value = Representing.getValue(comp);\n var res = isValid(value) ? Result.value(true) : Result.error(translate('aria.input.invalid'));\n return Future.pure(res);\n },\n validateOnLoad: false\n }\n });\n };\n var renderTextField = function (isValid, name, label, description, data) {\n var helptext = translate(translatePrefix + 'range');\n var pLabel = FormField.parts.label({\n dom: {\n tag: 'label',\n innerHtml: label,\n attributes: { 'aria-label': description }\n }\n });\n var pField = FormField.parts.field({\n data: data,\n factory: Input,\n inputAttributes: __assign({ type: 'text' }, name === 'hex' ? { 'aria-live': 'polite' } : {}),\n inputClasses: [getClass('textfield')],\n inputBehaviours: derive$1([\n invalidation(name, isValid),\n Tabstopping.config({})\n ]),\n onSetValue: function (input) {\n if (Invalidating.isInvalid(input)) {\n var run = Invalidating.run(input);\n run.get(noop);\n }\n }\n });\n var comps = [\n pLabel,\n pField\n ];\n var concats = name !== 'hex' ? [FormField.parts['aria-descriptor']({ text: helptext })] : [];\n var components = comps.concat(concats);\n return {\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' }\n },\n components: components\n };\n };\n var copyRgbToHex = function (form, rgba) {\n var hex = fromRgba(rgba);\n Form.getField(form, 'hex').each(function (hexField) {\n if (!Focusing.isFocused(hexField)) {\n Representing.setValue(form, { hex: hex.value });\n }\n });\n return hex;\n };\n var copyRgbToForm = function (form, rgb) {\n var red = rgb.red;\n var green = rgb.green;\n var blue = rgb.blue;\n Representing.setValue(form, {\n red: red,\n green: green,\n blue: blue\n });\n };\n var memPreview = record({\n dom: {\n tag: 'div',\n classes: [getClass('rgba-preview')],\n styles: { 'background-color': 'white' },\n attributes: { role: 'presentation' }\n }\n });\n var updatePreview = function (anyInSystem, hex) {\n memPreview.getOpt(anyInSystem).each(function (preview) {\n set$7(preview.element, 'background-color', '#' + hex.value);\n });\n };\n var factory = function () {\n var 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 var copyHexToRgb = function (form, hex) {\n var rgb = fromHex(hex);\n copyRgbToForm(form, rgb);\n setValueRgb(rgb);\n };\n var get = function (prop) {\n return state[prop].get();\n };\n var set = function (prop, value) {\n state[prop].set(value);\n };\n var getValueRgb = function () {\n return get('red').bind(function (red) {\n return get('green').bind(function (green) {\n return get('blue').map(function (blue) {\n return rgbaColour(red, green, blue, 1);\n });\n });\n });\n };\n var setValueRgb = function (rgb) {\n var red = rgb.red;\n var green = rgb.green;\n var blue = rgb.blue;\n set('red', Optional.some(red));\n set('green', Optional.some(green));\n set('blue', Optional.some(blue));\n };\n var onInvalidInput = function (form, simulatedEvent) {\n var data = simulatedEvent.event;\n if (data.type !== 'hex') {\n set(data.type, Optional.none());\n } else {\n onInvalidHexx(form);\n }\n };\n var onValidHex = function (form, value) {\n onValidHexx(form);\n var hex = hexColour(value);\n set('hex', Optional.some(value));\n var rgb = fromHex(hex);\n copyRgbToForm(form, rgb);\n setValueRgb(rgb);\n emitWith(form, fieldsUpdate, { hex: hex });\n updatePreview(form, hex);\n };\n var onValidRgb = function (form, prop, value) {\n var val = parseInt(value, 10);\n set(prop, Optional.some(val));\n getValueRgb().each(function (rgb) {\n var hex = copyRgbToHex(form, rgb);\n emitWith(form, fieldsUpdate, { hex: hex });\n updatePreview(form, hex);\n });\n };\n var isHexInputEvent = function (data) {\n return data.type === 'hex';\n };\n var onValidInput = function (form, simulatedEvent) {\n var data = simulatedEvent.event;\n if (isHexInputEvent(data)) {\n onValidHex(form, data.value);\n } else {\n onValidRgb(form, data.type, data.value);\n }\n };\n var formPartStrings = function (key) {\n return {\n label: translate(translatePrefix + key + '.label'),\n description: translate(translatePrefix + key + '.description')\n };\n };\n var redStrings = formPartStrings('red');\n var greenStrings = formPartStrings('green');\n var blueStrings = formPartStrings('blue');\n var hexStrings = formPartStrings('hex');\n return deepMerge(Form.sketch(function (parts) {\n return {\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 }), {\n apis: {\n updateHex: function (form, hex) {\n Representing.setValue(form, { hex: hex.value });\n copyHexToRgb(form, hex);\n updatePreview(form, hex);\n }\n }\n });\n };\n var rgbFormSketcher = single({\n factory: factory,\n name: 'RgbForm',\n configFields: [],\n apis: {\n updateHex: function (apis, form, hex) {\n apis.updateHex(form, hex);\n }\n },\n extraApis: {}\n });\n return rgbFormSketcher;\n };\n\n var paletteFactory = function (_translate, getClass) {\n var spectrumPart = Slider.parts.spectrum({\n dom: {\n tag: 'canvas',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette-spectrum')]\n }\n });\n var thumbPart = Slider.parts.thumb({\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette-thumb')],\n innerHtml: '
    '\n }\n });\n var setColour = function (canvas, rgba) {\n var width = canvas.width, height = canvas.height;\n var ctx = canvas.getContext('2d');\n if (ctx === null) {\n return;\n }\n ctx.fillStyle = rgba;\n ctx.fillRect(0, 0, width, height);\n var 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 var 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 var setPaletteHue = function (slider, hue) {\n var canvas = slider.components()[0].element.dom;\n var hsv = hsvColour(hue, 100, 100);\n var rgba = fromHsv(hsv);\n setColour(canvas, toString(rgba));\n };\n var setPaletteThumb = function (slider, hex) {\n var hsv = fromRgb(fromHex(hex));\n Slider.setValue(slider, {\n x: hsv.saturation,\n y: 100 - hsv.value\n });\n };\n var factory = function (_detail) {\n var getInitialValue = constant$1({\n x: 0,\n y: 0\n });\n var onChange = function (slider, _thumb, value) {\n emitWith(slider, paletteUpdate, { value: value });\n };\n var onInit = function (_slider, _thumb, spectrum, _value) {\n setColour(spectrum.element.dom, toString(red));\n };\n var sliderBehaviours = derive$1([\n Composing.config({ find: Optional.some }),\n Focusing.config({})\n ]);\n return Slider.sketch({\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' },\n classes: [getClass('sv-palette')]\n },\n model: {\n mode: 'xy',\n getInitialValue: getInitialValue\n },\n rounded: false,\n components: [\n spectrumPart,\n thumbPart\n ],\n onChange: onChange,\n onInit: onInit,\n sliderBehaviours: sliderBehaviours\n });\n };\n var saturationBrightnessPaletteSketcher = single({\n factory: factory,\n name: 'SaturationBrightnessPalette',\n configFields: [],\n apis: {\n setHue: function (_apis, slider, hue) {\n setPaletteHue(slider, hue);\n },\n setThumb: function (_apis, slider, hex) {\n setPaletteThumb(slider, hex);\n }\n },\n extraApis: {}\n });\n return saturationBrightnessPaletteSketcher;\n };\n\n var makeFactory = function (translate, getClass) {\n var factory = function (detail) {\n var rgbForm = rgbFormFactory(translate, getClass, detail.onValidHex, detail.onInvalidHex);\n var sbPalette = paletteFactory(translate, getClass);\n var hueSliderToDegrees = function (hue) {\n return (100 - hue) / 100 * 360;\n };\n var hueDegreesToSlider = function (hue) {\n return 100 - hue / 360 * 100;\n };\n var state = {\n paletteRgba: Cell(red),\n paletteHue: Cell(0)\n };\n var memSlider = record(sliderFactory(translate, getClass));\n var memPalette = record(sbPalette.sketch({}));\n var memRgb = record(rgbForm.sketch({}));\n var updatePalette = function (anyInSystem, _hex, hue) {\n memPalette.getOpt(anyInSystem).each(function (palette) {\n sbPalette.setHue(palette, hue);\n });\n };\n var updateFields = function (anyInSystem, hex) {\n memRgb.getOpt(anyInSystem).each(function (form) {\n rgbForm.updateHex(form, hex);\n });\n };\n var updateSlider = function (anyInSystem, _hex, hue) {\n memSlider.getOpt(anyInSystem).each(function (slider) {\n Slider.setValue(slider, { y: hueDegreesToSlider(hue) });\n });\n };\n var updatePaletteThumb = function (anyInSystem, hex) {\n memPalette.getOpt(anyInSystem).each(function (palette) {\n sbPalette.setThumb(palette, hex);\n });\n };\n var updateState = function (hex, hue) {\n var rgba = fromHex(hex);\n state.paletteRgba.set(rgba);\n state.paletteHue.set(hue);\n };\n var runUpdates = function (anyInSystem, hex, hue, updates) {\n updateState(hex, hue);\n each$1(updates, function (update) {\n update(anyInSystem, hex, hue);\n });\n };\n var onPaletteUpdate = function () {\n var updates = [updateFields];\n return function (form, simulatedEvent) {\n var value = simulatedEvent.event.value;\n var oldHue = state.paletteHue.get();\n var newHsv = hsvColour(oldHue, value.x, 100 - value.y);\n var newHex = hsvToHex(newHsv);\n runUpdates(form, newHex, oldHue, updates);\n };\n };\n var onSliderUpdate = function () {\n var updates = [\n updatePalette,\n updateFields\n ];\n return function (form, simulatedEvent) {\n var hue = hueSliderToDegrees(simulatedEvent.event.value.y);\n var oldRgb = state.paletteRgba.get();\n var oldHsv = fromRgb(oldRgb);\n var newHsv = hsvColour(hue, oldHsv.saturation, oldHsv.value);\n var newHex = hsvToHex(newHsv);\n runUpdates(form, newHex, hue, updates);\n };\n };\n var onFieldsUpdate = function () {\n var updates = [\n updatePalette,\n updateSlider,\n updatePaletteThumb\n ];\n return function (form, simulatedEvent) {\n var hex = simulatedEvent.event.hex;\n var 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({\n find: function (comp) {\n return memRgb.getOpt(comp);\n }\n }),\n Keying.config({ mode: 'acyclic' })\n ])\n };\n };\n var colourPickerSketcher = single({\n name: 'ColourPicker',\n configFields: [\n required$1('dom'),\n defaulted('onValidHex', noop),\n defaulted('onInvalidHex', noop)\n ],\n factory: factory\n });\n return colourPickerSketcher;\n };\n\n var self$1 = function () {\n return Composing.config({ find: Optional.some });\n };\n var memento$1 = function (mem) {\n return Composing.config({ find: mem.getOpt });\n };\n var childAt = function (index) {\n return Composing.config({\n find: function (comp) {\n return child$2(comp.element, index).bind(function (element) {\n return comp.getSystem().getByDom(element).toOptional();\n });\n }\n });\n };\n var ComposingConfigs = {\n self: self$1,\n memento: memento$1,\n childAt: childAt\n };\n\n var english = {\n 'colorcustom.rgb.red.label': 'R',\n 'colorcustom.rgb.red.description': 'Red component',\n 'colorcustom.rgb.green.label': 'G',\n 'colorcustom.rgb.green.description': 'Green component',\n 'colorcustom.rgb.blue.label': 'B',\n 'colorcustom.rgb.blue.description': 'Blue component',\n 'colorcustom.rgb.hex.label': '#',\n 'colorcustom.rgb.hex.description': 'Hex color code',\n 'colorcustom.rgb.range': 'Range 0 to 255',\n 'colorcustom.sb.saturation': 'Saturation',\n 'colorcustom.sb.brightness': 'Brightness',\n 'colorcustom.sb.picker': 'Saturation and Brightness Picker',\n 'colorcustom.sb.palette': 'Saturation and Brightness Palette',\n 'colorcustom.sb.instructions': 'Use arrow keys to select saturation and brightness, on x and y axes',\n 'colorcustom.hue.hue': 'Hue',\n 'colorcustom.hue.slider': 'Hue Slider',\n 'colorcustom.hue.palette': 'Hue Palette',\n 'colorcustom.hue.instructions': 'Use arrow keys to select a hue',\n 'aria.color.picker': 'Color Picker',\n 'aria.input.invalid': 'Invalid input'\n };\n var getEnglishText = function (key) {\n return english[key];\n };\n var translate$1 = function (key) {\n return getEnglishText(key);\n };\n var renderColorPicker = function (_spec) {\n var getClass = function (key) {\n return 'tox-' + key;\n };\n var colourPickerFactory = makeFactory(translate$1, getClass);\n var onValidHex = function (form) {\n emitWith(form, formActionEvent, {\n name: 'hex-valid',\n value: true\n });\n };\n var onInvalidHex = function (form) {\n emitWith(form, formActionEvent, {\n name: 'hex-valid',\n value: false\n });\n };\n var memPicker = record(colourPickerFactory.sketch({\n dom: {\n tag: 'div',\n classes: [getClass('color-picker-container')],\n attributes: { role: 'presentation' }\n },\n onValidHex: onValidHex,\n onInvalidHex: onInvalidHex\n }));\n return {\n dom: { tag: 'div' },\n components: [memPicker.asSpec()],\n behaviours: derive$1([\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function (comp) {\n var picker = memPicker.get(comp);\n var optRgbForm = Composing.getCurrent(picker);\n var optHex = optRgbForm.bind(function (rgbForm) {\n var formValues = Representing.getValue(rgbForm);\n return formValues.hex;\n });\n return optHex.map(function (hex) {\n return '#' + hex;\n }).getOr('');\n },\n setValue: function (comp, newValue) {\n var pattern = /^#([a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?)/;\n var m = pattern.exec(newValue);\n var picker = memPicker.get(comp);\n var optRgbForm = Composing.getCurrent(picker);\n optRgbForm.fold(function () {\n console.log('Can not find form');\n }, function (rgbForm) {\n Representing.setValue(rgbForm, { hex: Optional.from(m[1]).getOr('') });\n Form.getField(rgbForm, 'hex').each(function (hexField) {\n emit(hexField, input());\n });\n });\n }\n }\n }),\n ComposingConfigs.self()\n ])\n };\n };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.Resource');\n\n var isOldCustomEditor = function (spec) {\n return has$2(spec, 'init');\n };\n var renderCustomEditor = function (spec) {\n var editorApi = value$1();\n var memReplaced = record({ dom: { tag: spec.tag } });\n var initialValue = value$1();\n return {\n dom: {\n tag: 'div',\n classes: ['tox-custom-editor']\n },\n behaviours: derive$1([\n config('custom-editor-events', [runOnAttached(function (component) {\n memReplaced.getOpt(component).each(function (ta) {\n (isOldCustomEditor(spec) ? spec.init(ta.element.dom) : global$6.load(spec.scriptId, spec.scriptUrl).then(function (init) {\n return init(ta.element.dom, spec.settings);\n })).then(function (ea) {\n initialValue.on(function (cvalue) {\n ea.setValue(cvalue);\n });\n initialValue.clear();\n editorApi.set(ea);\n });\n });\n })]),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function () {\n return editorApi.get().fold(function () {\n return initialValue.get().getOr('');\n }, function (ed) {\n return ed.getValue();\n });\n },\n setValue: function (component, value) {\n editorApi.get().fold(function () {\n initialValue.set(value);\n }, function (ed) {\n return ed.setValue(value);\n });\n }\n }\n }),\n ComposingConfigs.self()\n ]),\n components: [memReplaced.asSpec()]\n };\n };\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var processors = objOf([\n defaulted('preprocess', identity$1),\n defaulted('postprocess', identity$1)\n ]);\n var memento = function (mem, rawProcessors) {\n var ps = asRawOrDie$1('RepresentingConfigs.memento processors', processors, rawProcessors);\n return Representing.config({\n store: {\n mode: 'manual',\n getValue: function (comp) {\n var other = mem.get(comp);\n var rawValue = Representing.getValue(other);\n return ps.postprocess(rawValue);\n },\n setValue: function (comp, rawValue) {\n var newValue = ps.preprocess(rawValue);\n var other = mem.get(comp);\n Representing.setValue(other, newValue);\n }\n }\n });\n };\n var withComp = function (optInitialValue, getter, setter) {\n return Representing.config(deepMerge({\n store: {\n mode: 'manual',\n getValue: getter,\n setValue: setter\n }\n }, optInitialValue.map(function (initialValue) {\n return { store: { initialValue: initialValue } };\n }).getOr({})));\n };\n var withElement = function (initialValue, getter, setter) {\n return withComp(initialValue, function (c) {\n return getter(c.element);\n }, function (c, v) {\n return setter(c.element, v);\n });\n };\n var domValue = function (optInitialValue) {\n return withElement(optInitialValue, get$5, set$4);\n };\n var domHtml = function (optInitialValue) {\n return withElement(optInitialValue, get$7, set$5);\n };\n var memory = function (initialValue) {\n return Representing.config({\n store: {\n mode: 'memory',\n initialValue: initialValue\n }\n });\n };\n var RepresentingConfigs = {\n memento: memento,\n withElement: withElement,\n withComp: withComp,\n domValue: domValue,\n domHtml: domHtml,\n memory: memory\n };\n\n var defaultImageFileTypes = 'jpeg,jpg,jpe,jfi,jif,jfif,png,gif,bmp,webp';\n var filterByExtension = function (files, providersBackstage) {\n var allowedImageFileTypes = global$5.explode(providersBackstage.getSetting('images_file_types', defaultImageFileTypes, 'string'));\n var isFileInAllowedTypes = function (file) {\n return exists(allowedImageFileTypes, function (type) {\n return endsWith(file.name.toLowerCase(), '.' + type.toLowerCase());\n });\n };\n return filter$2(from(files), isFileInAllowedTypes);\n };\n var renderDropZone = function (spec, providersBackstage) {\n var stopper = function (_, se) {\n se.stop();\n };\n var sequence = function (actions) {\n return function (comp, se) {\n each$1(actions, function (a) {\n a(comp, se);\n });\n };\n };\n var onDrop = function (comp, se) {\n if (!Disabling.isDisabled(comp)) {\n var transferEvent = se.event.raw;\n handleFiles(comp, transferEvent.dataTransfer.files);\n }\n };\n var onSelect = function (component, simulatedEvent) {\n var input = simulatedEvent.event.raw.target;\n handleFiles(component, input.files);\n };\n var handleFiles = function (component, files) {\n Representing.setValue(component, filterByExtension(files, providersBackstage));\n emitWith(component, formChangeEvent, { name: spec.name });\n };\n var 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 var renderField = function (s) {\n return {\n uid: s.uid,\n dom: {\n tag: 'div',\n classes: ['tox-dropzone-container']\n },\n behaviours: derive$1([\n RepresentingConfigs.memory([]),\n ComposingConfigs.self(),\n Disabling.config({}),\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: {\n tag: 'p',\n innerHtml: providersBackstage.translate('Drop an image here')\n }\n },\n Button.sketch({\n dom: {\n tag: 'button',\n innerHtml: providersBackstage.translate('Browse for an image'),\n styles: { position: 'relative' },\n classes: [\n 'tox-button',\n 'tox-button--secondary'\n ]\n },\n components: [memInput.asSpec()],\n action: function (comp) {\n var inputComp = memInput.get(comp);\n inputComp.element.dom.click();\n },\n buttonBehaviours: derive$1([\n Tabstopping.config({}),\n DisablingConfigs.button(providersBackstage.isDisabled),\n receivingConfig()\n ])\n })\n ]\n }]\n };\n };\n var pLabel = spec.label.map(function (label) {\n return renderLabel$2(label, providersBackstage);\n });\n var pField = FormField.parts.field({ factory: { sketch: renderField } });\n return renderFormFieldWith(pLabel, pField, ['tox-form__group--stretched'], []);\n };\n\n var renderGrid = function (spec, backstage) {\n return {\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\n var beforeObject = generate$6('alloy-fake-before-tabstop');\n var afterObject = generate$6('alloy-fake-after-tabstop');\n var craftWithClasses = function (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: classes\n },\n behaviours: derive$1([\n Focusing.config({ ignore: true }),\n Tabstopping.config({})\n ])\n };\n };\n var craft = function (spec) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-navobj']\n },\n components: [\n craftWithClasses([beforeObject]),\n spec,\n craftWithClasses([afterObject])\n ],\n behaviours: derive$1([ComposingConfigs.childAt(1)])\n };\n };\n var triggerTab = function (placeholder, shiftKey) {\n emitWith(placeholder, keydown(), {\n raw: {\n which: 9,\n shiftKey: shiftKey\n }\n });\n };\n var onFocus = function (container, targetComp) {\n var 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 var isPseudoStop = function (element) {\n return closest(element, [\n '.' + beforeObject,\n '.' + afterObject\n ].join(','), never);\n };\n\n var platformNeedsSandboxing = !(detect$1().browser.isIE() || detect$1().browser.isEdge());\n var getDynamicSource = function (isSandbox) {\n var cachedValue = Cell('');\n return {\n getValue: function (_frameComponent) {\n return cachedValue.get();\n },\n setValue: function (frameComponent, html) {\n if (!isSandbox) {\n set$8(frameComponent.element, 'src', 'javascript:\\'\\'');\n var doc = frameComponent.element.dom.contentWindow.document;\n doc.open();\n doc.write(html);\n doc.close();\n } else {\n set$8(frameComponent.element, 'srcdoc', html);\n }\n cachedValue.set(html);\n }\n };\n };\n var renderIFrame = function (spec, providersBackstage) {\n var isSandbox = platformNeedsSandboxing && spec.sandboxed;\n var attributes = __assign(__assign({}, spec.label.map(function (title) {\n return { title: title };\n }).getOr({})), isSandbox ? { sandbox: 'allow-scripts allow-same-origin' } : {});\n var sourcing = getDynamicSource(isSandbox);\n var pLabel = spec.label.map(function (label) {\n return renderLabel$2(label, providersBackstage);\n });\n var factory = function (newSpec) {\n return craft({\n uid: newSpec.uid,\n dom: {\n tag: 'iframe',\n attributes: attributes\n },\n behaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({}),\n RepresentingConfigs.withComp(Optional.none(), sourcing.getValue, sourcing.setValue)\n ])\n });\n };\n var pField = FormField.parts.field({ factory: { sketch: factory } });\n return renderFormFieldWith(pLabel, pField, ['tox-form__group--stretched'], []);\n };\n\n var create$4 = function (width, height) {\n return resize$3(document.createElement('canvas'), width, height);\n };\n var clone$1 = function (canvas) {\n var tCanvas = create$4(canvas.width, canvas.height);\n var ctx = get2dContext(tCanvas);\n ctx.drawImage(canvas, 0, 0);\n return tCanvas;\n };\n var get2dContext = function (canvas) {\n return canvas.getContext('2d');\n };\n var resize$3 = function (canvas, width, height) {\n canvas.width = width;\n canvas.height = height;\n return canvas;\n };\n\n var getWidth$1 = function (image) {\n return image.naturalWidth || image.width;\n };\n var getHeight$1 = function (image) {\n return image.naturalHeight || image.height;\n };\n\n var blobToImage = function (blob) {\n return new Promise$1(function (resolve, reject) {\n var blobUrl = URL.createObjectURL(blob);\n var image = new Image();\n var removeListeners = function () {\n image.removeEventListener('load', loaded);\n image.removeEventListener('error', error);\n };\n var loaded = function () {\n removeListeners();\n resolve(image);\n };\n var error = function () {\n removeListeners();\n reject('Unable to load data of type ' + blob.type + ': ' + blobUrl);\n };\n image.addEventListener('load', loaded);\n image.addEventListener('error', error);\n image.src = blobUrl;\n if (image.complete) {\n setTimeout(loaded, 0);\n }\n });\n };\n var dataUriToBlobSync = function (uri) {\n var data = uri.split(',');\n var matches = /data:([^;]+)/.exec(data[0]);\n if (!matches) {\n return Optional.none();\n }\n var mimetype = matches[1];\n var base64 = data[1];\n var sliceSize = 1024;\n var byteCharacters = atob(base64);\n var bytesLength = byteCharacters.length;\n var slicesCount = Math.ceil(bytesLength / sliceSize);\n var byteArrays = new Array(slicesCount);\n for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {\n var begin = sliceIndex * sliceSize;\n var end = Math.min(begin + sliceSize, bytesLength);\n var bytes = new Array(end - begin);\n for (var offset = begin, i = 0; offset < end; ++i, ++offset) {\n bytes[i] = byteCharacters[offset].charCodeAt(0);\n }\n byteArrays[sliceIndex] = new Uint8Array(bytes);\n }\n return Optional.some(new Blob(byteArrays, { type: mimetype }));\n };\n var dataUriToBlob = function (uri) {\n return new Promise$1(function (resolve, reject) {\n dataUriToBlobSync(uri).fold(function () {\n reject('uri is not base64: ' + uri);\n }, resolve);\n });\n };\n var canvasToBlob = function (canvas, type, quality) {\n type = type || 'image/png';\n if (isFunction(HTMLCanvasElement.prototype.toBlob)) {\n return new Promise$1(function (resolve, reject) {\n canvas.toBlob(function (blob) {\n if (blob) {\n resolve(blob);\n } else {\n reject();\n }\n }, type, quality);\n });\n } else {\n return dataUriToBlob(canvas.toDataURL(type, quality));\n }\n };\n var canvasToDataURL = function (canvas, type, quality) {\n type = type || 'image/png';\n return canvas.toDataURL(type, quality);\n };\n var blobToCanvas = function (blob) {\n return blobToImage(blob).then(function (image) {\n revokeImageUrl(image);\n var canvas = create$4(getWidth$1(image), getHeight$1(image));\n var context = get2dContext(canvas);\n context.drawImage(image, 0, 0);\n return canvas;\n });\n };\n var blobToDataUri = function (blob) {\n return new Promise$1(function (resolve) {\n var reader = new FileReader();\n reader.onloadend = function () {\n resolve(reader.result);\n };\n reader.readAsDataURL(blob);\n });\n };\n var revokeImageUrl = function (image) {\n URL.revokeObjectURL(image.src);\n };\n\n var create$3 = function (getCanvas, blob, uri) {\n var initialType = blob.type;\n var getType = constant$1(initialType);\n var toBlob = function () {\n return Promise$1.resolve(blob);\n };\n var toDataURL = constant$1(uri);\n var toBase64 = function () {\n return uri.split(',')[1];\n };\n var toAdjustedBlob = function (type, quality) {\n return getCanvas.then(function (canvas) {\n return canvasToBlob(canvas, type, quality);\n });\n };\n var toAdjustedDataURL = function (type, quality) {\n return getCanvas.then(function (canvas) {\n return canvasToDataURL(canvas, type, quality);\n });\n };\n var toAdjustedBase64 = function (type, quality) {\n return toAdjustedDataURL(type, quality).then(function (dataurl) {\n return dataurl.split(',')[1];\n });\n };\n var toCanvas = function () {\n return getCanvas.then(clone$1);\n };\n return {\n getType: getType,\n toBlob: toBlob,\n toDataURL: toDataURL,\n toBase64: toBase64,\n toAdjustedBlob: toAdjustedBlob,\n toAdjustedDataURL: toAdjustedDataURL,\n toAdjustedBase64: toAdjustedBase64,\n toCanvas: toCanvas\n };\n };\n var fromBlob = function (blob) {\n return blobToDataUri(blob).then(function (uri) {\n return create$3(blobToCanvas(blob), blob, uri);\n });\n };\n var fromCanvas = function (canvas, type) {\n return canvasToBlob(canvas, type).then(function (blob) {\n return create$3(Promise$1.resolve(canvas), blob, canvas.toDataURL());\n });\n };\n\n var blobToImageResult = function (blob) {\n return fromBlob(blob);\n };\n\n var clamp = function (value, min, max) {\n var parsedValue = typeof value === 'string' ? parseFloat(value) : value;\n if (parsedValue > max) {\n parsedValue = max;\n } else if (parsedValue < min) {\n parsedValue = min;\n }\n return parsedValue;\n };\n var identity = function () {\n return [\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ];\n };\n var DELTA_INDEX = [\n 0,\n 0.01,\n 0.02,\n 0.04,\n 0.05,\n 0.06,\n 0.07,\n 0.08,\n 0.1,\n 0.11,\n 0.12,\n 0.14,\n 0.15,\n 0.16,\n 0.17,\n 0.18,\n 0.2,\n 0.21,\n 0.22,\n 0.24,\n 0.25,\n 0.27,\n 0.28,\n 0.3,\n 0.32,\n 0.34,\n 0.36,\n 0.38,\n 0.4,\n 0.42,\n 0.44,\n 0.46,\n 0.48,\n 0.5,\n 0.53,\n 0.56,\n 0.59,\n 0.62,\n 0.65,\n 0.68,\n 0.71,\n 0.74,\n 0.77,\n 0.8,\n 0.83,\n 0.86,\n 0.89,\n 0.92,\n 0.95,\n 0.98,\n 1,\n 1.06,\n 1.12,\n 1.18,\n 1.24,\n 1.3,\n 1.36,\n 1.42,\n 1.48,\n 1.54,\n 1.6,\n 1.66,\n 1.72,\n 1.78,\n 1.84,\n 1.9,\n 1.96,\n 2,\n 2.12,\n 2.25,\n 2.37,\n 2.5,\n 2.62,\n 2.75,\n 2.87,\n 3,\n 3.2,\n 3.4,\n 3.6,\n 3.8,\n 4,\n 4.3,\n 4.7,\n 4.9,\n 5,\n 5.5,\n 6,\n 6.5,\n 6.8,\n 7,\n 7.3,\n 7.5,\n 7.8,\n 8,\n 8.4,\n 8.7,\n 9,\n 9.4,\n 9.6,\n 9.8,\n 10\n ];\n var multiply = function (matrix1, matrix2) {\n var col = [];\n var out = new Array(25);\n var val;\n for (var i = 0; i < 5; i++) {\n for (var j = 0; j < 5; j++) {\n col[j] = matrix2[j + i * 5];\n }\n for (var j = 0; j < 5; j++) {\n val = 0;\n for (var k = 0; k < 5; k++) {\n val += matrix1[j + k * 5] * col[k];\n }\n out[j + i * 5] = val;\n }\n }\n return out;\n };\n var adjustContrast = function (matrix, value) {\n var x;\n value = clamp(value, -1, 1);\n value *= 100;\n if (value < 0) {\n x = 127 + value / 100 * 127;\n } else {\n x = value % 1;\n if (x === 0) {\n x = DELTA_INDEX[value];\n } else {\n x = DELTA_INDEX[Math.floor(value)] * (1 - x) + DELTA_INDEX[Math.floor(value) + 1] * x;\n }\n x = x * 127 + 127;\n }\n return multiply(matrix, [\n x / 127,\n 0,\n 0,\n 0,\n 0.5 * (127 - x),\n 0,\n x / 127,\n 0,\n 0,\n 0.5 * (127 - x),\n 0,\n 0,\n x / 127,\n 0,\n 0.5 * (127 - x),\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ]);\n };\n var adjustBrightness = function (matrix, value) {\n value = clamp(255 * value, -255, 255);\n return multiply(matrix, [\n 1,\n 0,\n 0,\n 0,\n value,\n 0,\n 1,\n 0,\n 0,\n value,\n 0,\n 0,\n 1,\n 0,\n value,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ]);\n };\n var adjustColors = function (matrix, adjustR, adjustG, adjustB) {\n adjustR = clamp(adjustR, 0, 2);\n adjustG = clamp(adjustG, 0, 2);\n adjustB = clamp(adjustB, 0, 2);\n return multiply(matrix, [\n adjustR,\n 0,\n 0,\n 0,\n 0,\n 0,\n adjustG,\n 0,\n 0,\n 0,\n 0,\n 0,\n adjustB,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ]);\n };\n\n var colorFilter = function (ir, matrix) {\n return ir.toCanvas().then(function (canvas) {\n return applyColorFilter(canvas, ir.getType(), matrix);\n });\n };\n var applyColorFilter = function (canvas, type, matrix) {\n var context = get2dContext(canvas);\n var applyMatrix = function (pixelsData, m) {\n var r, g, b, a;\n var data = pixelsData.data, m0 = m[0], m1 = m[1], m2 = m[2], m3 = m[3], m4 = m[4], m5 = m[5], m6 = m[6], m7 = m[7], m8 = m[8], m9 = m[9], m10 = m[10], m11 = m[11], m12 = m[12], m13 = m[13], m14 = m[14], m15 = m[15], m16 = m[16], m17 = m[17], m18 = m[18], m19 = m[19];\n for (var i = 0; i < data.length; i += 4) {\n r = data[i];\n g = data[i + 1];\n b = data[i + 2];\n a = data[i + 3];\n data[i] = r * m0 + g * m1 + b * m2 + a * m3 + m4;\n data[i + 1] = r * m5 + g * m6 + b * m7 + a * m8 + m9;\n data[i + 2] = r * m10 + g * m11 + b * m12 + a * m13 + m14;\n data[i + 3] = r * m15 + g * m16 + b * m17 + a * m18 + m19;\n }\n return pixelsData;\n };\n var pixels = applyMatrix(context.getImageData(0, 0, canvas.width, canvas.height), matrix);\n context.putImageData(pixels, 0, 0);\n return fromCanvas(canvas, type);\n };\n var convoluteFilter = function (ir, matrix) {\n return ir.toCanvas().then(function (canvas) {\n return applyConvoluteFilter(canvas, ir.getType(), matrix);\n });\n };\n var applyConvoluteFilter = function (canvas, type, matrix) {\n var context = get2dContext(canvas);\n var applyMatrix = function (pIn, pOut, aMatrix) {\n var clamp = function (value, min, max) {\n if (value > max) {\n value = max;\n } else if (value < min) {\n value = min;\n }\n return value;\n };\n var side = Math.round(Math.sqrt(aMatrix.length));\n var halfSide = Math.floor(side / 2);\n var rgba = pIn.data;\n var drgba = pOut.data;\n var w = pIn.width;\n var h = pIn.height;\n for (var y = 0; y < h; y++) {\n for (var x = 0; x < w; x++) {\n var r = 0;\n var g = 0;\n var b = 0;\n for (var cy = 0; cy < side; cy++) {\n for (var cx = 0; cx < side; cx++) {\n var scx = clamp(x + cx - halfSide, 0, w - 1);\n var scy = clamp(y + cy - halfSide, 0, h - 1);\n var innerOffset = (scy * w + scx) * 4;\n var wt = aMatrix[cy * side + cx];\n r += rgba[innerOffset] * wt;\n g += rgba[innerOffset + 1] * wt;\n b += rgba[innerOffset + 2] * wt;\n }\n }\n var offset = (y * w + x) * 4;\n drgba[offset] = clamp(r, 0, 255);\n drgba[offset + 1] = clamp(g, 0, 255);\n drgba[offset + 2] = clamp(b, 0, 255);\n }\n }\n return pOut;\n };\n var pixelsIn = context.getImageData(0, 0, canvas.width, canvas.height);\n var pixelsOut = context.getImageData(0, 0, canvas.width, canvas.height);\n pixelsOut = applyMatrix(pixelsIn, pixelsOut, matrix);\n context.putImageData(pixelsOut, 0, 0);\n return fromCanvas(canvas, type);\n };\n var functionColorFilter = function (colorFn) {\n var filterImpl = function (canvas, type, value) {\n var context = get2dContext(canvas);\n var lookup = new Array(256);\n var applyLookup = function (pixelsData, lookupData) {\n var data = pixelsData.data;\n for (var i = 0; i < data.length; i += 4) {\n data[i] = lookupData[data[i]];\n data[i + 1] = lookupData[data[i + 1]];\n data[i + 2] = lookupData[data[i + 2]];\n }\n return pixelsData;\n };\n for (var i = 0; i < lookup.length; i++) {\n lookup[i] = colorFn(i, value);\n }\n var pixels = applyLookup(context.getImageData(0, 0, canvas.width, canvas.height), lookup);\n context.putImageData(pixels, 0, 0);\n return fromCanvas(canvas, type);\n };\n return function (ir, value) {\n return ir.toCanvas().then(function (canvas) {\n return filterImpl(canvas, ir.getType(), value);\n });\n };\n };\n var complexAdjustableColorFilter = function (matrixAdjustFn) {\n return function (ir, adjust) {\n return colorFilter(ir, matrixAdjustFn(identity(), adjust));\n };\n };\n var basicColorFilter = function (matrix) {\n return function (ir) {\n return colorFilter(ir, matrix);\n };\n };\n var basicConvolutionFilter = function (kernel) {\n return function (ir) {\n return convoluteFilter(ir, kernel);\n };\n };\n var invert$1 = basicColorFilter([\n -1,\n 0,\n 0,\n 0,\n 255,\n 0,\n -1,\n 0,\n 0,\n 255,\n 0,\n 0,\n -1,\n 0,\n 255,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ]);\n var brightness$1 = complexAdjustableColorFilter(adjustBrightness);\n var contrast$1 = complexAdjustableColorFilter(adjustContrast);\n var colorize$1 = function (ir, adjustR, adjustG, adjustB) {\n return colorFilter(ir, adjustColors(identity(), adjustR, adjustG, adjustB));\n };\n var sharpen$1 = basicConvolutionFilter([\n 0,\n -1,\n 0,\n -1,\n 5,\n -1,\n 0,\n -1,\n 0\n ]);\n var gamma$1 = functionColorFilter(function (color, value) {\n return Math.pow(color / 255, 1 - value) * 255;\n });\n\n var scale = function (image, dW, dH) {\n var sW = getWidth$1(image);\n var sH = getHeight$1(image);\n var wRatio = dW / sW;\n var hRatio = dH / sH;\n var scaleCapped = false;\n if (wRatio < 0.5 || wRatio > 2) {\n wRatio = wRatio < 0.5 ? 0.5 : 2;\n scaleCapped = true;\n }\n if (hRatio < 0.5 || hRatio > 2) {\n hRatio = hRatio < 0.5 ? 0.5 : 2;\n scaleCapped = true;\n }\n var scaled = _scale(image, wRatio, hRatio);\n return !scaleCapped ? scaled : scaled.then(function (tCanvas) {\n return scale(tCanvas, dW, dH);\n });\n };\n var _scale = function (image, wRatio, hRatio) {\n return new Promise$1(function (resolve) {\n var sW = getWidth$1(image);\n var sH = getHeight$1(image);\n var dW = Math.floor(sW * wRatio);\n var dH = Math.floor(sH * hRatio);\n var canvas = create$4(dW, dH);\n var context = get2dContext(canvas);\n context.drawImage(image, 0, 0, sW, sH, 0, 0, dW, dH);\n resolve(canvas);\n });\n };\n\n var ceilWithPrecision = function (num, precision) {\n if (precision === void 0) {\n precision = 2;\n }\n var mul = Math.pow(10, precision);\n var upper = Math.round(num * mul);\n return Math.ceil(upper / mul);\n };\n var rotate$1 = function (ir, angle) {\n return ir.toCanvas().then(function (canvas) {\n return applyRotate(canvas, ir.getType(), angle);\n });\n };\n var applyRotate = function (image, type, angle) {\n var degrees = angle < 0 ? 360 + angle : angle;\n var rad = degrees * Math.PI / 180;\n var width = image.width;\n var height = image.height;\n var sin = Math.sin(rad);\n var cos = Math.cos(rad);\n var newWidth = ceilWithPrecision(Math.abs(width * cos) + Math.abs(height * sin));\n var newHeight = ceilWithPrecision(Math.abs(width * sin) + Math.abs(height * cos));\n var canvas = create$4(newWidth, newHeight);\n var context = get2dContext(canvas);\n context.translate(newWidth / 2, newHeight / 2);\n context.rotate(rad);\n context.drawImage(image, -width / 2, -height / 2);\n return fromCanvas(canvas, type);\n };\n var flip$1 = function (ir, axis) {\n return ir.toCanvas().then(function (canvas) {\n return applyFlip(canvas, ir.getType(), axis);\n });\n };\n var applyFlip = function (image, type, axis) {\n var canvas = create$4(image.width, image.height);\n var context = get2dContext(canvas);\n if (axis === 'v') {\n context.scale(1, -1);\n context.drawImage(image, 0, -canvas.height);\n } else {\n context.scale(-1, 1);\n context.drawImage(image, -canvas.width, 0);\n }\n return fromCanvas(canvas, type);\n };\n var crop$1 = function (ir, x, y, w, h) {\n return ir.toCanvas().then(function (canvas) {\n return applyCrop(canvas, ir.getType(), x, y, w, h);\n });\n };\n var applyCrop = function (image, type, x, y, w, h) {\n var canvas = create$4(w, h);\n var context = get2dContext(canvas);\n context.drawImage(image, -x, -y);\n return fromCanvas(canvas, type);\n };\n var resize$2 = function (ir, w, h) {\n return ir.toCanvas().then(function (canvas) {\n return scale(canvas, w, h).then(function (newCanvas) {\n return fromCanvas(newCanvas, ir.getType());\n });\n });\n };\n\n var invert = function (ir) {\n return invert$1(ir);\n };\n var sharpen = function (ir) {\n return sharpen$1(ir);\n };\n var gamma = function (ir, value) {\n return gamma$1(ir, value);\n };\n var colorize = function (ir, adjustR, adjustG, adjustB) {\n return colorize$1(ir, adjustR, adjustG, adjustB);\n };\n var brightness = function (ir, adjust) {\n return brightness$1(ir, adjust);\n };\n var contrast = function (ir, adjust) {\n return contrast$1(ir, adjust);\n };\n var flip = function (ir, axis) {\n return flip$1(ir, axis);\n };\n var crop = function (ir, x, y, w, h) {\n return crop$1(ir, x, y, w, h);\n };\n var resize$1 = function (ir, w, h) {\n return resize$2(ir, w, h);\n };\n var rotate = function (ir, angle) {\n return rotate$1(ir, angle);\n };\n\n var renderIcon = function (iconName, iconsProvider, behaviours) {\n return render$3(iconName, {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-tbtn__icon-wrap'\n ],\n behaviours: behaviours\n }, iconsProvider);\n };\n var renderIconFromPack = function (iconName, iconsProvider) {\n return renderIcon(iconName, iconsProvider, []);\n };\n var renderReplacableIconFromPack = function (iconName, iconsProvider) {\n return renderIcon(iconName, iconsProvider, [Replacing.config({})]);\n };\n var renderLabel$1 = function (text, prefix, providersBackstage) {\n return {\n dom: {\n tag: 'span',\n innerHtml: providersBackstage.translate(text),\n classes: [prefix + '__select-label']\n },\n behaviours: derive$1([Replacing.config({})])\n };\n };\n\n var _a;\n var internalToolbarButtonExecute = generate$6('toolbar.button.execute');\n var onToolbarButtonExecute = function (info) {\n return runOnExecute$1(function (comp, _simulatedEvent) {\n runWithApi(info, comp)(function (itemApi) {\n emitWith(comp, internalToolbarButtonExecute, { buttonApi: itemApi });\n info.onAction(itemApi);\n });\n });\n };\n var toolbarButtonEventOrder = (_a = {}, _a[execute$5()] = [\n 'disabling',\n 'alloy.base.behaviour',\n 'toggling',\n 'toolbar-button-events'\n ], _a);\n\n var updateMenuText = generate$6('update-menu-text');\n var updateMenuIcon = generate$6('update-menu-icon');\n var renderCommonDropdown = function (spec, prefix, sharedBackstage) {\n var editorOffCell = Cell(noop);\n var optMemDisplayText = spec.text.map(function (text) {\n return record(renderLabel$1(text, prefix, sharedBackstage.providers));\n });\n var optMemDisplayIcon = spec.icon.map(function (iconName) {\n return record(renderReplacableIconFromPack(iconName, sharedBackstage.providers.icons));\n });\n var onLeftOrRightInMenu = function (comp, se) {\n var 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 var role = spec.role.fold(function () {\n return {};\n }, function (role) {\n return { role: role };\n });\n var tooltipAttributes = spec.tooltip.fold(function () {\n return {};\n }, function (tooltip) {\n var translatedTooltip = sharedBackstage.providers.translate(tooltip);\n return {\n 'title': translatedTooltip,\n 'aria-label': translatedTooltip\n };\n });\n var iconSpec = render$3('chevron-down', {\n tag: 'div',\n classes: [prefix + '__select-chevron']\n }, sharedBackstage.providers.icons);\n var memDropdown = record(Dropdown.sketch(__assign(__assign(__assign({}, spec.uid ? { uid: spec.uid } : {}), role), {\n dom: {\n tag: 'button',\n classes: [\n prefix,\n prefix + '--select'\n ].concat(map$2(spec.classes, function (c) {\n return prefix + '--' + c;\n })),\n attributes: __assign({}, tooltipAttributes)\n },\n components: componentRenderPipeline([\n optMemDisplayIcon.map(function (mem) {\n return mem.asSpec();\n }),\n optMemDisplayText.map(function (mem) {\n return mem.asSpec();\n }),\n Optional.some(iconSpec)\n ]),\n matchWidth: true,\n useMinWidth: true,\n dropdownBehaviours: derive$1(__spreadArray(__spreadArray([], spec.dropdownBehaviours, true), [\n DisablingConfigs.button(function () {\n return spec.disabled || sharedBackstage.providers.isDisabled();\n }),\n receivingConfig(),\n Unselecting.config({}),\n Replacing.config({}),\n config('dropdown-events', [\n onControlAttached(spec, editorOffCell),\n onControlDetached(spec, editorOffCell)\n ]),\n config('menubutton-update-display-text', [\n run$1(updateMenuText, function (comp, se) {\n optMemDisplayText.bind(function (mem) {\n return mem.getOpt(comp);\n }).each(function (displayText) {\n Replacing.set(displayText, [text$1(sharedBackstage.providers.translate(se.event.text))]);\n });\n }),\n run$1(updateMenuIcon, function (comp, se) {\n optMemDisplayIcon.bind(function (mem) {\n return mem.getOpt(comp);\n }).each(function (displayIcon) {\n Replacing.set(displayIcon, [renderReplacableIconFromPack(se.event.icon, sharedBackstage.providers.icons)]);\n });\n })\n ])\n ], false)),\n eventOrder: deepMerge(toolbarButtonEventOrder, {\n mousedown: [\n 'focusing',\n 'alloy.base.behaviour',\n 'item-type-events',\n 'normal-dropdown-events'\n ]\n }),\n sandboxBehaviours: derive$1([Keying.config({\n mode: 'special',\n onLeft: onLeftOrRightInMenu,\n onRight: onLeftOrRightInMenu\n })]),\n lazySink: sharedBackstage.getSink,\n toggleClass: prefix + '--active',\n parts: { menu: part(false, spec.columns, spec.presets) },\n fetch: function (comp) {\n return Future.nu(curry(spec.fetch, comp));\n }\n })));\n return memDropdown.asSpec();\n };\n\n var isMenuItemReference = function (item) {\n return isString(item);\n };\n var isSeparator$1 = function (item) {\n return item.type === 'separator';\n };\n var isExpandingMenuItem = function (item) {\n return has$2(item, 'getSubmenuItems');\n };\n var separator$2 = { type: 'separator' };\n var unwrapReferences = function (items, menuItems) {\n var realItems = foldl(items, function (acc, item) {\n if (isMenuItemReference(item)) {\n if (item === '') {\n return acc;\n } else if (item === '|') {\n return acc.length > 0 && !isSeparator$1(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$1(realItems[realItems.length - 1])) {\n realItems.pop();\n }\n return realItems;\n };\n var getFromExpandingItem = function (item, menuItems) {\n var submenuItems = item.getSubmenuItems();\n var rest = expand(submenuItems, menuItems);\n var newMenus = deepMerge(rest.menus, wrap$1(item.value, rest.items));\n var newExpansions = deepMerge(rest.expansions, wrap$1(item.value, item.value));\n return {\n item: item,\n menus: newMenus,\n expansions: newExpansions\n };\n };\n var getFromItem = function (item, menuItems) {\n return isExpandingMenuItem(item) ? getFromExpandingItem(item, menuItems) : {\n item: item,\n menus: {},\n expansions: {}\n };\n };\n var generateValueIfRequired = function (item) {\n if (isSeparator$1(item)) {\n return item;\n } else {\n var itemValue = get$e(item, 'value').getOrThunk(function () {\n return generate$6('generated-menu-item');\n });\n return deepMerge({ value: itemValue }, item);\n }\n };\n var expand = function (items, menuItems) {\n var realItems = unwrapReferences(isString(items) ? items.split(' ') : items, menuItems);\n return foldr(realItems, function (acc, item) {\n var itemWithValue = generateValueIfRequired(item);\n var newData = getFromItem(itemWithValue, menuItems);\n return {\n menus: deepMerge(acc.menus, newData.menus),\n items: [newData.item].concat(acc.items),\n expansions: deepMerge(acc.expansions, newData.expansions)\n };\n }, {\n menus: {},\n expansions: {},\n items: []\n });\n };\n\n var build = function (items, itemResponse, backstage, isHorizontalMenu) {\n var primary = generate$6('primary-menu');\n var data = expand(items, backstage.shared.providers.menuItems());\n if (data.items.length === 0) {\n return Optional.none();\n }\n var mainMenu = createPartialMenu(primary, data.items, itemResponse, backstage, isHorizontalMenu);\n var submenus = map$1(data.menus, function (menuItems, menuName) {\n return createPartialMenu(menuName, menuItems, itemResponse, backstage, false);\n });\n var menus = deepMerge(submenus, wrap$1(primary, mainMenu));\n return Optional.from(tieredMenu.tieredData(primary, menus, data.expansions));\n };\n\n var getMenuButtonApi = function (component) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n },\n setActive: function (state) {\n var elm = component.element;\n if (state) {\n add$2(elm, 'tox-tbtn--enabled');\n set$8(elm, 'aria-pressed', true);\n } else {\n remove$2(elm, 'tox-tbtn--enabled');\n remove$7(elm, 'aria-pressed');\n }\n },\n isActive: function () {\n return has(component.element, 'tox-tbtn--enabled');\n }\n };\n };\n var renderMenuButton = function (spec, prefix, backstage, role) {\n return renderCommonDropdown({\n text: spec.text,\n icon: spec.icon,\n tooltip: spec.tooltip,\n role: role,\n fetch: function (_comp, callback) {\n spec.fetch(function (items) {\n callback(build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, false));\n });\n },\n onSetup: spec.onSetup,\n getApi: getMenuButtonApi,\n columns: 1,\n presets: 'normal',\n classes: [],\n dropdownBehaviours: [Tabstopping.config({})]\n }, prefix, backstage.shared);\n };\n var getFetch = function (items, getButton, backstage) {\n var getMenuItemAction = function (item) {\n return function (api) {\n var newValue = !api.isActive();\n api.setActive(newValue);\n item.storage.set(newValue);\n backstage.shared.getSink().each(function (sink) {\n getButton().getOpt(sink).each(function (orig) {\n focus$3(orig.element);\n emitWith(orig, formActionEvent, {\n name: item.name,\n value: item.storage.get()\n });\n });\n });\n };\n };\n var getMenuItemSetup = function (item) {\n return function (api) {\n api.setActive(item.storage.get());\n };\n };\n return function (success) {\n success(map$2(items, function (item) {\n var text = item.text.fold(function () {\n return {};\n }, function (text) {\n return { text: text };\n });\n return __assign(__assign({\n type: item.type,\n active: false\n }, text), {\n onAction: getMenuItemAction(item),\n onSetup: getMenuItemSetup(item)\n });\n }));\n };\n };\n\n var renderCommonSpec = function (spec, actionOpt, extraBehaviours, dom, components, providersBackstage) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n var action = actionOpt.fold(function () {\n return {};\n }, function (action) {\n return { action: action };\n });\n var common = __assign({\n buttonBehaviours: derive$1([\n DisablingConfigs.button(function () {\n return spec.disabled || providersBackstage.isDisabled();\n }),\n receivingConfig(),\n Tabstopping.config({}),\n config('button press', [\n preventDefault('click'),\n preventDefault('mousedown')\n ])\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 var domFinal = deepMerge(common, { dom: dom });\n return deepMerge(domFinal, { components: components });\n };\n var renderIconButtonSpec = function (spec, action, providersBackstage, extraBehaviours) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n var tooltipAttributes = spec.tooltip.map(function (tooltip) {\n return {\n 'aria-label': providersBackstage.translate(tooltip),\n 'title': providersBackstage.translate(tooltip)\n };\n }).getOr({});\n var dom = {\n tag: 'button',\n classes: ['tox-tbtn'],\n attributes: tooltipAttributes\n };\n var icon = spec.icon.map(function (iconName) {\n return renderIconFromPack(iconName, providersBackstage.icons);\n });\n var components = componentRenderPipeline([icon]);\n return renderCommonSpec(spec, action, extraBehaviours, dom, components, providersBackstage);\n };\n var renderIconButton = function (spec, action, providersBackstage, extraBehaviours) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n var iconButtonSpec = renderIconButtonSpec(spec, Optional.some(action), providersBackstage, extraBehaviours);\n return Button.sketch(iconButtonSpec);\n };\n var renderButtonSpec = function (spec, action, providersBackstage, extraBehaviours, extraClasses) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n if (extraClasses === void 0) {\n extraClasses = [];\n }\n var translatedText = providersBackstage.translate(spec.text);\n var icon = spec.icon ? spec.icon.map(function (iconName) {\n return renderIconFromPack(iconName, providersBackstage.icons);\n }) : Optional.none();\n var components = icon.isSome() ? componentRenderPipeline([icon]) : [];\n var innerHtml = icon.isSome() ? {} : { innerHtml: translatedText };\n var classes = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], !spec.primary && !spec.borderless ? [\n 'tox-button',\n 'tox-button--secondary'\n ] : ['tox-button'], true), icon.isSome() ? ['tox-button--icon'] : [], true), spec.borderless ? ['tox-button--naked'] : [], true), extraClasses, true);\n var dom = __assign(__assign({\n tag: 'button',\n classes: classes\n }, innerHtml), { attributes: { title: translatedText } });\n return renderCommonSpec(spec, action, extraBehaviours, dom, components, providersBackstage);\n };\n var renderButton = function (spec, action, providersBackstage, extraBehaviours, extraClasses) {\n if (extraBehaviours === void 0) {\n extraBehaviours = [];\n }\n if (extraClasses === void 0) {\n extraClasses = [];\n }\n var buttonSpec = renderButtonSpec(spec, Optional.some(action), providersBackstage, extraBehaviours, extraClasses);\n return Button.sketch(buttonSpec);\n };\n var getAction = function (name, buttonType) {\n return function (comp) {\n if (buttonType === 'custom') {\n emitWith(comp, formActionEvent, {\n name: 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 };\n var isMenuFooterButtonSpec = function (spec, buttonType) {\n return buttonType === 'menu';\n };\n var isNormalFooterButtonSpec = function (spec, buttonType) {\n return buttonType === 'custom' || buttonType === 'cancel' || buttonType === 'submit';\n };\n var renderFooterButton = function (spec, buttonType, backstage) {\n if (isMenuFooterButtonSpec(spec, buttonType)) {\n var getButton = function () {\n return memButton_1;\n };\n var menuButtonSpec = spec;\n var fixedSpec = __assign(__assign({}, spec), {\n onSetup: function (api) {\n api.setDisabled(spec.disabled);\n return noop;\n },\n fetch: getFetch(menuButtonSpec.items, getButton, backstage)\n });\n var memButton_1 = record(renderMenuButton(fixedSpec, 'tox-tbtn', backstage, Optional.none()));\n return memButton_1.asSpec();\n } else if (isNormalFooterButtonSpec(spec, buttonType)) {\n var action = getAction(spec.name, buttonType);\n var buttonSpec = __assign(__assign({}, spec), { borderless: false });\n return renderButton(buttonSpec, action, backstage.shared.providers, []);\n } else {\n console.error('Unknown footer button type: ', buttonType);\n }\n };\n var renderDialogButton = function (spec, providersBackstage) {\n var action = getAction(spec.name, 'custom');\n return renderFormField(Optional.none(), FormField.parts.field(__assign({ factory: Button }, renderButtonSpec(spec, Optional.some(action), providersBackstage, [\n RepresentingConfigs.memory(''),\n ComposingConfigs.self()\n ]))));\n };\n\n var 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 ]);\n var getField = function (comp, detail, partName) {\n return getPart(comp, detail, partName).bind(Composing.getCurrent);\n };\n var coupledPart = function (selfName, otherName) {\n return required({\n factory: FormField,\n name: selfName,\n overrides: function (detail) {\n return {\n fieldBehaviours: derive$1([config('coupled-input-behaviour', [run$1(input(), function (me) {\n getField(me, detail, otherName).each(function (other) {\n getPart(me, detail, 'lock').each(function (lock) {\n if (Toggling.isOn(lock)) {\n detail.onLockedChange(me, other, lock);\n }\n });\n });\n })])])\n };\n }\n });\n };\n var 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: function (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 var factory$f = function (detail, components, _spec, _externals) {\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: SketchBehaviours.augment(detail.coupledFieldBehaviours, [\n Composing.config({ find: Optional.some }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function (comp) {\n var _a;\n var parts = getPartsOrDie(comp, detail, [\n 'field1',\n 'field2'\n ]);\n return _a = {}, _a[detail.field1Name] = Representing.getValue(parts.field1()), _a[detail.field2Name] = Representing.getValue(parts.field2()), _a;\n },\n setValue: function (comp, value) {\n var 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: function (component) {\n return getPart(component, detail, 'field1');\n },\n getField2: function (component) {\n return getPart(component, detail, 'field2');\n },\n getLock: function (component) {\n return getPart(component, detail, 'lock');\n }\n }\n };\n };\n var FormCoupledInputs = composite({\n name: 'FormCoupledInputs',\n configFields: schema$h(),\n partFields: parts$c(),\n factory: factory$f,\n apis: {\n getField1: function (apis, component) {\n return apis.getField1(component);\n },\n getField2: function (apis, component) {\n return apis.getField2(component);\n },\n getLock: function (apis, component) {\n return apis.getLock(component);\n }\n }\n });\n\n var formatSize = function (size) {\n var 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 var maxDecimal = function (unit) {\n return unit in unitDec ? unitDec[unit] : 1;\n };\n var 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 var parseSize = function (sizeText) {\n var numPattern = /^\\s*(\\d+(?:\\.\\d+)?)\\s*(|cm|mm|in|px|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax|%)\\s*$/;\n var match = numPattern.exec(sizeText);\n if (match !== null) {\n var value = parseFloat(match[1]);\n var unit = match[2];\n return Result.value({\n value: value,\n unit: unit\n });\n } else {\n return Result.error(sizeText);\n }\n };\n var convertUnit = function (size, unit) {\n var 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 var supported = function (u) {\n return has$2(inInch, u);\n };\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 var noSizeConversion = function (_input) {\n return Optional.none();\n };\n var ratioSizeConversion = function (scale, unit) {\n return function (size) {\n return convertUnit(size, unit).map(function (value) {\n return {\n value: value * scale,\n unit: unit\n };\n });\n };\n };\n var makeRatioConverter = function (currentFieldText, otherFieldText) {\n var cValue = parseSize(currentFieldText).toOptional();\n var oValue = parseSize(otherFieldText).toOptional();\n return lift2(cValue, oValue, function (cSize, oSize) {\n return convertUnit(cSize, oSize.unit).map(function (val) {\n return oSize.value / val;\n }).map(function (r) {\n return ratioSizeConversion(r, oSize.unit);\n }).getOr(noSizeConversion);\n }).getOr(noSizeConversion);\n };\n\n var renderSizeInput = function (spec, providersBackstage) {\n var converter = noSizeConversion;\n var ratioEvent = generate$6('ratio-event');\n var makeIcon = function (iconName) {\n return render$3(iconName, {\n tag: 'span',\n classes: [\n 'tox-icon',\n 'tox-lock-icon__' + iconName\n ]\n }, providersBackstage.icons);\n };\n var 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: { title: providersBackstage.translate(spec.label.getOr('Constrain proportions')) }\n },\n components: [\n makeIcon('lock'),\n makeIcon('unlock')\n ],\n buttonBehaviours: derive$1([\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n }\n }),\n receivingConfig(),\n Tabstopping.config({})\n ])\n });\n var formGroup = function (components) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: components\n };\n };\n var getFieldPart = function (isField1) {\n return FormField.parts.field({\n factory: Input,\n inputClasses: ['tox-textfield'],\n inputBehaviours: derive$1([\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n }\n }),\n receivingConfig(),\n Tabstopping.config({}),\n config('size-input-events', [\n run$1(focusin(), function (component, _simulatedEvent) {\n emitWith(component, ratioEvent, { isField1: isField1 });\n }),\n run$1(change(), function (component, _simulatedEvent) {\n emitWith(component, formChangeEvent, { name: spec.name });\n })\n ])\n ]),\n selectOnFocus: false\n });\n };\n var getLabel = function (label) {\n return {\n dom: {\n tag: 'label',\n classes: ['tox-label'],\n innerHtml: providersBackstage.translate(label)\n }\n };\n };\n var widthField = FormCoupledInputs.parts.field1(formGroup([\n FormField.parts.label(getLabel('Width')),\n getFieldPart(true)\n ]));\n var 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(' '),\n pLock\n ])\n ]\n }],\n field1Name: 'width',\n field2Name: 'height',\n locked: true,\n markers: { lockClass: 'tox-locked' },\n onLockedChange: function (current, other, _lock) {\n parseSize(Representing.getValue(current)).each(function (size) {\n converter(size).each(function (newSize) {\n Representing.setValue(other, formatSize(newSize));\n });\n });\n },\n coupledFieldBehaviours: derive$1([\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n },\n onDisabled: function (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: function (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 receivingConfig(),\n config('size-input-events2', [run$1(ratioEvent, function (component, simulatedEvent) {\n var isField1 = simulatedEvent.event.isField1;\n var optCurrent = isField1 ? FormCoupledInputs.getField1(component) : FormCoupledInputs.getField2(component);\n var optOther = isField1 ? FormCoupledInputs.getField2(component) : FormCoupledInputs.getField1(component);\n var value1 = optCurrent.map(Representing.getValue).getOr('');\n var value2 = optOther.map(Representing.getValue).getOr('');\n converter = makeRatioConverter(value1, value2);\n })])\n ])\n });\n };\n\n var undo = constant$1(generate$6('undo'));\n var redo = constant$1(generate$6('redo'));\n var zoom = constant$1(generate$6('zoom'));\n var back = constant$1(generate$6('back'));\n var apply$1 = constant$1(generate$6('apply'));\n var swap = constant$1(generate$6('swap'));\n var transform$1 = constant$1(generate$6('transform'));\n var tempTransform = constant$1(generate$6('temp-transform'));\n var transformApply = constant$1(generate$6('transform-apply'));\n var internal = {\n undo: undo,\n redo: redo,\n zoom: zoom,\n back: back,\n apply: apply$1,\n swap: swap,\n transform: transform$1,\n tempTransform: tempTransform,\n transformApply: transformApply\n };\n var saveState = constant$1('save-state');\n var disable = constant$1('disable');\n var enable = constant$1('enable');\n var external = {\n formActionEvent: formActionEvent,\n saveState: saveState,\n disable: disable,\n enable: enable\n };\n\n var renderEditPanel = function (imagePanel, providersBackstage) {\n var createButton = function (text, action, disabled, primary) {\n return record(renderButton({\n name: text,\n text: text,\n disabled: disabled,\n primary: primary,\n icon: Optional.none(),\n borderless: false\n }, action, providersBackstage));\n };\n var createIconButton = function (icon, tooltip, action, disabled) {\n return record(renderIconButton({\n name: icon,\n icon: Optional.some(icon),\n tooltip: Optional.some(tooltip),\n disabled: disabled,\n primary: false,\n borderless: false\n }, action, providersBackstage));\n };\n var disableAllComponents = function (comps, eventcomp) {\n comps.map(function (mem) {\n var component = mem.get(eventcomp);\n if (component.hasConfigured(Disabling)) {\n Disabling.disable(component);\n }\n });\n };\n var enableAllComponents = function (comps, eventcomp) {\n comps.map(function (mem) {\n var component = mem.get(eventcomp);\n if (component.hasConfigured(Disabling)) {\n Disabling.enable(component);\n }\n });\n };\n var panelDom = {\n tag: 'div',\n classes: [\n 'tox-image-tools__toolbar',\n 'tox-image-tools-edit-panel'\n ]\n };\n var noop$1 = noop;\n var emit$1 = function (comp, event, data) {\n emitWith(comp, event, data);\n };\n var emitDisable = function (component) {\n return emit(component, external.disable());\n };\n var emitEnable = function (component) {\n return emit(component, external.enable());\n };\n var emitTransform = function (comp, transform) {\n emitDisable(comp);\n emit$1(comp, internal.transform(), { transform: transform });\n emitEnable(comp);\n };\n var emitTempTransform = function (comp, transform) {\n emitDisable(comp);\n emit$1(comp, internal.tempTransform(), { transform: transform });\n emitEnable(comp);\n };\n var getBackSwap = function (anyInSystem) {\n return function () {\n memContainer.getOpt(anyInSystem).each(function (container) {\n Replacing.set(container, [ButtonPanel]);\n });\n };\n };\n var emitTransformApply = function (comp, transform) {\n emitDisable(comp);\n emit$1(comp, internal.transformApply(), {\n transform: transform,\n swap: getBackSwap(comp)\n });\n emitEnable(comp);\n };\n var createBackButton = function () {\n return createButton('Back', function (button) {\n return emit$1(button, internal.back(), { swap: getBackSwap(button) });\n }, false, false);\n };\n var createSpacer = function () {\n return record({\n dom: {\n tag: 'div',\n classes: ['tox-spacer']\n },\n behaviours: derive$1([Disabling.config({})])\n });\n };\n var createApplyButton = function () {\n return createButton('Apply', function (button) {\n return emit$1(button, internal.apply(), { swap: getBackSwap(button) });\n }, true, true);\n };\n var makeCropTransform = function () {\n return function (ir) {\n var rect = imagePanel.getRect();\n return crop(ir, rect.x, rect.y, rect.w, rect.h);\n };\n };\n var cropPanelComponents = [\n createBackButton(),\n createSpacer(),\n createButton('Apply', function (button) {\n var transform = makeCropTransform();\n emitTransformApply(button, transform);\n imagePanel.hideCrop();\n }, false, true)\n ];\n var CropPanel = Container.sketch({\n dom: panelDom,\n components: cropPanelComponents.map(function (mem) {\n return mem.asSpec();\n }),\n containerBehaviours: derive$1([config('image-tools-crop-buttons-events', [\n run$1(external.disable(), function (comp, _se) {\n disableAllComponents(cropPanelComponents, comp);\n }),\n run$1(external.enable(), function (comp, _se) {\n enableAllComponents(cropPanelComponents, comp);\n })\n ])])\n });\n var memSize = record(renderSizeInput({\n name: 'size',\n label: Optional.none(),\n constrain: true,\n disabled: false\n }, providersBackstage));\n var makeResizeTransform = function (width, height) {\n return function (ir) {\n return resize$1(ir, width, height);\n };\n };\n var resizePanelComponents = [\n createBackButton(),\n createSpacer(),\n memSize,\n createSpacer(),\n createButton('Apply', function (button) {\n memSize.getOpt(button).each(function (sizeInput) {\n var value = Representing.getValue(sizeInput);\n var width = parseInt(value.width, 10);\n var height = parseInt(value.height, 10);\n var transform = makeResizeTransform(width, height);\n emitTransformApply(button, transform);\n });\n }, false, true)\n ];\n var ResizePanel = Container.sketch({\n dom: panelDom,\n components: resizePanelComponents.map(function (mem) {\n return mem.asSpec();\n }),\n containerBehaviours: derive$1([config('image-tools-resize-buttons-events', [\n run$1(external.disable(), function (comp, _se) {\n disableAllComponents(resizePanelComponents, comp);\n }),\n run$1(external.enable(), function (comp, _se) {\n enableAllComponents(resizePanelComponents, comp);\n })\n ])])\n });\n var makeValueTransform = function (transform, value) {\n return function (ir) {\n return transform(ir, value);\n };\n };\n var horizontalFlip = makeValueTransform(flip, 'h');\n var verticalFlip = makeValueTransform(flip, 'v');\n var counterclockwiseRotate = makeValueTransform(rotate, -90);\n var clockwiseRotate = makeValueTransform(rotate, 90);\n var flipRotateOnAction = function (comp, operation) {\n emitTempTransform(comp, operation);\n };\n var flipRotateComponents = [\n createBackButton(),\n createSpacer(),\n createIconButton('flip-horizontally', 'Flip horizontally', function (button) {\n flipRotateOnAction(button, horizontalFlip);\n }, false),\n createIconButton('flip-vertically', 'Flip vertically', function (button) {\n flipRotateOnAction(button, verticalFlip);\n }, false),\n createIconButton('rotate-left', 'Rotate counterclockwise', function (button) {\n flipRotateOnAction(button, counterclockwiseRotate);\n }, false),\n createIconButton('rotate-right', 'Rotate clockwise', function (button) {\n flipRotateOnAction(button, clockwiseRotate);\n }, false),\n createSpacer(),\n createApplyButton()\n ];\n var FlipRotatePanel = Container.sketch({\n dom: panelDom,\n components: flipRotateComponents.map(function (mem) {\n return mem.asSpec();\n }),\n containerBehaviours: derive$1([config('image-tools-fliprotate-buttons-events', [\n run$1(external.disable(), function (comp, _se) {\n disableAllComponents(flipRotateComponents, comp);\n }),\n run$1(external.enable(), function (comp, _se) {\n enableAllComponents(flipRotateComponents, comp);\n })\n ])])\n });\n var makeSlider = function (label, onChoose, min, value, max) {\n var labelPart = Slider.parts.label({\n dom: {\n tag: 'label',\n classes: ['tox-label'],\n innerHtml: providersBackstage.translate(label)\n }\n });\n var spectrum = Slider.parts.spectrum({\n dom: {\n tag: 'div',\n classes: ['tox-slider__rail'],\n attributes: { role: 'presentation' }\n }\n });\n var thumb = Slider.parts.thumb({\n dom: {\n tag: 'div',\n classes: ['tox-slider__handle'],\n attributes: { role: 'presentation' }\n }\n });\n return record(Slider.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-slider'],\n attributes: { role: 'presentation' }\n },\n model: {\n mode: 'x',\n minX: min,\n maxX: max,\n getInitialValue: constant$1({ x: value })\n },\n components: [\n labelPart,\n spectrum,\n thumb\n ],\n sliderBehaviours: derive$1([Focusing.config({})]),\n onChoose: onChoose\n }));\n };\n var makeVariableSlider = function (label, transform, min, value, max) {\n var onChoose = function (slider, _thumb, value) {\n var valTransform = makeValueTransform(transform, value.x / 100);\n emitTransform(slider, valTransform);\n };\n return makeSlider(label, onChoose, min, value, max);\n };\n var variableFilterPanelComponents = function (label, transform, min, value, max) {\n return [\n createBackButton(),\n makeVariableSlider(label, transform, min, value, max),\n createApplyButton()\n ];\n };\n var createVariableFilterPanel = function (label, transform, min, value, max) {\n var filterPanelComponents = variableFilterPanelComponents(label, transform, min, value, max);\n return Container.sketch({\n dom: panelDom,\n components: filterPanelComponents.map(function (mem) {\n return mem.asSpec();\n }),\n containerBehaviours: derive$1([config('image-tools-filter-panel-buttons-events', [\n run$1(external.disable(), function (comp, _se) {\n disableAllComponents(filterPanelComponents, comp);\n }),\n run$1(external.enable(), function (comp, _se) {\n enableAllComponents(filterPanelComponents, comp);\n })\n ])])\n });\n };\n var filterPanelComponents = [\n createBackButton(),\n createSpacer(),\n createApplyButton()\n ];\n var FilterPanel = Container.sketch({\n dom: panelDom,\n components: filterPanelComponents.map(function (mem) {\n return mem.asSpec();\n })\n });\n var BrightnessPanel = createVariableFilterPanel('Brightness', brightness, -100, 0, 100);\n var ContrastPanel = createVariableFilterPanel('Contrast', contrast, -100, 0, 100);\n var GammaPanel = createVariableFilterPanel('Gamma', gamma, -100, 0, 100);\n var makeColorTransform = function (red, green, blue) {\n return function (ir) {\n return colorize(ir, red, green, blue);\n };\n };\n var makeColorSlider = function (label) {\n var onChoose = function (slider, _thumb, _value) {\n var redOpt = memRed.getOpt(slider);\n var blueOpt = memBlue.getOpt(slider);\n var greenOpt = memGreen.getOpt(slider);\n redOpt.each(function (red) {\n blueOpt.each(function (blue) {\n greenOpt.each(function (green) {\n var r = Representing.getValue(red).x / 100;\n var g = Representing.getValue(green).x / 100;\n var b = Representing.getValue(blue).x / 100;\n var transform = makeColorTransform(r, g, b);\n emitTransform(slider, transform);\n });\n });\n });\n };\n return makeSlider(label, onChoose, 0, 100, 200);\n };\n var memRed = makeColorSlider('R');\n var memGreen = makeColorSlider('G');\n var memBlue = makeColorSlider('B');\n var colorizePanelComponents = [\n createBackButton(),\n memRed,\n memGreen,\n memBlue,\n createApplyButton()\n ];\n var ColorizePanel = Container.sketch({\n dom: panelDom,\n components: colorizePanelComponents.map(function (mem) {\n return mem.asSpec();\n })\n });\n var getTransformPanelEvent = function (panel, transform, update) {\n return function (button) {\n var swap = function () {\n memContainer.getOpt(button).each(function (container) {\n Replacing.set(container, [panel]);\n update(container);\n });\n };\n emit$1(button, internal.swap(), {\n transform: transform,\n swap: swap\n });\n };\n };\n var cropPanelUpdate = function (_anyInSystem) {\n imagePanel.showCrop();\n };\n var resizePanelUpdate = function (anyInSystem) {\n memSize.getOpt(anyInSystem).each(function (sizeInput) {\n var measurements = imagePanel.getMeasurements();\n var width = measurements.width;\n var height = measurements.height;\n Representing.setValue(sizeInput, {\n width: width,\n height: height\n });\n });\n };\n var sharpenTransform = Optional.some(sharpen);\n var invertTransform = Optional.some(invert);\n var buttonPanelComponents = [\n createIconButton('crop', 'Crop', getTransformPanelEvent(CropPanel, Optional.none(), cropPanelUpdate), false),\n createIconButton('resize', 'Resize', getTransformPanelEvent(ResizePanel, Optional.none(), resizePanelUpdate), false),\n createIconButton('orientation', 'Orientation', getTransformPanelEvent(FlipRotatePanel, Optional.none(), noop$1), false),\n createIconButton('brightness', 'Brightness', getTransformPanelEvent(BrightnessPanel, Optional.none(), noop$1), false),\n createIconButton('sharpen', 'Sharpen', getTransformPanelEvent(FilterPanel, sharpenTransform, noop$1), false),\n createIconButton('contrast', 'Contrast', getTransformPanelEvent(ContrastPanel, Optional.none(), noop$1), false),\n createIconButton('color-levels', 'Color levels', getTransformPanelEvent(ColorizePanel, Optional.none(), noop$1), false),\n createIconButton('gamma', 'Gamma', getTransformPanelEvent(GammaPanel, Optional.none(), noop$1), false),\n createIconButton('invert', 'Invert', getTransformPanelEvent(FilterPanel, invertTransform, noop$1), false)\n ];\n var ButtonPanel = Container.sketch({\n dom: panelDom,\n components: buttonPanelComponents.map(function (mem) {\n return mem.asSpec();\n })\n });\n var container = Container.sketch({\n dom: { tag: 'div' },\n components: [ButtonPanel],\n containerBehaviours: derive$1([Replacing.config({})])\n });\n var memContainer = record(container);\n var getApplyButton = function (anyInSystem) {\n return memContainer.getOpt(anyInSystem).map(function (container) {\n var panel = container.components()[0];\n return panel.components()[panel.components().length - 1];\n });\n };\n return {\n memContainer: memContainer,\n getApplyButton: getApplyButton\n };\n };\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.geom.Rect');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Observable');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var getDocumentSize = function (doc) {\n var max = Math.max;\n var documentElement = doc.documentElement;\n var body = doc.body;\n var scrollWidth = max(documentElement.scrollWidth, body.scrollWidth);\n var clientWidth = max(documentElement.clientWidth, body.clientWidth);\n var offsetWidth = max(documentElement.offsetWidth, body.offsetWidth);\n var scrollHeight = max(documentElement.scrollHeight, body.scrollHeight);\n var clientHeight = max(documentElement.clientHeight, body.clientHeight);\n var offsetHeight = max(documentElement.offsetHeight, body.offsetHeight);\n return {\n width: scrollWidth < offsetWidth ? clientWidth : scrollWidth,\n height: scrollHeight < offsetHeight ? clientHeight : scrollHeight\n };\n };\n var isTouchEvent$1 = function (e) {\n return isNonNullable(e.changedTouches);\n };\n var updateWithTouchData = function (e) {\n if (isTouchEvent$1(e)) {\n var keys = 'screenX screenY pageX pageY clientX clientY'.split(' ');\n for (var i = 0; i < keys.length; i++) {\n e[keys[i]] = e.changedTouches[0][keys[i]];\n }\n }\n };\n function DragHelper (id, settings) {\n var _a, _b, _c;\n var eventOverlay;\n var handleEvents = [];\n var overlayEvents = [];\n var doc = (_a = settings.document) !== null && _a !== void 0 ? _a : document;\n var root = (_b = settings.root) !== null && _b !== void 0 ? _b : doc;\n var sugarDoc = SugarElement.fromDom(doc);\n var downButton;\n var startX;\n var startY;\n var handleElement = SugarElement.fromDom(root.getElementById((_c = settings.handle) !== null && _c !== void 0 ? _c : id));\n var start = function (e) {\n var rawEvent = e.raw;\n var docSize = getDocumentSize(doc);\n updateWithTouchData(rawEvent);\n e.prevent();\n downButton = rawEvent.button;\n startX = rawEvent.screenX;\n startY = rawEvent.screenY;\n var cursor = get$c(handleElement, 'cursor');\n eventOverlay = SugarElement.fromTag('div', doc);\n setAll(eventOverlay, {\n 'position': 'absolute',\n 'top': '0',\n 'left': '0',\n 'width': docSize.width + 'px',\n 'height': docSize.height + 'px',\n 'z-index': 2147483647 + '',\n 'opacity': '0.0001',\n cursor: cursor\n });\n append$2(getBody(sugarDoc), eventOverlay);\n overlayEvents.push(bind(sugarDoc, 'mousemove', drag), bind(sugarDoc, 'touchmove', drag), bind(sugarDoc, 'mouseup', stop), bind(sugarDoc, 'touchend', stop));\n settings.start(rawEvent);\n };\n var drag = function (e) {\n var rawEvent = e.raw;\n updateWithTouchData(rawEvent);\n if (rawEvent.button !== downButton) {\n return stop(e);\n }\n rawEvent.deltaX = rawEvent.screenX - startX;\n rawEvent.deltaY = rawEvent.screenY - startY;\n e.prevent();\n settings.drag(rawEvent);\n };\n var stop = function (e) {\n updateWithTouchData(e.raw);\n each$1(overlayEvents, function (e) {\n return e.unbind();\n });\n overlayEvents = [];\n remove$5(eventOverlay);\n if (settings.stop) {\n settings.stop(e.raw);\n }\n };\n var destroy = function () {\n each$1(overlayEvents.concat(handleEvents), function (e) {\n return e.unbind();\n });\n overlayEvents = [];\n handleEvents = [];\n if (isNonNullable(eventOverlay)) {\n remove$5(eventOverlay);\n }\n };\n handleEvents.push(bind(handleElement, 'mousedown', start), bind(handleElement, 'touchstart', start));\n return { destroy: destroy };\n }\n\n var count = 0;\n var create$2 = function (currentRect, viewPortRect, clampRect, containerElm, action) {\n var dragHelpers;\n var events = [];\n var prefix = 'tox-';\n var id = prefix + 'crid-' + count++;\n var container = SugarElement.fromDom(containerElm);\n var handles = [\n {\n name: 'move',\n xMul: 0,\n yMul: 0,\n deltaX: 1,\n deltaY: 1,\n deltaW: 0,\n deltaH: 0,\n label: 'Crop Mask'\n },\n {\n name: 'nw',\n xMul: 0,\n yMul: 0,\n deltaX: 1,\n deltaY: 1,\n deltaW: -1,\n deltaH: -1,\n label: 'Top Left Crop Handle'\n },\n {\n name: 'ne',\n xMul: 1,\n yMul: 0,\n deltaX: 0,\n deltaY: 1,\n deltaW: 1,\n deltaH: -1,\n label: 'Top Right Crop Handle'\n },\n {\n name: 'sw',\n xMul: 0,\n yMul: 1,\n deltaX: 1,\n deltaY: 0,\n deltaW: -1,\n deltaH: 1,\n label: 'Bottom Left Crop Handle'\n },\n {\n name: 'se',\n xMul: 1,\n yMul: 1,\n deltaX: 0,\n deltaY: 0,\n deltaW: 1,\n deltaH: 1,\n label: 'Bottom Right Crop Handle'\n }\n ];\n var blockers = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ];\n var getAbsoluteRect = function (outerRect, relativeRect) {\n return {\n x: relativeRect.x + outerRect.x,\n y: relativeRect.y + outerRect.y,\n w: relativeRect.w,\n h: relativeRect.h\n };\n };\n var getRelativeRect = function (outerRect, innerRect) {\n return {\n x: innerRect.x - outerRect.x,\n y: innerRect.y - outerRect.y,\n w: innerRect.w,\n h: innerRect.h\n };\n };\n var getInnerRect = function () {\n return getRelativeRect(clampRect, currentRect);\n };\n var moveRect = function (handle, startRect, deltaX, deltaY) {\n var x = startRect.x + deltaX * handle.deltaX;\n var y = startRect.y + deltaY * handle.deltaY;\n var w = Math.max(20, startRect.w + deltaX * handle.deltaW);\n var h = Math.max(20, startRect.h + deltaY * handle.deltaH);\n var rect = currentRect = global$4.clamp({\n x: x,\n y: y,\n w: w,\n h: h\n }, clampRect, handle.name === 'move');\n rect = getRelativeRect(clampRect, rect);\n instance.fire('updateRect', { rect: rect });\n setInnerRect(rect);\n };\n var render = function () {\n var createDragHelper = function (handle) {\n var startRect;\n return DragHelper(id, {\n document: containerElm.ownerDocument,\n root: getRootNode(container).dom,\n handle: id + '-' + handle.name,\n start: function () {\n startRect = currentRect;\n },\n drag: function (e) {\n moveRect(handle, startRect, e.deltaX, e.deltaY);\n }\n });\n };\n var cropContainer = SugarElement.fromTag('div');\n setAll$1(cropContainer, {\n id: id,\n 'class': prefix + 'croprect-container',\n 'role': 'grid',\n 'aria-dropeffect': 'execute'\n });\n append$2(container, cropContainer);\n each$1(blockers, function (blocker) {\n descendant(container, '#' + id).each(function (blockerElm) {\n var cropBlocker = SugarElement.fromTag('div');\n setAll$1(cropBlocker, {\n 'id': id + '-' + blocker,\n 'class': prefix + 'croprect-block',\n 'data-mce-bogus': 'all'\n });\n set$7(cropBlocker, 'display', 'none');\n append$2(blockerElm, cropBlocker);\n });\n });\n each$1(handles, function (handle) {\n descendant(container, '#' + id).each(function (handleElm) {\n var cropHandle = SugarElement.fromTag('div');\n setAll$1(cropHandle, {\n 'id': id + '-' + handle.name,\n 'aria-label': handle.label,\n 'aria-grabbed': 'false',\n 'data-mce-bogus': 'all',\n 'role': 'gridcell',\n 'tabindex': '-1',\n 'title': handle.label\n });\n add$1(cropHandle, [\n prefix + 'croprect-handle',\n prefix + 'croprect-handle-' + handle.name\n ]);\n set$7(cropHandle, 'display', 'none');\n append$2(handleElm, cropHandle);\n });\n });\n dragHelpers = map$2(handles, createDragHelper);\n repaint(currentRect);\n var handleFocus = function (e) {\n set$8(e.target, 'aria-grabbed', e.raw.type === 'focus' ? 'true' : 'false');\n };\n var handleKeydown = function (e) {\n var activeHandle;\n each$1(handles, function (handle) {\n if (get$d(e.target, 'id') === id + '-' + handle.name) {\n activeHandle = handle;\n return false;\n }\n });\n var moveAndBlock = function (evt, handle, startRect, deltaX, deltaY) {\n evt.stopPropagation();\n evt.preventDefault();\n moveRect(activeHandle, startRect, deltaX, deltaY);\n };\n switch (e.raw.keyCode) {\n case global$2.LEFT:\n moveAndBlock(e, activeHandle, currentRect, -10, 0);\n break;\n case global$2.RIGHT:\n moveAndBlock(e, activeHandle, currentRect, 10, 0);\n break;\n case global$2.UP:\n moveAndBlock(e, activeHandle, currentRect, 0, -10);\n break;\n case global$2.DOWN:\n moveAndBlock(e, activeHandle, currentRect, 0, 10);\n break;\n case global$2.ENTER:\n case global$2.SPACEBAR:\n e.prevent();\n action();\n break;\n }\n };\n events.push(bind(container, 'focusin', handleFocus), bind(container, 'focusout', handleFocus), bind(container, 'keydown', handleKeydown));\n };\n var toggleVisibility = function (state) {\n var selectors = __spreadArray(__spreadArray([], map$2(handles, function (handle) {\n return '#' + id + '-' + handle.name;\n }), true), map$2(blockers, function (blocker) {\n return '#' + id + '-' + blocker;\n }), true).join(',');\n var elems = descendants(container, selectors);\n if (state) {\n each$1(elems, function (elm) {\n return remove$6(elm, 'display');\n });\n } else {\n each$1(elems, function (elm) {\n return set$7(elm, 'display', 'none');\n });\n }\n };\n var repaint = function (rect) {\n var updateElementRect = function (name, newRect) {\n descendant(container, '#' + id + '-' + name).each(function (elm) {\n setAll(elm, {\n left: newRect.x + 'px',\n top: newRect.y + 'px',\n width: Math.max(0, newRect.w) + 'px',\n height: Math.max(0, newRect.h) + 'px'\n });\n });\n };\n each$1(handles, function (handle) {\n descendant(container, '#' + id + '-' + handle.name).each(function (elm) {\n setAll(elm, {\n left: rect.w * handle.xMul + rect.x + 'px',\n top: rect.h * handle.yMul + rect.y + 'px'\n });\n });\n });\n updateElementRect('top', {\n x: viewPortRect.x,\n y: viewPortRect.y,\n w: viewPortRect.w,\n h: rect.y - viewPortRect.y\n });\n updateElementRect('right', {\n x: rect.x + rect.w,\n y: rect.y,\n w: viewPortRect.w - rect.x - rect.w + viewPortRect.x,\n h: rect.h\n });\n updateElementRect('bottom', {\n x: viewPortRect.x,\n y: rect.y + rect.h,\n w: viewPortRect.w,\n h: viewPortRect.h - rect.y - rect.h + viewPortRect.y\n });\n updateElementRect('left', {\n x: viewPortRect.x,\n y: rect.y,\n w: rect.x - viewPortRect.x,\n h: rect.h\n });\n updateElementRect('move', rect);\n };\n var setRect = function (rect) {\n currentRect = rect;\n repaint(currentRect);\n };\n var setViewPortRect = function (rect) {\n viewPortRect = rect;\n repaint(currentRect);\n };\n var setInnerRect = function (rect) {\n setRect(getAbsoluteRect(clampRect, rect));\n };\n var setClampRect = function (rect) {\n clampRect = rect;\n repaint(currentRect);\n };\n var destroy = function () {\n each$1(dragHelpers, function (helper) {\n return helper.destroy();\n });\n dragHelpers = [];\n each$1(events, function (e) {\n return e.unbind();\n });\n events = [];\n };\n render();\n var instance = __assign(__assign({}, global$3), {\n toggleVisibility: toggleVisibility,\n setClampRect: setClampRect,\n setRect: setRect,\n getInnerRect: getInnerRect,\n setInnerRect: setInnerRect,\n setViewPortRect: setViewPortRect,\n destroy: destroy\n });\n return instance;\n };\n var CropRect = { create: create$2 };\n\n var loadImage = function (image) {\n return new global$c(function (resolve) {\n var loaded = function () {\n image.removeEventListener('load', loaded);\n resolve(image);\n };\n if (image.complete) {\n resolve(image);\n } else {\n image.addEventListener('load', loaded);\n }\n });\n };\n var renderImagePanel = function (initialUrl) {\n var memBg = record({\n dom: {\n tag: 'div',\n classes: ['tox-image-tools__image-bg'],\n attributes: { role: 'presentation' }\n }\n });\n var zoomState = Cell(1);\n var cropRect = api$1();\n var rectState = Cell({\n x: 0,\n y: 0,\n w: 1,\n h: 1\n });\n var viewRectState = Cell({\n x: 0,\n y: 0,\n w: 1,\n h: 1\n });\n var repaintImg = function (anyInSystem, img) {\n memContainer.getOpt(anyInSystem).each(function (panel) {\n var zoom = zoomState.get();\n var panelW = get$a(panel.element);\n var panelH = get$b(panel.element);\n var width = img.dom.naturalWidth * zoom;\n var height = img.dom.naturalHeight * zoom;\n var left = Math.max(0, panelW / 2 - width / 2);\n var top = Math.max(0, panelH / 2 - height / 2);\n var css = {\n left: left.toString() + 'px',\n top: top.toString() + 'px',\n width: width.toString() + 'px',\n height: height.toString() + 'px',\n position: 'absolute'\n };\n setAll(img, css);\n memBg.getOpt(panel).each(function (bg) {\n setAll(bg.element, css);\n });\n cropRect.run(function (cRect) {\n var rect = rectState.get();\n cRect.setRect({\n x: rect.x * zoom + left,\n y: rect.y * zoom + top,\n w: rect.w * zoom,\n h: rect.h * zoom\n });\n cRect.setClampRect({\n x: left,\n y: top,\n w: width,\n h: height\n });\n cRect.setViewPortRect({\n x: 0,\n y: 0,\n w: panelW,\n h: panelH\n });\n });\n });\n };\n var zoomFit = function (anyInSystem, img) {\n memContainer.getOpt(anyInSystem).each(function (panel) {\n var panelW = get$a(panel.element);\n var panelH = get$b(panel.element);\n var width = img.dom.naturalWidth;\n var height = img.dom.naturalHeight;\n var zoom = Math.min(panelW / width, panelH / height);\n if (zoom >= 1) {\n zoomState.set(1);\n } else {\n zoomState.set(zoom);\n }\n });\n };\n var updateSrc = function (anyInSystem, url) {\n var img = SugarElement.fromTag('img');\n set$8(img, 'src', url);\n return loadImage(img.dom).then(function () {\n if (anyInSystem.getSystem().isConnected()) {\n memContainer.getOpt(anyInSystem).map(function (panel) {\n var aImg = external$2({ element: img });\n Replacing.replaceAt(panel, 1, Optional.some(aImg));\n var lastViewRect = viewRectState.get();\n var viewRect = {\n x: 0,\n y: 0,\n w: img.dom.naturalWidth,\n h: img.dom.naturalHeight\n };\n viewRectState.set(viewRect);\n var rect = global$4.inflate(viewRect, -20, -20);\n rectState.set(rect);\n if (lastViewRect.w !== viewRect.w || lastViewRect.h !== viewRect.h) {\n zoomFit(panel, img);\n }\n repaintImg(panel, img);\n });\n }\n });\n };\n var zoom = function (anyInSystem, direction) {\n var currentZoom = zoomState.get();\n var newZoom = direction > 0 ? Math.min(2, currentZoom + 0.1) : Math.max(0.1, currentZoom - 0.1);\n zoomState.set(newZoom);\n memContainer.getOpt(anyInSystem).each(function (panel) {\n var img = panel.components()[1].element;\n repaintImg(panel, img);\n });\n };\n var showCrop = function () {\n cropRect.run(function (cRect) {\n cRect.toggleVisibility(true);\n });\n };\n var hideCrop = function () {\n cropRect.run(function (cRect) {\n cRect.toggleVisibility(false);\n });\n };\n var getRect = function () {\n return rectState.get();\n };\n var container = Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-image-tools__image']\n },\n components: [\n memBg.asSpec(),\n {\n dom: {\n tag: 'img',\n attributes: { src: initialUrl }\n }\n },\n {\n dom: { tag: 'div' },\n behaviours: derive$1([config('image-panel-crop-events', [\n runOnAttached(function (comp) {\n memContainer.getOpt(comp).each(function (container) {\n var el = container.element.dom;\n var cRect = CropRect.create({\n x: 10,\n y: 10,\n w: 100,\n h: 100\n }, {\n x: 0,\n y: 0,\n w: 200,\n h: 200\n }, {\n x: 0,\n y: 0,\n w: 200,\n h: 200\n }, el, noop);\n cRect.toggleVisibility(false);\n cRect.on('updateRect', function (e) {\n var rect = e.rect;\n var zoom = zoomState.get();\n var newRect = {\n x: Math.round(rect.x / zoom),\n y: Math.round(rect.y / zoom),\n w: Math.round(rect.w / zoom),\n h: Math.round(rect.h / zoom)\n };\n rectState.set(newRect);\n });\n cropRect.set(cRect);\n });\n }),\n runOnDetached(function () {\n cropRect.clear();\n })\n ])])\n }\n ],\n containerBehaviours: derive$1([\n Replacing.config({}),\n config('image-panel-events', [runOnAttached(function (comp) {\n updateSrc(comp, initialUrl);\n })])\n ])\n });\n var memContainer = record(container);\n var getMeasurements = function () {\n var viewRect = viewRectState.get();\n return {\n width: viewRect.w,\n height: viewRect.h\n };\n };\n return {\n memContainer: memContainer,\n updateSrc: updateSrc,\n zoom: zoom,\n showCrop: showCrop,\n hideCrop: hideCrop,\n getRect: getRect,\n getMeasurements: getMeasurements\n };\n };\n\n var createButton = function (innerHtml, icon, disabled, action, providersBackstage) {\n return renderIconButton({\n name: innerHtml,\n icon: Optional.some(icon),\n disabled: disabled,\n tooltip: Optional.some(innerHtml),\n primary: false,\n borderless: false\n }, action, providersBackstage);\n };\n var setButtonEnabled = function (button, enabled) {\n if (enabled) {\n Disabling.enable(button);\n } else {\n Disabling.disable(button);\n }\n };\n var renderSideBar = function (providersBackstage) {\n var updateButtonUndoStates = function (anyInSystem, undoEnabled, redoEnabled) {\n memUndo.getOpt(anyInSystem).each(function (undo) {\n setButtonEnabled(undo, undoEnabled);\n });\n memRedo.getOpt(anyInSystem).each(function (redo) {\n setButtonEnabled(redo, redoEnabled);\n });\n };\n var memUndo = record(createButton('Undo', 'undo', true, function (button) {\n emitWith(button, internal.undo(), { direction: 1 });\n }, providersBackstage));\n var memRedo = record(createButton('Redo', 'redo', true, function (button) {\n emitWith(button, internal.redo(), { direction: 1 });\n }, providersBackstage));\n var container = Container.sketch({\n dom: {\n tag: 'div',\n classes: [\n 'tox-image-tools__toolbar',\n 'tox-image-tools__sidebar'\n ]\n },\n components: [\n memUndo.asSpec(),\n memRedo.asSpec(),\n createButton('Zoom in', 'zoom-in', false, function (button) {\n emitWith(button, internal.zoom(), { direction: 1 });\n }, providersBackstage),\n createButton('Zoom out', 'zoom-out', false, function (button) {\n emitWith(button, internal.zoom(), { direction: -1 });\n }, providersBackstage)\n ]\n });\n return {\n container: container,\n updateButtonUndoStates: updateButtonUndoStates\n };\n };\n\n function UndoStack () {\n var data = [];\n var index = -1;\n var add = function (state) {\n var removed = data.splice(++index);\n data.push(state);\n return {\n state: state,\n removed: removed\n };\n };\n var undo = function () {\n if (canUndo()) {\n return data[--index];\n }\n };\n var redo = function () {\n if (canRedo()) {\n return data[++index];\n }\n };\n var canUndo = function () {\n return index > 0;\n };\n var canRedo = function () {\n return index !== -1 && index < data.length - 1;\n };\n return {\n data: data,\n add: add,\n undo: undo,\n redo: redo,\n canUndo: canUndo,\n canRedo: canRedo\n };\n }\n\n var makeState = function (initialState) {\n var blobState = Cell(initialState);\n var tempState = value$1();\n var undoStack = UndoStack();\n undoStack.add(initialState);\n var getBlobState = function () {\n return blobState.get();\n };\n var setBlobState = function (state) {\n blobState.set(state);\n };\n var getTempState = function () {\n return tempState.get().getOrThunk(blobState.get);\n };\n var updateTempState = function (blob) {\n var newTempState = createState(blob);\n destroyTempState();\n tempState.set(newTempState);\n return newTempState.url;\n };\n var createState = function (blob) {\n return {\n blob: blob,\n url: URL.createObjectURL(blob)\n };\n };\n var destroyState = function (state) {\n URL.revokeObjectURL(state.url);\n };\n var destroyStates = function (states) {\n global$5.each(states, destroyState);\n };\n var destroyTempState = function () {\n tempState.on(destroyState);\n tempState.clear();\n };\n var addBlobState = function (blob) {\n var newState = createState(blob);\n setBlobState(newState);\n var removed = undoStack.add(newState).removed;\n destroyStates(removed);\n return newState.url;\n };\n var addTempState = function (blob) {\n var newState = createState(blob);\n tempState.set(newState);\n return newState.url;\n };\n var applyTempState = function (postApply) {\n return tempState.get().fold(noop, function (temp) {\n addBlobState(temp.blob);\n postApply();\n });\n };\n var undo = function () {\n var currentState = undoStack.undo();\n setBlobState(currentState);\n return currentState.url;\n };\n var redo = function () {\n var currentState = undoStack.redo();\n setBlobState(currentState);\n return currentState.url;\n };\n var getHistoryStates = function () {\n var undoEnabled = undoStack.canUndo();\n var redoEnabled = undoStack.canRedo();\n return {\n undoEnabled: undoEnabled,\n redoEnabled: redoEnabled\n };\n };\n return {\n getBlobState: getBlobState,\n setBlobState: setBlobState,\n addBlobState: addBlobState,\n getTempState: getTempState,\n updateTempState: updateTempState,\n addTempState: addTempState,\n applyTempState: applyTempState,\n destroyTempState: destroyTempState,\n undo: undo,\n redo: redo,\n getHistoryStates: getHistoryStates\n };\n };\n\n var renderImageTools = function (detail, providersBackstage) {\n var state = makeState(detail.currentState);\n var zoom = function (anyInSystem, simulatedEvent) {\n var direction = simulatedEvent.event.direction;\n imagePanel.zoom(anyInSystem, direction);\n };\n var updateButtonUndoStates = function (anyInSystem) {\n var historyStates = state.getHistoryStates();\n sideBar.updateButtonUndoStates(anyInSystem, historyStates.undoEnabled, historyStates.redoEnabled);\n emitWith(anyInSystem, external.formActionEvent, {\n name: external.saveState(),\n value: historyStates.undoEnabled\n });\n };\n var disableUndoRedo = function (anyInSystem) {\n sideBar.updateButtonUndoStates(anyInSystem, false, false);\n };\n var undo = function (anyInSystem, _simulatedEvent) {\n var url = state.undo();\n updateSrc(anyInSystem, url).then(function (_oImg) {\n unblock(anyInSystem);\n updateButtonUndoStates(anyInSystem);\n });\n };\n var redo = function (anyInSystem, _simulatedEvent) {\n var url = state.redo();\n updateSrc(anyInSystem, url).then(function (_oImg) {\n unblock(anyInSystem);\n updateButtonUndoStates(anyInSystem);\n });\n };\n var imageResultToBlob = function (ir) {\n return ir.toBlob();\n };\n var block = function (anyInSystem) {\n emitWith(anyInSystem, external.formActionEvent, {\n name: external.disable(),\n value: {}\n });\n };\n var unblock = function (anyInSystem) {\n editPanel.getApplyButton(anyInSystem).each(function (applyButton) {\n Disabling.enable(applyButton);\n });\n emitWith(anyInSystem, external.formActionEvent, {\n name: external.enable(),\n value: {}\n });\n };\n var updateSrc = function (anyInSystem, src) {\n block(anyInSystem);\n return imagePanel.updateSrc(anyInSystem, src);\n };\n var blobManipulate = function (anyInSystem, blob, filter, action, swap) {\n block(anyInSystem);\n blobToImageResult(blob).then(filter).then(imageResultToBlob).then(action).then(function (url) {\n return updateSrc(anyInSystem, url);\n }).then(function () {\n updateButtonUndoStates(anyInSystem);\n swap();\n unblock(anyInSystem);\n }).catch(function (err) {\n console.log(err);\n if (anyInSystem.getSystem().isConnected()) {\n unblock(anyInSystem);\n }\n });\n };\n var manipulate = function (anyInSystem, filter, swap) {\n var blob = state.getBlobState().blob;\n var action = function (blob) {\n return state.updateTempState(blob);\n };\n blobManipulate(anyInSystem, blob, filter, action, swap);\n };\n var tempManipulate = function (anyInSystem, filter) {\n var blob = state.getTempState().blob;\n var action = function (blob) {\n return state.addTempState(blob);\n };\n blobManipulate(anyInSystem, blob, filter, action, noop);\n };\n var manipulateApply = function (anyInSystem, filter, swap) {\n var blob = state.getBlobState().blob;\n var action = function (blob) {\n var url = state.addBlobState(blob);\n destroyTempState(anyInSystem);\n return url;\n };\n blobManipulate(anyInSystem, blob, filter, action, swap);\n };\n var apply = function (anyInSystem, simulatedEvent) {\n var postApply = function () {\n destroyTempState(anyInSystem);\n var swap = simulatedEvent.event.swap;\n swap();\n };\n state.applyTempState(postApply);\n };\n var destroyTempState = function (anyInSystem) {\n var currentUrl = state.getBlobState().url;\n state.destroyTempState();\n updateButtonUndoStates(anyInSystem);\n return currentUrl;\n };\n var cancel = function (anyInSystem) {\n var currentUrl = destroyTempState(anyInSystem);\n updateSrc(anyInSystem, currentUrl).then(function (_oImg) {\n unblock(anyInSystem);\n });\n };\n var back = function (anyInSystem, simulatedEvent) {\n cancel(anyInSystem);\n var swap = simulatedEvent.event.swap;\n swap();\n imagePanel.hideCrop();\n };\n var transform = function (anyInSystem, simulatedEvent) {\n return manipulate(anyInSystem, simulatedEvent.event.transform, noop);\n };\n var tempTransform = function (anyInSystem, simulatedEvent) {\n return tempManipulate(anyInSystem, simulatedEvent.event.transform);\n };\n var transformApply = function (anyInSystem, simulatedEvent) {\n return manipulateApply(anyInSystem, simulatedEvent.event.transform, simulatedEvent.event.swap);\n };\n var imagePanel = renderImagePanel(detail.currentState.url);\n var sideBar = renderSideBar(providersBackstage);\n var editPanel = renderEditPanel(imagePanel, providersBackstage);\n var swap = function (anyInSystem, simulatedEvent) {\n disableUndoRedo(anyInSystem);\n var transform = simulatedEvent.event.transform;\n var swap = simulatedEvent.event.swap;\n transform.fold(function () {\n swap();\n }, function (transform) {\n manipulate(anyInSystem, transform, swap);\n });\n };\n return {\n dom: {\n tag: 'div',\n attributes: { role: 'presentation' }\n },\n components: [\n editPanel.memContainer.asSpec(),\n imagePanel.memContainer.asSpec(),\n sideBar.container\n ],\n behaviours: derive$1([\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function () {\n return state.getBlobState();\n }\n }\n }),\n config('image-tools-events', [\n run$1(internal.undo(), undo),\n run$1(internal.redo(), redo),\n run$1(internal.zoom(), zoom),\n run$1(internal.back(), back),\n run$1(internal.apply(), apply),\n run$1(internal.transform(), transform),\n run$1(internal.tempTransform(), tempTransform),\n run$1(internal.transformApply(), transformApply),\n run$1(internal.swap(), swap)\n ]),\n ComposingConfigs.self()\n ])\n };\n };\n\n var renderLabel = function (spec, backstageShared) {\n var label = {\n dom: {\n tag: 'label',\n innerHtml: backstageShared.providers.translate(spec.label),\n classes: ['tox-label']\n }\n };\n var comps = map$2(spec.items, backstageShared.interpreter);\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form__group']\n },\n components: [label].concat(comps),\n behaviours: derive$1([\n ComposingConfigs.self(),\n Replacing.config({}),\n RepresentingConfigs.domHtml(Optional.none()),\n Keying.config({ mode: 'acyclic' })\n ])\n };\n };\n\n var isSingleListItem = function (item) {\n return !has$2(item, 'items');\n };\n var dataAttribute = 'data-value';\n var fetchItems = function (dropdownComp, name, items, selectedValue) {\n return map$2(items, function (item) {\n if (!isSingleListItem(item)) {\n return {\n type: 'nestedmenuitem',\n text: item.text,\n getSubmenuItems: function () {\n return fetchItems(dropdownComp, name, item.items, selectedValue);\n }\n };\n } else {\n return {\n type: 'togglemenuitem',\n text: item.text,\n value: item.value,\n active: item.value === selectedValue,\n onAction: function () {\n Representing.setValue(dropdownComp, item.value);\n emitWith(dropdownComp, formChangeEvent, { name: name });\n Focusing.focus(dropdownComp);\n }\n };\n }\n });\n };\n var findItemByValue = function (items, value) {\n return findMap(items, function (item) {\n if (!isSingleListItem(item)) {\n return findItemByValue(item.items, value);\n } else {\n return someIf(item.value === value, item);\n }\n });\n };\n var renderListBox = function (spec, backstage) {\n var providersBackstage = backstage.shared.providers;\n var initialItem = head(spec.items).filter(isSingleListItem);\n var pLabel = spec.label.map(function (label) {\n return renderLabel$2(label, providersBackstage);\n });\n var pField = FormField.parts.field({\n dom: {},\n factory: {\n sketch: function (sketchSpec) {\n return renderCommonDropdown({\n uid: sketchSpec.uid,\n text: initialItem.map(function (item) {\n return item.text;\n }),\n icon: Optional.none(),\n tooltip: spec.label,\n role: Optional.none(),\n fetch: function (comp, callback) {\n var items = fetchItems(comp, spec.name, spec.items, Representing.getValue(comp));\n callback(build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, false));\n },\n onSetup: constant$1(noop),\n getApi: constant$1({}),\n columns: 1,\n presets: 'normal',\n classes: [],\n dropdownBehaviours: [\n Tabstopping.config({}),\n Representing.config({\n store: {\n mode: 'manual',\n initialValue: initialItem.map(function (item) {\n return item.value;\n }).getOr(''),\n getValue: function (comp) {\n return get$d(comp.element, dataAttribute);\n },\n setValue: function (comp, data) {\n findItemByValue(spec.items, data).each(function (item) {\n set$8(comp.element, dataAttribute, item.value);\n emitWith(comp, updateMenuText, { text: item.text });\n });\n }\n }\n })\n ]\n }, 'tox-listbox', backstage.shared);\n }\n }\n });\n var 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: constant$1(spec.disabled),\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormField.getField(comp).each(Disabling.enable);\n }\n })])\n });\n };\n\n var renderPanel = function (spec, backstage) {\n return {\n dom: {\n tag: 'div',\n classes: spec.classes\n },\n components: map$2(spec.items, backstage.shared.interpreter)\n };\n };\n\n var factory$e = function (detail, _spec) {\n var options = map$2(detail.options, function (option) {\n return {\n dom: {\n tag: 'option',\n value: option.value,\n innerHtml: option.text\n }\n };\n });\n var initialValues = detail.data.map(function (v) {\n return wrap$1('initialValue', v);\n }).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: __assign({\n mode: 'manual',\n getValue: function (select) {\n return get$5(select.element);\n },\n setValue: function (select, newValue) {\n var found = find$5(detail.options, function (opt) {\n return opt.value === newValue;\n });\n if (found.isSome()) {\n set$4(select.element, newValue);\n }\n }\n }, initialValues)\n })\n ])\n };\n };\n var 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('data')\n ],\n factory: factory$e\n });\n\n var renderSelectBox = function (spec, providersBackstage) {\n var translatedOptions = map$2(spec.items, function (item) {\n return {\n text: providersBackstage.translate(item.text),\n value: item.value\n };\n });\n var pLabel = spec.label.map(function (label) {\n return renderLabel$2(label, providersBackstage);\n });\n var pField = FormField.parts.field({\n dom: {},\n selectAttributes: { size: spec.size },\n options: translatedOptions,\n factory: HtmlSelect,\n selectBehaviours: derive$1([\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n }\n }),\n Tabstopping.config({}),\n config('selectbox-change', [run$1(change(), function (component, _) {\n emitWith(component, formChangeEvent, { name: spec.name });\n })])\n ])\n });\n var 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 var 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: function () {\n return spec.disabled || providersBackstage.isDisabled();\n },\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormField.getField(comp).each(Disabling.enable);\n }\n }),\n receivingConfig()\n ])\n });\n };\n\n var renderTable = function (spec, providersBackstage) {\n var renderTh = function (text) {\n return {\n dom: {\n tag: 'th',\n innerHtml: providersBackstage.translate(text)\n }\n };\n };\n var renderHeader = function (header) {\n return {\n dom: { tag: 'thead' },\n components: [{\n dom: { tag: 'tr' },\n components: map$2(header, renderTh)\n }]\n };\n };\n var renderTd = function (text) {\n return {\n dom: {\n tag: 'td',\n innerHtml: providersBackstage.translate(text)\n }\n };\n };\n var renderTr = function (row) {\n return {\n dom: { tag: 'tr' },\n components: map$2(row, renderTd)\n };\n };\n var renderRows = function (rows) {\n return {\n dom: { tag: 'tbody' },\n components: map$2(rows, renderTr)\n };\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 var renderTextField = function (spec, providersBackstage) {\n var pLabel = spec.label.map(function (label) {\n return renderLabel$2(label, providersBackstage);\n });\n var baseInputBehaviours = [\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n }\n }),\n receivingConfig(),\n Keying.config({\n mode: 'execution',\n useEnter: spec.multiline !== true,\n useControlEnter: spec.multiline === true,\n execute: function (comp) {\n emit(comp, formSubmitEvent);\n return Optional.some(true);\n }\n }),\n config('textfield-change', [\n run$1(input(), function (component, _) {\n emitWith(component, formChangeEvent, { name: spec.name });\n }),\n run$1(postPaste(), function (component, _) {\n emitWith(component, formChangeEvent, { name: spec.name });\n })\n ]),\n Tabstopping.config({})\n ];\n var validatingBehaviours = spec.validation.map(function (vl) {\n return Invalidating.config({\n getRoot: function (input) {\n return parent(input.element);\n },\n invalidClass: 'tox-invalid',\n validator: {\n validate: function (input) {\n var v = Representing.getValue(input);\n var result = vl.validator(v);\n return Future.pure(result === true ? Result.value(v) : Result.error(result));\n },\n validateOnLoad: vl.validateOnLoad\n }\n });\n }).toArray();\n var placeholder = spec.placeholder.fold(constant$1({}), function (p) {\n return { placeholder: providersBackstage.translate(p) };\n });\n var inputMode = spec.inputMode.fold(constant$1({}), function (mode) {\n return { inputmode: mode };\n });\n var inputAttributes = __assign(__assign({}, placeholder), inputMode);\n var pField = FormField.parts.field({\n tag: spec.multiline === true ? 'textarea' : 'input',\n inputAttributes: inputAttributes,\n inputClasses: [spec.classname],\n inputBehaviours: derive$1(flatten([\n baseInputBehaviours,\n validatingBehaviours\n ])),\n selectOnFocus: false,\n factory: Input\n });\n var extraClasses = spec.flex ? ['tox-form__group--stretched'] : [];\n var extraClasses2 = extraClasses.concat(spec.maximized ? ['tox-form-group--maximize'] : []);\n var extraBehaviours = [\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n },\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormField.getField(comp).each(Disabling.enable);\n }\n }),\n receivingConfig()\n ];\n return renderFormFieldWith(pLabel, pField, extraClasses2, extraBehaviours);\n };\n var renderInput = function (spec, providersBackstage) {\n return 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.disabled,\n classname: 'tox-textfield',\n validation: Optional.none(),\n maximized: spec.maximized\n }, providersBackstage);\n };\n var renderTextarea = function (spec, providersBackstage) {\n return 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.disabled,\n classname: 'tox-textarea',\n validation: Optional.none(),\n maximized: spec.maximized\n }, providersBackstage);\n };\n\n var events$6 = function (streamConfig, streamState) {\n var streams = streamConfig.stream.streams;\n var processor = streams.setup(streamConfig, streamState);\n return derive$2([\n run$1(streamConfig.event, processor),\n runOnDetached(function () {\n return streamState.cancel();\n })\n ].concat(streamConfig.cancelEvent.map(function (e) {\n return [run$1(e, function () {\n return streamState.cancel();\n })];\n }).getOr([])));\n };\n\n var ActiveStreaming = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$6\n });\n\n var throttle = function (_config) {\n var state = Cell(null);\n var readState = function () {\n return { timer: state.get() !== null ? 'set' : 'unset' };\n };\n var setTimer = function (t) {\n state.set(t);\n };\n var cancel = function () {\n var t = state.get();\n if (t !== null) {\n t.cancel();\n }\n };\n return nu$8({\n readState: readState,\n setTimer: setTimer,\n cancel: cancel\n });\n };\n var init$9 = function (spec) {\n return spec.stream.streams.state(spec);\n };\n\n var StreamingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n throttle: throttle,\n init: init$9\n });\n\n var setup$c = function (streamInfo, streamState) {\n var sInfo = streamInfo.stream;\n var throttler = last(streamInfo.onStream, sInfo.delay);\n streamState.setTimer(throttler);\n return function (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('cancelEvent'),\n onStrictHandler('onStream')\n ];\n\n var Streaming = create$8({\n fields: StreamingSchema,\n name: 'streaming',\n active: ActiveStreaming,\n state: StreamingState\n });\n\n var setValueFromItem = function (model, input, item) {\n var itemData = Representing.getValue(item);\n Representing.setValue(input, itemData);\n setCursorAtEnd(input);\n };\n var setSelectionOn = function (input, f) {\n var el = input.element;\n var value = get$5(el);\n var node = el.dom;\n if (get$d(el, 'type') !== 'number') {\n f(node, value);\n }\n };\n var setCursorAtEnd = function (input) {\n setSelectionOn(input, function (node, value) {\n return node.setSelectionRange(value.length, value.length);\n });\n };\n var setSelectionToEnd = function (input, startOffset) {\n setSelectionOn(input, function (node, value) {\n return node.setSelectionRange(startOffset, value.length);\n });\n };\n var attemptSelectOver = function (model, input, item) {\n if (!model.selectsOver) {\n return Optional.none();\n } else {\n var currentValue = Representing.getValue(input);\n var inputDisplay_1 = model.getDisplayText(currentValue);\n var itemValue = Representing.getValue(item);\n var itemDisplay = model.getDisplayText(itemValue);\n return itemDisplay.indexOf(inputDisplay_1) === 0 ? Optional.some(function () {\n setValueFromItem(model, input, item);\n setSelectionToEnd(input, inputDisplay_1.length);\n }) : Optional.none();\n }\n };\n\n var itemExecute = constant$1('alloy.typeahead.itemexecute');\n\n var make$3 = function (detail, components, spec, externals) {\n var navigateList = function (comp, simulatedEvent, highlighter) {\n detail.previewing.set(false);\n var sandbox = Coupling.getCoupled(comp, 'sandbox');\n if (Sandboxing.isOpen(sandbox)) {\n Composing.getCurrent(sandbox).each(function (menu) {\n Highlighting.getHighlighted(menu).fold(function () {\n highlighter(menu);\n }, function () {\n dispatchEvent(sandbox, menu.element, 'keydown', simulatedEvent);\n });\n });\n } else {\n var onOpenSync = function (sandbox) {\n Composing.getCurrent(sandbox).each(highlighter);\n };\n open(detail, mapFetch(comp), comp, sandbox, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n }\n };\n var focusBehaviours$1 = focusBehaviours(detail);\n var mapFetch = function (comp) {\n return function (tdata) {\n return tdata.map(function (data) {\n var menus = values(data.menus);\n var items = bind$3(menus, function (menu) {\n return filter$2(menu.items, function (item) {\n return item.type === 'item';\n });\n });\n var repState = Representing.getState(comp);\n repState.update(map$2(items, function (item) {\n return item.data;\n }));\n return data;\n });\n };\n };\n var behaviours = [\n Focusing.config({}),\n Representing.config({\n onSetValue: detail.onSetValue,\n store: __assign({\n mode: 'dataset',\n getDataKey: function (comp) {\n return get$5(comp.element);\n },\n getFallbackEntry: function (itemString) {\n return {\n value: itemString,\n meta: {}\n };\n },\n setValue: function (comp, data) {\n set$4(comp.element, detail.model.getDisplayText(data));\n }\n }, detail.initialData.map(function (d) {\n return wrap$1('initialValue', d);\n }).getOr({}))\n }),\n Streaming.config({\n stream: {\n mode: 'throttle',\n delay: detail.responseTime,\n stopEvent: false\n },\n onStream: function (component, _simulatedEvent) {\n var sandbox = Coupling.getCoupled(component, 'sandbox');\n var focusInInput = Focusing.isFocused(component);\n if (focusInInput) {\n if (get$5(component.element).length >= detail.minChars) {\n var previousValue_1 = Composing.getCurrent(sandbox).bind(function (menu) {\n return Highlighting.getHighlighted(menu).map(Representing.getValue);\n });\n detail.previewing.set(true);\n var onOpenSync = function (_sandbox) {\n Composing.getCurrent(sandbox).each(function (menu) {\n previousValue_1.fold(function () {\n if (detail.model.selectsOver) {\n Highlighting.highlightFirst(menu);\n }\n }, function (pv) {\n Highlighting.highlightBy(menu, function (item) {\n var itemData = Representing.getValue(item);\n return itemData.value === pv.value;\n });\n Highlighting.getHighlighted(menu).orThunk(function () {\n Highlighting.highlightFirst(menu);\n return Optional.none();\n });\n });\n });\n };\n open(detail, mapFetch(component), component, sandbox, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n }\n }\n },\n cancelEvent: typeaheadCancel()\n }),\n Keying.config({\n mode: 'special',\n onDown: function (comp, simulatedEvent) {\n navigateList(comp, simulatedEvent, Highlighting.highlightFirst);\n return Optional.some(true);\n },\n onEscape: function (comp) {\n var 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: function (comp, simulatedEvent) {\n navigateList(comp, simulatedEvent, Highlighting.highlightLast);\n return Optional.some(true);\n },\n onEnter: function (comp) {\n var sandbox = Coupling.getCoupled(comp, 'sandbox');\n var sandboxIsOpen = Sandboxing.isOpen(sandbox);\n if (sandboxIsOpen && !detail.previewing.get()) {\n return Composing.getCurrent(sandbox).bind(function (menu) {\n return Highlighting.getHighlighted(menu);\n }).map(function (item) {\n emitWith(comp, itemExecute(), { item: item });\n return true;\n });\n } else {\n var 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: function (hotspot) {\n return makeSandbox$1(detail, hotspot, {\n onOpen: function () {\n return Toggling.on(hotspot);\n },\n onClose: function () {\n return Toggling.off(hotspot);\n }\n });\n }\n }\n }),\n config('typeaheadevents', [\n runOnExecute$1(function (comp) {\n var onOpenSync = noop;\n togglePopup(detail, mapFetch(comp), comp, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n }),\n run$1(itemExecute(), function (comp, se) {\n var 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(), function (typeahead) {\n var sandbox = Coupling.getCoupled(typeahead, 'sandbox');\n if (search(sandbox.element).isNone()) {\n Sandboxing.close(sandbox);\n }\n })] : []))\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: __assign(__assign({}, focusBehaviours$1), augment(detail.typeaheadBehaviours, behaviours)),\n eventOrder: detail.eventOrder\n };\n };\n\n var schema$g = constant$1([\n option('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', function (itemData) {\n return itemData.meta !== undefined && itemData.meta.text !== undefined ? itemData.meta.text : itemData.value;\n }),\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('initialData'),\n field('typeaheadBehaviours', [\n Focusing,\n Representing,\n Streaming,\n Keying,\n Toggling,\n Coupling\n ]),\n customField('previewing', function () {\n return Cell(true);\n })\n ].concat(schema$k()).concat(sandboxFields()));\n var parts$b = constant$1([external$1({\n schema: [tieredMenuMarkers()],\n name: 'menu',\n overrides: function (detail) {\n return {\n fakeFocus: true,\n onHighlight: function (menu, item) {\n if (!detail.previewing.get()) {\n menu.getSystem().getByUid(detail.uid).each(function (input) {\n if (detail.model.populateFromBrowse) {\n setValueFromItem(detail.model, input, item);\n }\n });\n } else {\n menu.getSystem().getByUid(detail.uid).each(function (input) {\n attemptSelectOver(detail.model, input, item).fold(function () {\n return Highlighting.dehighlight(menu, item);\n }, function (fn) {\n return fn();\n });\n });\n }\n detail.previewing.set(false);\n },\n onExecute: function (menu, item) {\n return menu.getSystem().getByUid(detail.uid).toOptional().map(function (typeahead) {\n emitWith(typeahead, itemExecute(), { item: item });\n return true;\n });\n },\n onHover: function (menu, item) {\n detail.previewing.set(false);\n menu.getSystem().getByUid(detail.uid).each(function (input) {\n if (detail.model.populateFromBrowse) {\n setValueFromItem(detail.model, input, item);\n }\n });\n }\n };\n }\n })]);\n\n var Typeahead = composite({\n name: 'Typeahead',\n configFields: schema$g(),\n partFields: parts$b(),\n factory: make$3\n });\n\n var wrap = function (delegate) {\n var toCached = function () {\n return wrap(delegate.toCached());\n };\n var bindFuture = function (f) {\n return wrap(delegate.bind(function (resA) {\n return resA.fold(function (err) {\n return Future.pure(Result.error(err));\n }, function (a) {\n return f(a);\n });\n }));\n };\n var bindResult = function (f) {\n return wrap(delegate.map(function (resA) {\n return resA.bind(f);\n }));\n };\n var mapResult = function (f) {\n return wrap(delegate.map(function (resA) {\n return resA.map(f);\n }));\n };\n var mapError = function (f) {\n return wrap(delegate.map(function (resA) {\n return resA.mapError(f);\n }));\n };\n var foldResult = function (whenError, whenValue) {\n return delegate.map(function (res) {\n return res.fold(whenError, whenValue);\n });\n };\n var withTimeout = function (timeout, errorThunk) {\n return wrap(Future.nu(function (callback) {\n var timedOut = false;\n var timer = setTimeout(function () {\n timedOut = true;\n callback(Result.error(errorThunk()));\n }, timeout);\n delegate.get(function (result) {\n if (!timedOut) {\n clearTimeout(timer);\n callback(result);\n }\n });\n }));\n };\n return __assign(__assign({}, delegate), {\n toCached: toCached,\n bindFuture: bindFuture,\n bindResult: bindResult,\n mapResult: mapResult,\n mapError: mapError,\n foldResult: foldResult,\n withTimeout: withTimeout\n });\n };\n var nu$1 = function (worker) {\n return wrap(Future.nu(worker));\n };\n var value = function (value) {\n return wrap(Future.pure(Result.value(value)));\n };\n var error = function (error) {\n return wrap(Future.pure(Result.error(error)));\n };\n var fromResult = function (result) {\n return wrap(Future.pure(result));\n };\n var fromFuture = function (future) {\n return wrap(future.map(Result.value));\n };\n var fromPromise = function (promise) {\n return nu$1(function (completer) {\n promise.then(function (value) {\n completer(Result.value(value));\n }, function (error) {\n completer(Result.error(error));\n });\n });\n };\n var FutureResult = {\n nu: nu$1,\n wrap: wrap,\n pure: value,\n value: value,\n error: error,\n fromResult: fromResult,\n fromFuture: fromFuture,\n fromPromise: fromPromise\n };\n\n var separator$1 = { type: 'separator' };\n var toMenuItem = function (target) {\n return {\n type: 'menuitem',\n value: target.url,\n text: target.title,\n meta: { attach: target.attach },\n onAction: noop\n };\n };\n var staticMenuItem = function (title, url) {\n return {\n type: 'menuitem',\n value: url,\n text: title,\n meta: { attach: undefined },\n onAction: noop\n };\n };\n var toMenuItems = function (targets) {\n return map$2(targets, toMenuItem);\n };\n var filterLinkTargets = function (type, targets) {\n return filter$2(targets, function (target) {\n return target.type === type;\n });\n };\n var filteredTargets = function (type, targets) {\n return toMenuItems(filterLinkTargets(type, targets));\n };\n var headerTargets = function (linkInfo) {\n return filteredTargets('header', linkInfo.targets);\n };\n var anchorTargets = function (linkInfo) {\n return filteredTargets('anchor', linkInfo.targets);\n };\n var anchorTargetTop = function (linkInfo) {\n return Optional.from(linkInfo.anchorTop).map(function (url) {\n return staticMenuItem('', url);\n }).toArray();\n };\n var anchorTargetBottom = function (linkInfo) {\n return Optional.from(linkInfo.anchorBottom).map(function (url) {\n return staticMenuItem('', url);\n }).toArray();\n };\n var historyTargets = function (history) {\n return map$2(history, function (url) {\n return staticMenuItem(url, url);\n });\n };\n var joinMenuLists = function (items) {\n return foldl(items, function (a, b) {\n var bothEmpty = a.length === 0 || b.length === 0;\n return bothEmpty ? a.concat(b) : a.concat(separator$1, b);\n }, []);\n };\n var filterByQuery = function (term, menuItems) {\n var lowerCaseTerm = term.toLowerCase();\n return filter$2(menuItems, function (item) {\n var text = item.meta !== undefined && item.meta.text !== undefined ? item.meta.text : item.text;\n return contains$1(text.toLowerCase(), lowerCaseTerm) || contains$1(item.value.toLowerCase(), lowerCaseTerm);\n });\n };\n\n var getItems = function (fileType, input, urlBackstage) {\n var urlInputValue = Representing.getValue(input);\n var term = urlInputValue.meta.text !== undefined ? urlInputValue.meta.text : urlInputValue.value;\n var info = urlBackstage.getLinkInformation();\n return info.fold(function () {\n return [];\n }, function (linkInfo) {\n var 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 var errorId = generate$6('aria-invalid');\n var renderUrlInput = function (spec, backstage, urlBackstage) {\n var _a;\n var providersBackstage = backstage.shared.providers;\n var updateHistory = function (component) {\n var urlEntry = Representing.getValue(component);\n urlBackstage.addToHistory(urlEntry.value, spec.filetype);\n };\n var pField = FormField.parts.field({\n factory: Typeahead,\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: function (input) {\n var items = getItems(spec.filetype, input, urlBackstage);\n var tdata = build(items, ItemResponse$1.BUBBLE_TO_SANDBOX, backstage, false);\n return Future.pure(tdata);\n },\n getHotspot: function (comp) {\n return memUrlBox.getOpt(comp);\n },\n onSetValue: function (comp, _newValue) {\n if (comp.hasConfigured(Invalidating)) {\n Invalidating.run(comp).get(noop);\n }\n },\n typeaheadBehaviours: derive$1(flatten([\n urlBackstage.getValidationHandler().map(function (handler) {\n return Invalidating.config({\n getRoot: function (comp) {\n return parent(comp.element);\n },\n invalidClass: 'tox-control-wrap--status-invalid',\n notify: {\n onInvalid: function (comp, err) {\n memInvalidIcon.getOpt(comp).each(function (invalidComp) {\n set$8(invalidComp.element, 'title', providersBackstage.translate(err));\n });\n }\n },\n validator: {\n validate: function (input) {\n var urlEntry = Representing.getValue(input);\n return FutureResult.nu(function (completer) {\n handler({\n type: spec.filetype,\n url: urlEntry.value\n }, function (validation) {\n if (validation.status === 'invalid') {\n var err = Result.error(validation.message);\n completer(err);\n } else {\n var val = Result.value(validation.message);\n completer(val);\n }\n });\n });\n },\n validateOnLoad: false\n }\n });\n }).toArray(),\n [\n Disabling.config({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n }\n }),\n Tabstopping.config({}),\n config('urlinput-events', flatten([\n spec.filetype === 'file' ? [run$1(input(), function (comp) {\n emitWith(comp, formChangeEvent, { name: spec.name });\n })] : [],\n [\n run$1(change(), function (comp) {\n emitWith(comp, formChangeEvent, { name: spec.name });\n updateHistory(comp);\n }),\n run$1(postPaste(), function (comp) {\n emitWith(comp, formChangeEvent, { name: spec.name });\n updateHistory(comp);\n })\n ]\n ]))\n ]\n ])),\n eventOrder: (_a = {}, _a[input()] = [\n 'streaming',\n 'urlinput-events',\n 'invalidating'\n ], _a),\n model: {\n getDisplayText: function (itemData) {\n return itemData.value;\n },\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: function (_menu, component, _entry) {\n emitWith(component, formSubmitEvent, {});\n },\n onItemExecute: function (typeahead, _sandbox, _item, _value) {\n updateHistory(typeahead);\n emitWith(typeahead, formChangeEvent, { name: spec.name });\n }\n });\n var pLabel = spec.label.map(function (label) {\n return renderLabel$2(label, providersBackstage);\n });\n var makeIcon = function (name, errId, icon, label) {\n if (icon === void 0) {\n icon = name;\n }\n if (label === void 0) {\n label = name;\n }\n return render$3(icon, {\n tag: 'div',\n classes: [\n 'tox-icon',\n 'tox-control-wrap__status-icon-' + name\n ],\n attributes: __assign({\n 'title': providersBackstage.translate(label),\n 'aria-live': 'polite'\n }, errId.fold(function () {\n return {};\n }, function (id) {\n return { id: id };\n }))\n }, providersBackstage.icons);\n };\n var memInvalidIcon = record(makeIcon('invalid', Optional.some(errorId), 'warning'));\n var memStatus = record({\n dom: {\n tag: 'div',\n classes: ['tox-control-wrap__status-icon-wrap']\n },\n components: [memInvalidIcon.asSpec()]\n });\n var optUrlPicker = urlBackstage.getUrlPicker(spec.filetype);\n var browseUrlEvent = generate$6('browser.url.event');\n var 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({\n disabled: function () {\n return spec.disabled || providersBackstage.isDisabled();\n }\n })])\n });\n var memUrlPickerButton = record(renderButton({\n name: spec.name,\n icon: Optional.some('browse'),\n text: spec.label.getOr(''),\n disabled: spec.disabled,\n primary: false,\n borderless: true\n }, function (component) {\n return emit(component, browseUrlEvent);\n }, providersBackstage, [], ['tox-browse-url']));\n var controlHWrapper = function () {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form__controls-h-stack']\n },\n components: flatten([\n [memUrlBox.asSpec()],\n optUrlPicker.map(function () {\n return memUrlPickerButton.asSpec();\n }).toArray()\n ])\n };\n };\n var openUrlPicker = function (comp) {\n Composing.getCurrent(comp).each(function (field) {\n var componentData = Representing.getValue(field);\n var urlData = __assign({ fieldname: spec.name }, componentData);\n optUrlPicker.each(function (picker) {\n picker(urlData).get(function (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: function () {\n return spec.disabled || providersBackstage.isDisabled();\n },\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n memUrlPickerButton.getOpt(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormField.getField(comp).each(Disabling.enable);\n memUrlPickerButton.getOpt(comp).each(Disabling.enable);\n }\n }),\n receivingConfig(),\n config('url-input-events', [run$1(browseUrlEvent, openUrlPicker)])\n ])\n });\n };\n\n var renderAlertBanner = function (spec, providersBackstage) {\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 },\n components: [Button.sketch({\n dom: {\n tag: 'button',\n classes: [\n 'tox-button',\n 'tox-button--naked',\n 'tox-button--icon'\n ],\n innerHtml: get$1(spec.icon, providersBackstage.icons),\n attributes: { title: providersBackstage.translate(spec.iconTooltip) }\n },\n action: function (comp) {\n emitWith(comp, formActionEvent, {\n name: 'alert-banner',\n value: spec.url\n });\n },\n buttonBehaviours: derive$1([addFocusableBehaviour()])\n })]\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 var renderCheckbox = function (spec, providerBackstage) {\n var repBehaviour = Representing.config({\n store: {\n mode: 'manual',\n getValue: function (comp) {\n var el = comp.element.dom;\n return el.checked;\n },\n setValue: function (comp, value) {\n var el = comp.element.dom;\n el.checked = value;\n }\n }\n });\n var toggleCheckboxHandler = function (comp) {\n comp.element.dom.click();\n return Optional.some(true);\n };\n var pField = FormField.parts.field({\n factory: { sketch: identity$1 },\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: function () {\n return spec.disabled || providerBackstage.isDisabled();\n }\n }),\n Tabstopping.config({}),\n Focusing.config({}),\n repBehaviour,\n Keying.config({\n mode: 'special',\n onEnter: toggleCheckboxHandler,\n onSpace: toggleCheckboxHandler,\n stopSpaceKeyup: true\n }),\n config('checkbox-events', [run$1(change(), function (component, _) {\n emitWith(component, formChangeEvent, { name: spec.name });\n })])\n ])\n });\n var pLabel = FormField.parts.label({\n dom: {\n tag: 'span',\n classes: ['tox-checkbox__label'],\n innerHtml: providerBackstage.translate(spec.label)\n },\n behaviours: derive$1([Unselecting.config({})])\n });\n var makeIcon = function (className) {\n var 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 var 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({\n disabled: function () {\n return spec.disabled || providerBackstage.isDisabled();\n },\n disableClass: 'tox-checkbox--disabled',\n onDisabled: function (comp) {\n FormField.getField(comp).each(Disabling.disable);\n },\n onEnabled: function (comp) {\n FormField.getField(comp).each(Disabling.enable);\n }\n }),\n receivingConfig()\n ])\n });\n };\n\n var renderHtmlPanel = function (spec) {\n if (spec.presets === 'presentation') {\n return Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group'],\n innerHtml: spec.html\n }\n });\n } else {\n return Container.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-form__group'],\n innerHtml: spec.html,\n attributes: { role: 'document' }\n },\n containerBehaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\n ])\n });\n }\n };\n\n var make$2 = function (render) {\n return function (parts, spec, backstage) {\n return get$e(spec, 'name').fold(function () {\n return render(spec, backstage);\n }, function (fieldName) {\n return parts.field(fieldName, render(spec, backstage));\n });\n };\n };\n var makeIframe = function (render) {\n return function (parts, spec, backstage) {\n var iframeSpec = deepMerge(spec, { source: 'dynamic' });\n return make$2(render)(parts, iframeSpec, backstage);\n };\n };\n var factories = {\n bar: make$2(function (spec, backstage) {\n return renderBar(spec, backstage.shared);\n }),\n collection: make$2(function (spec, backstage) {\n return renderCollection(spec, backstage.shared.providers);\n }),\n alertbanner: make$2(function (spec, backstage) {\n return renderAlertBanner(spec, backstage.shared.providers);\n }),\n input: make$2(function (spec, backstage) {\n return renderInput(spec, backstage.shared.providers);\n }),\n textarea: make$2(function (spec, backstage) {\n return renderTextarea(spec, backstage.shared.providers);\n }),\n label: make$2(function (spec, backstage) {\n return renderLabel(spec, backstage.shared);\n }),\n iframe: makeIframe(function (spec, backstage) {\n return renderIFrame(spec, backstage.shared.providers);\n }),\n button: make$2(function (spec, backstage) {\n return renderDialogButton(spec, backstage.shared.providers);\n }),\n checkbox: make$2(function (spec, backstage) {\n return renderCheckbox(spec, backstage.shared.providers);\n }),\n colorinput: make$2(function (spec, backstage) {\n return renderColorInput(spec, backstage.shared, backstage.colorinput);\n }),\n colorpicker: make$2(renderColorPicker),\n dropzone: make$2(function (spec, backstage) {\n return renderDropZone(spec, backstage.shared.providers);\n }),\n grid: make$2(function (spec, backstage) {\n return renderGrid(spec, backstage.shared);\n }),\n listbox: make$2(function (spec, backstage) {\n return renderListBox(spec, backstage);\n }),\n selectbox: make$2(function (spec, backstage) {\n return renderSelectBox(spec, backstage.shared.providers);\n }),\n sizeinput: make$2(function (spec, backstage) {\n return renderSizeInput(spec, backstage.shared.providers);\n }),\n urlinput: make$2(function (spec, backstage) {\n return renderUrlInput(spec, backstage, backstage.urlinput);\n }),\n customeditor: make$2(renderCustomEditor),\n htmlpanel: make$2(renderHtmlPanel),\n imagetools: make$2(function (spec, backstage) {\n return renderImageTools(spec, backstage.shared.providers);\n }),\n table: make$2(function (spec, backstage) {\n return renderTable(spec, backstage.shared.providers);\n }),\n panel: make$2(function (spec, backstage) {\n return renderPanel(spec, backstage);\n })\n };\n var noFormParts = {\n field: function (_name, spec) {\n return spec;\n }\n };\n var interpretInForm = function (parts, spec, oldBackstage) {\n var newBackstage = deepMerge(oldBackstage, {\n shared: {\n interpreter: function (childSpec) {\n return interpretParts(parts, childSpec, newBackstage);\n }\n }\n });\n return interpretParts(parts, spec, newBackstage);\n };\n var interpretParts = function (parts, spec, backstage) {\n return get$e(factories, spec.type).fold(function () {\n console.error('Unknown factory type \"' + spec.type + '\", defaulting to container: ', spec);\n return spec;\n }, function (factory) {\n return factory(parts, spec, backstage);\n });\n };\n var interpretWithoutForm = function (spec, backstage) {\n var parts = noFormParts;\n return interpretParts(parts, spec, backstage);\n };\n\n var bubbleAlignments$2 = {\n valignCentre: [],\n alignCentre: [],\n alignLeft: [],\n alignRight: [],\n right: [],\n left: [],\n bottom: [],\n top: []\n };\n var getInlineDialogAnchor = function (contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor) {\n var bubbleSize = 12;\n var overrides = { maxHeightFunction: expandable$1() };\n var editableAreaAnchor = function () {\n return {\n type: 'node',\n root: getContentContainer(contentAreaElement()),\n node: Optional.from(contentAreaElement()),\n bubble: nu$5(bubbleSize, bubbleSize, bubbleAlignments$2),\n layouts: {\n onRtl: function () {\n return [northeast];\n },\n onLtr: function () {\n return [northwest];\n }\n },\n overrides: overrides\n };\n };\n var standardAnchor = function () {\n return {\n type: 'hotspot',\n hotspot: lazyAnchorbar(),\n bubble: nu$5(-bubbleSize, bubbleSize, bubbleAlignments$2),\n layouts: {\n onRtl: function () {\n return [southeast$2];\n },\n onLtr: function () {\n return [southwest$2];\n }\n },\n overrides: overrides\n };\n };\n return function () {\n return lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor();\n };\n };\n var getBannerAnchor = function (contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor) {\n var editableAreaAnchor = function () {\n return {\n type: 'node',\n root: getContentContainer(contentAreaElement()),\n node: Optional.from(contentAreaElement()),\n layouts: {\n onRtl: function () {\n return [north];\n },\n onLtr: function () {\n return [north];\n }\n }\n };\n };\n var standardAnchor = function () {\n return {\n type: 'hotspot',\n hotspot: lazyAnchorbar(),\n layouts: {\n onRtl: function () {\n return [south$2];\n },\n onLtr: function () {\n return [south$2];\n }\n }\n };\n };\n return function () {\n return lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor();\n };\n };\n var getCursorAnchor = function (editor, bodyElement) {\n return function () {\n return {\n type: 'selection',\n root: bodyElement(),\n getSelection: function () {\n var rng = editor.selection.getRng();\n return Optional.some(SimSelection.range(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n }\n };\n };\n };\n var getNodeAnchor$1 = function (bodyElement) {\n return function (element) {\n return {\n type: 'node',\n root: bodyElement(),\n node: element\n };\n };\n };\n var getAnchors = function (editor, lazyAnchorbar, isToolbarTop) {\n var useFixedToolbarContainer = useFixedContainer(editor);\n var bodyElement = function () {\n return SugarElement.fromDom(editor.getBody());\n };\n var contentAreaElement = function () {\n return SugarElement.fromDom(editor.getContentAreaContainer());\n };\n var lazyUseEditableAreaAnchor = function () {\n return useFixedToolbarContainer || !isToolbarTop();\n };\n return {\n inlineDialog: getInlineDialogAnchor(contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor),\n banner: getBannerAnchor(contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor),\n cursor: getCursorAnchor(editor, bodyElement),\n node: getNodeAnchor$1(bodyElement)\n };\n };\n\n var colorPicker = function (editor) {\n return function (callback, value) {\n var dialog = colorPickerDialog(editor);\n dialog(callback, value);\n };\n };\n var hasCustomColors = function (editor) {\n return function () {\n return hasCustomColors$1(editor);\n };\n };\n var getColors = function (editor) {\n return function () {\n return getColors$2(editor);\n };\n };\n var getColorCols = function (editor) {\n return function () {\n return getColorCols$1(editor);\n };\n };\n var ColorInputBackstage = function (editor) {\n return {\n colorPicker: colorPicker(editor),\n hasCustomColors: hasCustomColors(editor),\n getColors: getColors(editor),\n getColorCols: getColorCols(editor)\n };\n };\n\n var isDraggableModal = function (editor) {\n return function () {\n return isDraggableModal$1(editor);\n };\n };\n var DialogBackstage = function (editor) {\n return { isDraggableModal: isDraggableModal(editor) };\n };\n\n var HeaderBackstage = function (editor) {\n var mode = Cell(isToolbarLocationBottom(editor) ? 'bottom' : 'top');\n return {\n isPositionedAtTop: function () {\n return mode.get() === 'top';\n },\n getDockingMode: mode.get,\n setDockingMode: mode.set\n };\n };\n\n var 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 var isNestedFormat = function (format) {\n return has$2(format, 'items');\n };\n var isBlockFormat = function (format) {\n return has$2(format, 'block');\n };\n var isInlineFormat = function (format) {\n return has$2(format, 'inline');\n };\n var isSelectorFormat = function (format) {\n return has$2(format, 'selector');\n };\n var mapFormats = function (userFormats) {\n return foldl(userFormats, function (acc, fmt) {\n if (isNestedFormat(fmt)) {\n var 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 var formatName = isString(fmt.name) ? fmt.name : fmt.title.toLowerCase();\n var 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 __assign(__assign({}, acc), { formats: acc.formats.concat(fmt) });\n }\n }, {\n customFormats: [],\n formats: []\n });\n };\n var registerCustomFormats = function (editor, userFormats) {\n var result = mapFormats(userFormats);\n var registerFormats = function (customFormats) {\n each$1(customFormats, function (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', function () {\n registerFormats(result.customFormats);\n });\n }\n return result.formats;\n };\n var getStyleFormats = function (editor) {\n return getUserStyleFormats(editor).map(function (userFormats) {\n var registeredUserFormats = registerCustomFormats(editor, userFormats);\n return isMergeStyleFormats(editor) ? defaultStyleFormats.concat(registeredUserFormats) : registeredUserFormats;\n }).getOr(defaultStyleFormats);\n };\n\n var processBasic = function (item, isSelectedFor, getPreviewFor) {\n var formatterSpec = {\n type: 'formatter',\n isSelected: isSelectedFor(item.format),\n getStylePreview: getPreviewFor(item.format)\n };\n return deepMerge(item, formatterSpec);\n };\n var register$8 = function (editor, formats, isSelectedFor, getPreviewFor) {\n var enrichSupported = function (item) {\n return processBasic(item, isSelectedFor, getPreviewFor);\n };\n var enrichMenu = function (item) {\n var submenuSpec = { type: 'submenu' };\n return deepMerge(item, submenuSpec);\n };\n var enrichCustom = function (item) {\n var formatName = isString(item.name) ? item.name : generate$6(item.title);\n var formatNameWithPrefix = 'custom-' + formatName;\n var customSpec = {\n type: 'formatter',\n format: formatNameWithPrefix,\n isSelected: isSelectedFor(formatNameWithPrefix),\n getStylePreview: getPreviewFor(formatNameWithPrefix)\n };\n var newItem = deepMerge(item, customSpec);\n editor.formatter.register(formatName, newItem);\n return newItem;\n };\n var doEnrich = function (items) {\n return map$2(items, function (item) {\n var keys$1 = keys(item);\n if (hasNonNullableKey(item, 'items')) {\n var newItems = doEnrich(item.items);\n return deepMerge(enrichMenu(item), { getStyleItems: constant$1(newItems) });\n } else if (hasNonNullableKey(item, 'format')) {\n return enrichSupported(item);\n } else if (keys$1.length === 1 && contains$2(keys$1, 'title')) {\n return deepMerge(item, { type: 'separator' });\n } else {\n return enrichCustom(item);\n }\n });\n };\n return doEnrich(formats);\n };\n\n var init$8 = function (editor) {\n var isSelectedFor = function (format) {\n return function () {\n return editor.formatter.match(format);\n };\n };\n var getPreviewFor = function (format) {\n return function () {\n var 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 };\n var flatten = function (fmt) {\n var subs = fmt.items;\n return subs !== undefined && subs.length > 0 ? bind$3(subs, flatten) : [fmt.format];\n };\n var settingsFormats = Cell([]);\n var settingsFlattenedFormats = Cell([]);\n var eventsFormats = Cell([]);\n var eventsFlattenedFormats = Cell([]);\n var replaceSettings = Cell(false);\n editor.on('PreInit', function (_e) {\n var formats = getStyleFormats(editor);\n var enriched = register$8(editor, formats, isSelectedFor, getPreviewFor);\n settingsFormats.set(enriched);\n settingsFlattenedFormats.set(bind$3(enriched, flatten));\n });\n editor.on('addStyleModifications', function (e) {\n var modifications = register$8(editor, e.items, isSelectedFor, getPreviewFor);\n eventsFormats.set(modifications);\n replaceSettings.set(e.replace);\n eventsFlattenedFormats.set(bind$3(modifications, flatten));\n });\n var getData = function () {\n var fromSettings = replaceSettings.get() ? [] : settingsFormats.get();\n var fromEvents = eventsFormats.get();\n return fromSettings.concat(fromEvents);\n };\n var getFlattenedKeys = function () {\n var fromSettings = replaceSettings.get() ? [] : settingsFlattenedFormats.get();\n var fromEvents = eventsFlattenedFormats.get();\n return fromSettings.concat(fromEvents);\n };\n return {\n getData: getData,\n getFlattenedKeys: getFlattenedKeys\n };\n };\n\n var isElement = function (node) {\n return isNonNullable(node) && node.nodeType === 1;\n };\n var trim = global$5.trim;\n var hasContentEditableState = function (value) {\n return function (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 var isContentEditableTrue = hasContentEditableState('true');\n var isContentEditableFalse = hasContentEditableState('false');\n var create$1 = function (type, title, url, level, attach) {\n return {\n type: type,\n title: title,\n url: url,\n level: level,\n attach: attach\n };\n };\n var isChildOfContentEditableTrue = function (node) {\n while (node = node.parentNode) {\n var value = node.contentEditable;\n if (value && value !== 'inherit') {\n return isContentEditableTrue(node);\n }\n }\n return false;\n };\n var select = function (selector, root) {\n return map$2(descendants(SugarElement.fromDom(root), selector), function (element) {\n return element.dom;\n });\n };\n var getElementText = function (elm) {\n return elm.innerText || elm.textContent;\n };\n var getOrGenerateId = function (elm) {\n return elm.id ? elm.id : generate$6('h');\n };\n var isAnchor = function (elm) {\n return elm && elm.nodeName === 'A' && (elm.id || elm.name) !== undefined;\n };\n var isValidAnchor = function (elm) {\n return isAnchor(elm) && isEditable(elm);\n };\n var isHeader = function (elm) {\n return elm && /^(H[1-6])$/.test(elm.nodeName);\n };\n var isEditable = function (elm) {\n return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm);\n };\n var isValidHeader = function (elm) {\n return isHeader(elm) && isEditable(elm);\n };\n var getLevel = function (elm) {\n return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0;\n };\n var headerTarget = function (elm) {\n var headerId = getOrGenerateId(elm);\n var attach = function () {\n elm.id = headerId;\n };\n return create$1('header', getElementText(elm), '#' + headerId, getLevel(elm), attach);\n };\n var anchorTarget = function (elm) {\n var anchorId = elm.id || elm.name;\n var anchorText = getElementText(elm);\n return create$1('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop);\n };\n var getHeaderTargets = function (elms) {\n return map$2(filter$2(elms, isValidHeader), headerTarget);\n };\n var getAnchorTargets = function (elms) {\n return map$2(filter$2(elms, isValidAnchor), anchorTarget);\n };\n var getTargetElements = function (elm) {\n var elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm);\n return elms;\n };\n var hasTitle = function (target) {\n return trim(target.title).length > 0;\n };\n var find = function (elm) {\n var elms = getTargetElements(elm);\n return filter$2(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle);\n };\n var LinkTargets = { find: find };\n\n var STORAGE_KEY = 'tinymce-url-history';\n var HISTORY_LENGTH = 5;\n var isHttpUrl = function (url) {\n return isString(url) && /^https?/.test(url);\n };\n var isArrayOfUrl = function (a) {\n return isArray(a) && a.length <= HISTORY_LENGTH && forall(a, isHttpUrl);\n };\n var isRecordOfUrlArray = function (r) {\n return isObject(r) && find$4(r, function (value) {\n return !isArrayOfUrl(value);\n }).isNone();\n };\n var getAllHistory = function () {\n var unparsedHistory = global$8.getItem(STORAGE_KEY);\n if (unparsedHistory === null) {\n return {};\n }\n var 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 var setAllHistory = function (history) {\n if (!isRecordOfUrlArray(history)) {\n throw new Error('Bad format for history:\\n' + JSON.stringify(history));\n }\n global$8.setItem(STORAGE_KEY, JSON.stringify(history));\n };\n var getHistory = function (fileType) {\n var history = getAllHistory();\n return get$e(history, fileType).getOr([]);\n };\n var addToHistory = function (url, fileType) {\n if (!isHttpUrl(url)) {\n return;\n }\n var history = getAllHistory();\n var items = get$e(history, fileType).getOr([]);\n var itemsWithoutUrl = filter$2(items, function (item) {\n return item !== url;\n });\n history[fileType] = [url].concat(itemsWithoutUrl).slice(0, HISTORY_LENGTH);\n setAllHistory(history);\n };\n\n var isTruthy = function (value) {\n return !!value;\n };\n var makeMap = function (value) {\n return map$1(global$5.makeMap(value, /[, ]/), isTruthy);\n };\n var getPicker = function (editor) {\n return Optional.from(getFilePickerCallback(editor)).filter(isFunction);\n };\n var getPickerTypes = function (editor) {\n var optFileTypes = Optional.some(getFilePickerTypes(editor)).filter(isTruthy);\n var optLegacyTypes = Optional.some(getFileBrowserCallbackTypes(editor)).filter(isTruthy);\n var optTypes = optFileTypes.or(optLegacyTypes).map(makeMap);\n return getPicker(editor).fold(never, function (_picker) {\n return optTypes.fold(always, function (types) {\n return keys(types).length > 0 ? types : false;\n });\n });\n };\n var getPickerSetting = function (editor, filetype) {\n var 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 var getUrlPicker = function (editor, filetype) {\n return getPickerSetting(editor, filetype).map(function (picker) {\n return function (entry) {\n return Future.nu(function (completer) {\n var handler = function (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 var r = {\n value: value,\n meta: meta\n };\n completer(r);\n };\n var meta = __assign({\n filetype: filetype,\n fieldname: entry.fieldname\n }, Optional.from(entry.meta).getOr({}));\n picker.call(editor, handler, entry.value, meta);\n });\n };\n });\n };\n var getTextSetting = function (value) {\n return Optional.from(value).filter(isString).getOrUndefined();\n };\n var getLinkInformation = function (editor) {\n if (noTypeaheadUrls(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 var getValidationHandler = function (editor) {\n return Optional.from(getFilePickerValidatorHandler(editor));\n };\n var UrlInputBackstage = function (editor) {\n return {\n getHistory: getHistory,\n addToHistory: addToHistory,\n getLinkInformation: function () {\n return getLinkInformation(editor);\n },\n getValidationHandler: function () {\n return getValidationHandler(editor);\n },\n getUrlPicker: function (filetype) {\n return getUrlPicker(editor, filetype);\n }\n };\n };\n\n var init$7 = function (sink, editor, lazyAnchorbar) {\n var contextMenuState = Cell(false);\n var toolbar = HeaderBackstage(editor);\n var backstage = {\n shared: {\n providers: {\n icons: function () {\n return editor.ui.registry.getAll().icons;\n },\n menuItems: function () {\n return editor.ui.registry.getAll().menuItems;\n },\n translate: global$e.translate,\n isDisabled: function () {\n return editor.mode.isReadOnly() || editor.ui.isDisabled();\n },\n getSetting: editor.getParam.bind(editor)\n },\n interpreter: function (s) {\n return interpretWithoutForm(s, backstage);\n },\n anchors: getAnchors(editor, lazyAnchorbar, toolbar.isPositionedAtTop),\n header: toolbar,\n getSink: function () {\n return Result.value(sink);\n }\n },\n urlinput: UrlInputBackstage(editor),\n styleselect: init$8(editor),\n colorinput: ColorInputBackstage(editor),\n dialog: DialogBackstage(editor),\n isContextMenuOpen: function () {\n return contextMenuState.get();\n },\n setContextMenuState: function (state) {\n return contextMenuState.set(state);\n }\n };\n return backstage;\n };\n\n var setup$b = function (editor, mothership, uiMothership) {\n var broadcastEvent = function (name, evt) {\n each$1([\n mothership,\n uiMothership\n ], function (ship) {\n ship.broadcastEvent(name, evt);\n });\n };\n var broadcastOn = function (channel, message) {\n each$1([\n mothership,\n uiMothership\n ], function (ship) {\n ship.broadcastOn([channel], message);\n });\n };\n var fireDismissPopups = function (evt) {\n return broadcastOn(dismissPopups(), { target: evt.target });\n };\n var doc = getDocument();\n var onTouchstart = bind(doc, 'touchstart', fireDismissPopups);\n var onTouchmove = bind(doc, 'touchmove', function (evt) {\n return broadcastEvent(documentTouchmove(), evt);\n });\n var onTouchend = bind(doc, 'touchend', function (evt) {\n return broadcastEvent(documentTouchend(), evt);\n });\n var onMousedown = bind(doc, 'mousedown', fireDismissPopups);\n var onMouseup = bind(doc, 'mouseup', function (evt) {\n if (evt.raw.button === 0) {\n broadcastOn(mouseReleased(), { target: evt.target });\n }\n });\n var onContentClick = function (raw) {\n return broadcastOn(dismissPopups(), { target: SugarElement.fromDom(raw.target) });\n };\n var onContentMouseup = function (raw) {\n if (raw.button === 0) {\n broadcastOn(mouseReleased(), { target: SugarElement.fromDom(raw.target) });\n }\n };\n var onContentMousedown = function () {\n each$1(editor.editorManager.get(), function (loopEditor) {\n if (editor !== loopEditor) {\n loopEditor.fire('DismissPopups', { relatedTarget: editor });\n }\n });\n };\n var onWindowScroll = function (evt) {\n return broadcastEvent(windowScroll(), fromRawEvent(evt));\n };\n var onWindowResize = function (evt) {\n broadcastOn(repositionPopups(), {});\n broadcastEvent(windowResize(), fromRawEvent(evt));\n };\n var onEditorResize = function () {\n return broadcastOn(repositionPopups(), {});\n };\n var onEditorProgress = function (evt) {\n if (evt.state) {\n broadcastOn(dismissPopups(), { target: SugarElement.fromDom(editor.getContainer()) });\n }\n };\n var onDismissPopups = function (event) {\n broadcastOn(dismissPopups(), { target: SugarElement.fromDom(event.relatedTarget.getContainer()) });\n };\n editor.on('PostRender', function () {\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 });\n editor.on('remove', function () {\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 onMousedown.unbind();\n onTouchstart.unbind();\n onTouchmove.unbind();\n onTouchend.unbind();\n onMouseup.unbind();\n });\n editor.on('detach', function () {\n detachSystem(mothership);\n detachSystem(uiMothership);\n mothership.destroy();\n uiMothership.destroy();\n });\n };\n\n var parts$a = AlloyParts;\n var partType = PartType;\n\n var schema$f = constant$1([\n defaulted('shell', false),\n required$1('makeItem'),\n defaulted('setupItem', noop),\n SketchBehaviours.field('listBehaviours', [Replacing])\n ]);\n var customListDetail = function () {\n return { behaviours: derive$1([Replacing.config({})]) };\n };\n var itemsPart = optional({\n name: 'items',\n overrides: customListDetail\n });\n var parts$9 = constant$1([itemsPart]);\n var name = constant$1('CustomList');\n\n var factory$d = function (detail, components, _spec, _external) {\n var setItems = function (list, items) {\n getListContainer(list).fold(function () {\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 }, function (container) {\n var itemComps = Replacing.contents(container);\n var numListsRequired = items.length;\n var numListsToAdd = numListsRequired - itemComps.length;\n var itemsToAdd = numListsToAdd > 0 ? range$2(numListsToAdd, function () {\n return detail.makeItem();\n }) : [];\n var itemsToRemove = itemComps.slice(numListsRequired);\n each$1(itemsToRemove, function (item) {\n return Replacing.remove(container, item);\n });\n each$1(itemsToAdd, function (item) {\n return Replacing.append(container, item);\n });\n var builtLists = Replacing.contents(container);\n each$1(builtLists, function (item, i) {\n detail.setupItem(list, item, items[i], i);\n });\n });\n };\n var extra = detail.shell ? {\n behaviours: [Replacing.config({})],\n components: []\n } : {\n behaviours: [],\n components: components\n };\n var getListContainer = function (component) {\n return detail.shell ? Optional.some(component) : getPart(component, detail, 'items');\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: extra.components,\n behaviours: augment(detail.listBehaviours, extra.behaviours),\n apis: { setItems: setItems }\n };\n };\n var CustomList = composite({\n name: name(),\n configFields: schema$f(),\n partFields: parts$9(),\n factory: factory$d,\n apis: {\n setItems: function (apis, list, items) {\n apis.setItems(list, items);\n }\n }\n });\n\n var schema$e = constant$1([\n required$1('dom'),\n defaulted('shell', true),\n field('toolbarBehaviours', [Replacing])\n ]);\n var enhanceGroups = function () {\n return { behaviours: derive$1([Replacing.config({})]) };\n };\n var parts$8 = constant$1([optional({\n name: 'groups',\n overrides: enhanceGroups\n })]);\n\n var factory$c = function (detail, components, _spec, _externals) {\n var setGroups = function (toolbar, groups) {\n getGroupContainer(toolbar).fold(function () {\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 }, function (container) {\n Replacing.set(container, groups);\n });\n };\n var getGroupContainer = function (component) {\n return detail.shell ? Optional.some(component) : getPart(component, detail, 'groups');\n };\n var extra = detail.shell ? {\n behaviours: [Replacing.config({})],\n components: []\n } : {\n behaviours: [],\n components: 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: { setGroups: setGroups },\n domModification: { attributes: { role: 'group' } }\n };\n };\n var Toolbar = composite({\n name: 'Toolbar',\n configFields: schema$e(),\n partFields: parts$8(),\n factory: factory$c,\n apis: {\n setGroups: function (apis, toolbar, groups) {\n apis.setGroups(toolbar, groups);\n }\n }\n });\n\n var setup$a = noop;\n var isDocked$2 = never;\n var getBehaviours$1 = constant$1([]);\n\n var StaticHeader = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setup: setup$a,\n isDocked: isDocked$2,\n getBehaviours: getBehaviours$1\n });\n\n var getOffsetParent = function (element) {\n var isFixed = is$1(getRaw(element, 'position'), 'fixed');\n var offsetParent$1 = isFixed ? Optional.none() : offsetParent(element);\n return offsetParent$1.orThunk(function () {\n var marker = SugarElement.fromTag('span');\n return parent(element).bind(function (parent) {\n append$2(parent, marker);\n var offsetParent$1 = offsetParent(marker);\n remove$5(marker);\n return offsetParent$1;\n });\n });\n };\n var getOrigin = function (element) {\n return getOffsetParent(element).map(absolute$3).getOrThunk(function () {\n return SugarPosition(0, 0);\n });\n };\n\n var morphAdt = Adt.generate([\n { static: [] },\n { absolute: ['positionCss'] },\n { fixed: ['positionCss'] }\n ]);\n var appear = function (component, contextualInfo) {\n var elem = component.element;\n add$2(elem, contextualInfo.transitionClass);\n remove$2(elem, contextualInfo.fadeOutClass);\n add$2(elem, contextualInfo.fadeInClass);\n contextualInfo.onShow(component);\n };\n var disappear = function (component, contextualInfo) {\n var elem = component.element;\n add$2(elem, contextualInfo.transitionClass);\n remove$2(elem, contextualInfo.fadeInClass);\n add$2(elem, contextualInfo.fadeOutClass);\n contextualInfo.onHide(component);\n };\n var isPartiallyVisible = function (box, viewport) {\n return box.y < viewport.bottom && box.bottom > viewport.y;\n };\n var isTopCompletelyVisible = function (box, viewport) {\n return box.y >= viewport.y;\n };\n var isBottomCompletelyVisible = function (box, viewport) {\n return box.bottom <= viewport.bottom;\n };\n var isVisibleForModes = function (modes, box, viewport) {\n return forall(modes, function (mode) {\n switch (mode) {\n case 'bottom':\n return isBottomCompletelyVisible(box, viewport);\n case 'top':\n return isTopCompletelyVisible(box, viewport);\n }\n });\n };\n var getPrior = function (elem, state) {\n return state.getInitialPos().map(function (pos) {\n return bounds(pos.bounds.x, pos.bounds.y, get$a(elem), get$b(elem));\n });\n };\n var storePrior = function (elem, box, state) {\n state.setInitialPos({\n style: getAllRaw(elem),\n position: get$c(elem, 'position') || 'static',\n bounds: box\n });\n };\n var revertToOriginal = function (elem, box, state) {\n return state.getInitialPos().bind(function (position) {\n state.clearInitialPos();\n switch (position.position) {\n case 'static':\n return Optional.some(morphAdt.static());\n case 'absolute':\n var offsetBox_1 = getOffsetParent(elem).map(box$1).getOrThunk(function () {\n return box$1(body());\n });\n return Optional.some(morphAdt.absolute(NuPositionCss('absolute', get$e(position.style, 'left').map(function (_left) {\n return box.x - offsetBox_1.x;\n }), get$e(position.style, 'top').map(function (_top) {\n return box.y - offsetBox_1.y;\n }), get$e(position.style, 'right').map(function (_right) {\n return offsetBox_1.right - box.right;\n }), get$e(position.style, 'bottom').map(function (_bottom) {\n return offsetBox_1.bottom - box.bottom;\n }))));\n default:\n return Optional.none();\n }\n });\n };\n var morphToOriginal = function (elem, viewport, state) {\n return getPrior(elem, state).filter(function (box) {\n return isVisibleForModes(state.getModes(), box, viewport);\n }).bind(function (box) {\n return revertToOriginal(elem, box, state);\n });\n };\n var morphToFixed = function (elem, viewport, state) {\n var box = box$1(elem);\n if (!isVisibleForModes(state.getModes(), box, viewport)) {\n storePrior(elem, box, state);\n var winBox = win();\n var left = box.x - winBox.x;\n var top_1 = viewport.y - winBox.y;\n var bottom = winBox.bottom - viewport.bottom;\n var isTop = box.y <= viewport.y;\n return Optional.some(morphAdt.fixed(NuPositionCss('fixed', Optional.some(left), isTop ? Optional.some(top_1) : Optional.none(), Optional.none(), !isTop ? Optional.some(bottom) : Optional.none())));\n } else {\n return Optional.none();\n }\n };\n var getMorph = function (component, viewport, state) {\n var elem = component.element;\n var isDocked = is$1(getRaw(elem, 'position'), 'fixed');\n return isDocked ? morphToOriginal(elem, viewport, state) : morphToFixed(elem, viewport, state);\n };\n var getMorphToOriginal = function (component, state) {\n var elem = component.element;\n return getPrior(elem, state).bind(function (box) {\n return revertToOriginal(elem, box, state);\n });\n };\n\n var morphToStatic = function (component, config, state) {\n state.setDocked(false);\n each$1([\n 'left',\n 'right',\n 'top',\n 'bottom',\n 'position'\n ], function (prop) {\n return remove$6(component.element, prop);\n });\n config.onUndocked(component);\n };\n var morphToCoord = function (component, config, state, position) {\n var isDocked = position.position === 'fixed';\n state.setDocked(isDocked);\n applyPositionCss(component.element, position);\n var method = isDocked ? config.onDocked : config.onUndocked;\n method(component);\n };\n var updateVisibility = function (component, config, state, viewport, morphToDocked) {\n if (morphToDocked === void 0) {\n morphToDocked = false;\n }\n config.contextual.each(function (contextInfo) {\n contextInfo.lazyContext(component).each(function (box) {\n var isVisible = isPartiallyVisible(box, viewport);\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 var method = isVisible ? appear : disappear;\n method(component, contextInfo);\n }\n }\n });\n });\n };\n var refreshInternal = function (component, config, state) {\n var viewport = config.lazyViewport(component);\n var isDocked = state.isDocked();\n if (isDocked) {\n updateVisibility(component, config, state, viewport);\n }\n getMorph(component, viewport, state).each(function (morph) {\n morph.fold(function () {\n return morphToStatic(component, config, state);\n }, function (position) {\n return morphToCoord(component, config, state, position);\n }, function (position) {\n updateVisibility(component, config, state, viewport, true);\n morphToCoord(component, config, state, position);\n });\n });\n };\n var resetInternal = function (component, config, state) {\n var elem = component.element;\n state.setDocked(false);\n getMorphToOriginal(component, state).each(function (morph) {\n morph.fold(function () {\n return morphToStatic(component, config, state);\n }, function (position) {\n return morphToCoord(component, config, state, position);\n }, noop);\n });\n state.setVisible(true);\n config.contextual.each(function (contextInfo) {\n remove$1(elem, [\n contextInfo.fadeInClass,\n contextInfo.fadeOutClass,\n contextInfo.transitionClass\n ]);\n contextInfo.onShow(component);\n });\n refresh$4(component, config, state);\n };\n var refresh$4 = function (component, config, state) {\n if (component.getSystem().isConnected()) {\n refreshInternal(component, config, state);\n }\n };\n var reset = function (component, config, state) {\n if (state.isDocked()) {\n resetInternal(component, config, state);\n }\n };\n var isDocked$1 = function (component, config, state) {\n return state.isDocked();\n };\n var setModes = function (component, config, state, modes) {\n return state.setModes(modes);\n };\n var getModes = function (component, config, state) {\n return state.getModes();\n };\n\n var DockingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n refresh: refresh$4,\n reset: reset,\n isDocked: isDocked$1,\n getModes: getModes,\n setModes: setModes\n });\n\n var events$5 = function (dockInfo, dockState) {\n return derive$2([\n runOnSource(transitionend(), function (component, simulatedEvent) {\n dockInfo.contextual.each(function (contextInfo) {\n if (has(component.element, contextInfo.transitionClass)) {\n remove$1(component.element, [\n contextInfo.transitionClass,\n contextInfo.fadeInClass\n ]);\n var notify = dockState.isVisible() ? contextInfo.onShown : contextInfo.onHidden;\n notify(component);\n }\n simulatedEvent.stop();\n });\n }),\n run$1(windowScroll(), function (component, _) {\n refresh$4(component, dockInfo, dockState);\n }),\n run$1(windowResize(), function (component, _) {\n reset(component, dockInfo, dockState);\n })\n ]);\n };\n\n var ActiveDocking = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$5\n });\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', win),\n defaultedArrayOf('modes', [\n 'top',\n 'bottom'\n ], string),\n onHandler('onDocked'),\n onHandler('onUndocked')\n ];\n\n var init$6 = function (spec) {\n var docked = Cell(false);\n var visible = Cell(true);\n var initialBounds = value$1();\n var modes = Cell(spec.modes);\n var readState = function () {\n return 'docked: ' + docked.get() + ', visible: ' + visible.get() + ', modes: ' + modes.get().join(',');\n };\n return nu$8({\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: readState\n });\n };\n\n var DockingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$6\n });\n\n var Docking = create$8({\n fields: DockingSchema,\n name: 'docking',\n active: ActiveDocking,\n apis: DockingApis,\n state: DockingState\n });\n\n var toolbarHeightChange = constant$1(generate$6('toolbar-height-change'));\n\n var visibility = {\n fadeInClass: 'tox-editor-dock-fadein',\n fadeOutClass: 'tox-editor-dock-fadeout',\n transitionClass: 'tox-editor-dock-transition'\n };\n var editorStickyOnClass = 'tox-tinymce--toolbar-sticky-on';\n var editorStickyOffClass = 'tox-tinymce--toolbar-sticky-off';\n var scrollFromBehindHeader = function (e, containerHeader) {\n var doc = owner$4(containerHeader);\n var viewHeight = doc.dom.defaultView.innerHeight;\n var scrollPos = get$9(doc);\n var markerElement = SugarElement.fromDom(e.elm);\n var markerPos = absolute$2(markerElement);\n var markerHeight = get$b(markerElement);\n var markerTop = markerPos.y;\n var markerBottom = markerTop + markerHeight;\n var editorHeaderPos = absolute$3(containerHeader);\n var editorHeaderHeight = get$b(containerHeader);\n var editorHeaderTop = editorHeaderPos.top;\n var editorHeaderBottom = editorHeaderTop + editorHeaderHeight;\n var editorHeaderDockedAtTop = Math.abs(editorHeaderTop - scrollPos.top) < 2;\n var 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 var y = markerTop - viewHeight + markerHeight + editorHeaderHeight;\n to(scrollPos.left, y, doc);\n }\n };\n var isDockedMode = function (header, mode) {\n return contains$2(Docking.getModes(header), mode);\n };\n var updateIframeContentFlow = function (header) {\n var getOccupiedHeight = function (elm) {\n return getOuter$2(elm) + (parseInt(get$c(elm, 'margin-top'), 10) || 0) + (parseInt(get$c(elm, 'margin-bottom'), 10) || 0);\n };\n var elm = header.element;\n parent(elm).each(function (parentElem) {\n var padding = 'padding-' + Docking.getModes(header)[0];\n if (Docking.isDocked(header)) {\n var parentWidth = get$a(parentElem);\n set$7(elm, 'width', parentWidth + 'px');\n set$7(parentElem, padding, getOccupiedHeight(elm) + 'px');\n } else {\n remove$6(elm, 'width');\n remove$6(parentElem, padding);\n }\n });\n };\n var updateSinkVisibility = function (sinkElem, visible) {\n if (visible) {\n remove$2(sinkElem, visibility.fadeOutClass);\n add$1(sinkElem, [\n visibility.transitionClass,\n visibility.fadeInClass\n ]);\n } else {\n remove$2(sinkElem, visibility.fadeInClass);\n add$1(sinkElem, [\n visibility.fadeOutClass,\n visibility.transitionClass\n ]);\n }\n };\n var updateEditorClasses = function (editor, docked) {\n var editorContainer = SugarElement.fromDom(editor.getContainer());\n if (docked) {\n add$2(editorContainer, editorStickyOnClass);\n remove$2(editorContainer, editorStickyOffClass);\n } else {\n add$2(editorContainer, editorStickyOffClass);\n remove$2(editorContainer, editorStickyOnClass);\n }\n };\n var restoreFocus = function (headerElem, focusedElem) {\n var ownerDoc = owner$4(focusedElem);\n active(ownerDoc).filter(function (activeElm) {\n return !eq(focusedElem, activeElm);\n }).filter(function (activeElm) {\n return eq(activeElm, SugarElement.fromDom(ownerDoc.dom.body)) || contains(headerElem, activeElm);\n }).each(function () {\n return focus$3(focusedElem);\n });\n };\n var findFocusedElem = function (rootElm, lazySink) {\n return search(rootElm).orThunk(function () {\n return lazySink().toOptional().bind(function (sink) {\n return search(sink.element);\n });\n });\n };\n var setup$9 = function (editor, sharedBackstage, lazyHeader) {\n if (!editor.inline) {\n if (!sharedBackstage.header.isPositionedAtTop()) {\n editor.on('ResizeEditor', function () {\n lazyHeader().each(Docking.reset);\n });\n }\n editor.on('ResizeWindow ResizeEditor', function () {\n lazyHeader().each(updateIframeContentFlow);\n });\n editor.on('SkinLoaded', function () {\n lazyHeader().each(function (comp) {\n Docking.isDocked(comp) ? Docking.reset(comp) : Docking.refresh(comp);\n });\n });\n editor.on('FullscreenStateChanged', function () {\n lazyHeader().each(Docking.reset);\n });\n }\n editor.on('AfterScrollIntoView', function (e) {\n lazyHeader().each(function (header) {\n Docking.refresh(header);\n var headerElem = header.element;\n if (isVisible(headerElem)) {\n scrollFromBehindHeader(e, headerElem);\n }\n });\n });\n editor.on('PostRender', function () {\n updateEditorClasses(editor, false);\n });\n };\n var isDocked = function (lazyHeader) {\n return lazyHeader().map(Docking.isDocked).getOr(false);\n };\n var getIframeBehaviours = function () {\n var _a;\n return [Receiving.config({ channels: (_a = {}, _a[toolbarHeightChange()] = { onReceive: updateIframeContentFlow }, _a) })];\n };\n var getBehaviours = function (editor, sharedBackstage) {\n var focusedElm = value$1();\n var lazySink = sharedBackstage.getSink;\n var runOnSinkElement = function (f) {\n lazySink().each(function (sink) {\n return f(sink.element);\n });\n };\n var onDockingSwitch = function (comp) {\n if (!editor.inline) {\n updateIframeContentFlow(comp);\n }\n updateEditorClasses(editor, Docking.isDocked(comp));\n comp.getSystem().broadcastOn([repositionPopups()], {});\n lazySink().each(function (sink) {\n return sink.getSystem().broadcastOn([repositionPopups()], {});\n });\n };\n var additionalBehaviours = editor.inline ? [] : getIframeBehaviours();\n return __spreadArray([\n Focusing.config({}),\n Docking.config({\n contextual: __assign({\n lazyContext: function (comp) {\n var headerHeight = getOuter$2(comp.element);\n var container = editor.inline ? editor.getContentAreaContainer() : editor.getContainer();\n var box = box$1(SugarElement.fromDom(container));\n var boxHeight = box.height - headerHeight;\n var topBound = box.y + (isDockedMode(comp, 'top') ? 0 : headerHeight);\n return Optional.some(bounds(box.x, topBound, box.width, boxHeight));\n },\n onShow: function () {\n runOnSinkElement(function (elem) {\n return updateSinkVisibility(elem, true);\n });\n },\n onShown: function (comp) {\n runOnSinkElement(function (elem) {\n return remove$1(elem, [\n visibility.transitionClass,\n visibility.fadeInClass\n ]);\n });\n focusedElm.get().each(function (elem) {\n restoreFocus(comp.element, elem);\n focusedElm.clear();\n });\n },\n onHide: function (comp) {\n findFocusedElem(comp.element, lazySink).fold(focusedElm.clear, focusedElm.set);\n runOnSinkElement(function (elem) {\n return updateSinkVisibility(elem, false);\n });\n },\n onHidden: function () {\n runOnSinkElement(function (elem) {\n return remove$1(elem, [visibility.transitionClass]);\n });\n }\n }, visibility),\n lazyViewport: function (comp) {\n var win$1 = win();\n var offset = getStickyToolbarOffset(editor);\n var top = win$1.y + (isDockedMode(comp, 'top') ? offset : 0);\n var height = win$1.height - (isDockedMode(comp, 'bottom') ? offset : 0);\n return bounds(win$1.x, top, win$1.width, height);\n },\n modes: [sharedBackstage.header.getDockingMode()],\n onDocked: onDockingSwitch,\n onUndocked: onDockingSwitch\n })\n ], additionalBehaviours, true);\n };\n\n var StickyHeader = /*#__PURE__*/Object.freeze({\n __proto__: null,\n setup: setup$9,\n isDocked: isDocked,\n getBehaviours: getBehaviours\n });\n\n var renderHeader = function (spec) {\n var editor = spec.editor;\n var 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 var groupToolbarButtonSchema = objOf([\n requiredString('type'),\n requiredOf('items', oneOf([\n arrOfObj([\n requiredString('name'),\n requiredArrayOf('items', string)\n ]),\n string\n ]))\n ].concat(baseToolbarButtonFields));\n var createGroupToolbarButton = function (spec) {\n return asRaw('GroupToolbarButton', groupToolbarButtonSchema, spec);\n };\n\n var baseMenuButtonFields = [\n optionString('text'),\n optionString('tooltip'),\n optionString('icon'),\n requiredFunction('fetch'),\n defaultedFunction('onSetup', function () {\n return noop;\n })\n ];\n\n var MenuButtonSchema = objOf(__spreadArray([requiredString('type')], baseMenuButtonFields, true));\n var createMenuButton = function (spec) {\n return asRaw('menubutton', MenuButtonSchema, spec);\n };\n\n var splitButtonSchema = objOf([\n requiredString('type'),\n optionString('tooltip'),\n optionString('icon'),\n optionString('text'),\n optionFunction('select'),\n requiredFunction('fetch'),\n defaultedFunction('onSetup', function () {\n return noop;\n }),\n defaultedStringEnum('presets', 'normal', [\n 'normal',\n 'color',\n 'listpreview'\n ]),\n defaulted('columns', 1),\n requiredFunction('onAction'),\n requiredFunction('onItemAction')\n ]);\n var createSplitButton = function (spec) {\n return asRaw('SplitButton', splitButtonSchema, spec);\n };\n\n var factory$b = function (detail, spec) {\n var setMenus = function (comp, menus) {\n var newMenus = map$2(menus, function (m) {\n var buttonSpec = {\n type: 'menubutton',\n text: m.text,\n fetch: function (callback) {\n callback(m.getItems());\n }\n };\n var internal = createMenuButton(buttonSpec).mapError(function (errInfo) {\n return formatError(errInfo);\n }).getOrDie();\n return renderMenuButton(internal, 'tox-mbtn', spec.backstage, Optional.some('menuitem'));\n });\n Replacing.set(comp, newMenus);\n };\n var apis = {\n focus: Keying.focusIn,\n setMenus: 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(function (component) {\n detail.onSetup(component);\n }),\n run$1(mouseover(), function (comp, se) {\n descendant(comp.element, '.' + 'tox-mbtn--active').each(function (activeButton) {\n closest$1(se.event.target, '.' + 'tox-mbtn').each(function (hoveredButton) {\n if (!eq(activeButton, hoveredButton)) {\n comp.getSystem().getByDom(activeButton).each(function (activeComp) {\n comp.getSystem().getByDom(hoveredButton).each(function (hoveredComp) {\n Dropdown.expand(hoveredComp);\n Dropdown.close(activeComp);\n Focusing.focus(hoveredComp);\n });\n });\n }\n });\n });\n }),\n run$1(focusShifted(), function (comp, se) {\n se.event.prevFocus.bind(function (prev) {\n return comp.getSystem().getByDom(prev).toOptional();\n }).each(function (prev) {\n se.event.newFocus.bind(function (nu) {\n return comp.getSystem().getByDom(nu).toOptional();\n }).each(function (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: function (comp) {\n detail.onEscape(comp);\n return Optional.some(true);\n }\n }),\n Tabstopping.config({})\n ]),\n apis: apis,\n domModification: { attributes: { role: 'menubar' } }\n };\n };\n var SilverMenubar = single({\n factory: factory$b,\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: function (apis, comp) {\n apis.focus(comp);\n },\n setMenus: function (apis, comp, menus) {\n apis.setMenus(comp, menus);\n }\n }\n });\n\n var getAnimationRoot = function (component, slideConfig) {\n return slideConfig.getAnimationRoot.fold(function () {\n return component.element;\n }, function (get) {\n return get(component);\n });\n };\n\n var getDimensionProperty = function (slideConfig) {\n return slideConfig.dimension.property;\n };\n var getDimension = function (slideConfig, elem) {\n return slideConfig.dimension.getDimension(elem);\n };\n var disableTransitions = function (component, slideConfig) {\n var root = getAnimationRoot(component, slideConfig);\n remove$1(root, [\n slideConfig.shrinkingClass,\n slideConfig.growingClass\n ]);\n };\n var setShrunk = function (component, slideConfig) {\n remove$2(component.element, slideConfig.openClass);\n add$2(component.element, slideConfig.closedClass);\n set$7(component.element, getDimensionProperty(slideConfig), '0px');\n reflow(component.element);\n };\n var setGrown = function (component, slideConfig) {\n remove$2(component.element, slideConfig.closedClass);\n add$2(component.element, slideConfig.openClass);\n remove$6(component.element, getDimensionProperty(slideConfig));\n };\n var doImmediateShrink = function (component, slideConfig, slideState, _calculatedSize) {\n slideState.setCollapsed();\n set$7(component.element, getDimensionProperty(slideConfig), getDimension(slideConfig, component.element));\n reflow(component.element);\n disableTransitions(component, slideConfig);\n setShrunk(component, slideConfig);\n slideConfig.onStartShrink(component);\n slideConfig.onShrunk(component);\n };\n var doStartShrink = function (component, slideConfig, slideState, calculatedSize) {\n var size = calculatedSize.getOrThunk(function () {\n return getDimension(slideConfig, component.element);\n });\n slideState.setCollapsed();\n set$7(component.element, getDimensionProperty(slideConfig), size);\n reflow(component.element);\n var root = getAnimationRoot(component, slideConfig);\n remove$2(root, slideConfig.growingClass);\n add$2(root, slideConfig.shrinkingClass);\n setShrunk(component, slideConfig);\n slideConfig.onStartShrink(component);\n };\n var doStartSmartShrink = function (component, slideConfig, slideState) {\n var size = getDimension(slideConfig, component.element);\n var shrinker = size === '0px' ? doImmediateShrink : doStartShrink;\n shrinker(component, slideConfig, slideState, Optional.some(size));\n };\n var doStartGrow = function (component, slideConfig, slideState) {\n var root = getAnimationRoot(component, slideConfig);\n var wasShrinking = has(root, slideConfig.shrinkingClass);\n var beforeSize = getDimension(slideConfig, component.element);\n setGrown(component, slideConfig);\n var fullSize = getDimension(slideConfig, component.element);\n var startPartialGrow = function () {\n set$7(component.element, getDimensionProperty(slideConfig), beforeSize);\n reflow(component.element);\n };\n var startCompleteGrow = function () {\n setShrunk(component, slideConfig);\n };\n var setStartSize = wasShrinking ? startPartialGrow : startCompleteGrow;\n setStartSize();\n remove$2(root, slideConfig.shrinkingClass);\n add$2(root, slideConfig.growingClass);\n setGrown(component, slideConfig);\n set$7(component.element, getDimensionProperty(slideConfig), fullSize);\n slideState.setExpanded();\n slideConfig.onStartGrow(component);\n };\n var refresh$3 = function (component, slideConfig, slideState) {\n if (slideState.isExpanded()) {\n remove$6(component.element, getDimensionProperty(slideConfig));\n var fullSize = getDimension(slideConfig, component.element);\n set$7(component.element, getDimensionProperty(slideConfig), fullSize);\n }\n };\n var grow = function (component, slideConfig, slideState) {\n if (!slideState.isExpanded()) {\n doStartGrow(component, slideConfig, slideState);\n }\n };\n var shrink = function (component, slideConfig, slideState) {\n if (slideState.isExpanded()) {\n doStartSmartShrink(component, slideConfig, slideState);\n }\n };\n var immediateShrink = function (component, slideConfig, slideState) {\n if (slideState.isExpanded()) {\n doImmediateShrink(component, slideConfig, slideState);\n }\n };\n var hasGrown = function (component, slideConfig, slideState) {\n return slideState.isExpanded();\n };\n var hasShrunk = function (component, slideConfig, slideState) {\n return slideState.isCollapsed();\n };\n var isGrowing = function (component, slideConfig, _slideState) {\n var root = getAnimationRoot(component, slideConfig);\n return has(root, slideConfig.growingClass) === true;\n };\n var isShrinking = function (component, slideConfig, _slideState) {\n var root = getAnimationRoot(component, slideConfig);\n return has(root, slideConfig.shrinkingClass) === true;\n };\n var isTransitioning = function (component, slideConfig, slideState) {\n return isGrowing(component, slideConfig) || isShrinking(component, slideConfig);\n };\n var toggleGrow = function (component, slideConfig, slideState) {\n var f = slideState.isExpanded() ? doStartSmartShrink : doStartGrow;\n f(component, slideConfig, slideState);\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 });\n\n var exhibit = function (base, slideConfig, _slideState) {\n var expanded = slideConfig.expanded;\n return expanded ? nu$7({\n classes: [slideConfig.openClass],\n styles: {}\n }) : nu$7({\n classes: [slideConfig.closedClass],\n styles: wrap$1(slideConfig.dimension.property, '0px')\n });\n };\n var events$4 = function (slideConfig, slideState) {\n return derive$2([runOnSource(transitionend(), function (component, simulatedEvent) {\n var raw = simulatedEvent.event.raw;\n if (raw.propertyName === slideConfig.dimension.property) {\n disableTransitions(component, slideConfig);\n if (slideState.isExpanded()) {\n remove$6(component.element, slideConfig.dimension.property);\n }\n var notify = slideState.isExpanded() ? slideConfig.onGrown : slideConfig.onShrunk;\n notify(component);\n }\n })]);\n };\n\n var ActiveSliding = /*#__PURE__*/Object.freeze({\n __proto__: null,\n exhibit: exhibit,\n events: events$4\n });\n\n var SlidingSchema = [\n required$1('closedClass'),\n required$1('openClass'),\n required$1('shrinkingClass'),\n required$1('growingClass'),\n option('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', function (elem) {\n return get$a(elem) + 'px';\n })\n ],\n height: [\n output$1('property', 'height'),\n output$1('getDimension', function (elem) {\n return get$b(elem) + 'px';\n })\n ]\n }))\n ];\n\n var init$5 = function (spec) {\n var state = Cell(spec.expanded);\n var readState = function () {\n return 'expanded: ' + state.get();\n };\n return nu$8({\n isExpanded: function () {\n return state.get() === true;\n },\n isCollapsed: function () {\n return state.get() === false;\n },\n setCollapsed: curry(state.set, false),\n setExpanded: curry(state.set, true),\n readState: readState\n });\n };\n\n var SlidingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$5\n });\n\n var Sliding = create$8({\n fields: SlidingSchema,\n name: 'sliding',\n active: ActiveSliding,\n apis: SlidingApis,\n state: SlidingState\n });\n\n var owner = 'container';\n var schema$d = [field('slotBehaviours', [])];\n var getPartName = function (name) {\n return '';\n };\n var sketch = function (sSpec) {\n var parts = function () {\n var record = [];\n var slot = function (name, config) {\n record.push(name);\n return generateOne$1(owner, getPartName(name), config);\n };\n return {\n slot: slot,\n record: constant$1(record)\n };\n }();\n var spec = sSpec(parts);\n var partNames = parts.record();\n var fieldParts = map$2(partNames, function (n) {\n return required({\n name: n,\n pname: getPartName(n)\n });\n });\n return composite$1(owner, schema$d, fieldParts, make$1, spec);\n };\n var make$1 = function (detail, components) {\n var getSlotNames = function (_) {\n return getAllPartNames(detail);\n };\n var getSlot = function (container, key) {\n return getPart(container, detail, key);\n };\n var onSlot = function (f, def) {\n return function (container, key) {\n return getPart(container, detail, key).map(function (slot) {\n return f(slot, key);\n }).getOr(def);\n };\n };\n var onSlots = function (f) {\n return function (container, keys) {\n each$1(keys, function (key) {\n return f(container, key);\n });\n };\n };\n var doShowing = function (comp, _key) {\n return get$d(comp.element, 'aria-hidden') !== 'true';\n };\n var doShow = function (comp, key) {\n if (!doShowing(comp)) {\n var element = comp.element;\n remove$6(element, 'display');\n remove$7(element, 'aria-hidden');\n emitWith(comp, slotVisibility(), {\n name: key,\n visible: true\n });\n }\n };\n var doHide = function (comp, key) {\n if (doShowing(comp)) {\n var element = comp.element;\n set$7(element, 'display', 'none');\n set$8(element, 'aria-hidden', 'true');\n emitWith(comp, slotVisibility(), {\n name: key,\n visible: false\n });\n }\n };\n var isShowing = onSlot(doShowing, false);\n var hideSlot = onSlot(doHide);\n var hideSlots = onSlots(hideSlot);\n var hideAllSlots = function (container) {\n return hideSlots(container, getSlotNames());\n };\n var showSlot = onSlot(doShow);\n var apis = {\n getSlotNames: getSlotNames,\n getSlot: getSlot,\n isShowing: isShowing,\n hideSlot: hideSlot,\n hideAllSlots: hideAllSlots,\n showSlot: showSlot\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: get$2(detail.slotBehaviours),\n apis: apis\n };\n };\n var slotApis = map$1({\n getSlotNames: function (apis, c) {\n return apis.getSlotNames(c);\n },\n getSlot: function (apis, c, key) {\n return apis.getSlot(c, key);\n },\n isShowing: function (apis, c, key) {\n return apis.isShowing(c, key);\n },\n hideSlot: function (apis, c, key) {\n return apis.hideSlot(c, key);\n },\n hideAllSlots: function (apis, c) {\n return apis.hideAllSlots(c);\n },\n showSlot: function (apis, c, key) {\n return apis.showSlot(c, key);\n }\n }, function (value) {\n return makeApi(value);\n });\n var SlotContainer = __assign(__assign({}, slotApis), { sketch: sketch });\n\n var sidebarSchema = objOf([\n optionString('icon'),\n optionString('tooltip'),\n defaultedFunction('onShow', noop),\n defaultedFunction('onHide', noop),\n defaultedFunction('onSetup', function () {\n return noop;\n })\n ]);\n var createSidebar = function (spec) {\n return asRaw('sidebar', sidebarSchema, spec);\n };\n\n var setup$8 = function (editor) {\n var sidebars = editor.ui.registry.getAll().sidebars;\n each$1(keys(sidebars), function (name) {\n var spec = sidebars[name];\n var isActive = function () {\n return is$1(Optional.from(editor.queryCommandValue('ToggleSidebar')), name);\n };\n editor.ui.registry.addToggleButton(name, {\n icon: spec.icon,\n tooltip: spec.tooltip,\n onAction: function (buttonApi) {\n editor.execCommand('ToggleSidebar', false, name);\n buttonApi.setActive(isActive());\n },\n onSetup: function (buttonApi) {\n var handleToggle = function () {\n return buttonApi.setActive(isActive());\n };\n editor.on('ToggleSidebar', handleToggle);\n return function () {\n editor.off('ToggleSidebar', handleToggle);\n };\n }\n });\n });\n };\n var getApi = function (comp) {\n return {\n element: function () {\n return comp.element.dom;\n }\n };\n };\n var makePanels = function (parts, panelConfigs) {\n var specs = map$2(keys(panelConfigs), function (name) {\n var spec = panelConfigs[name];\n var bridged = getOrDie(createSidebar(spec));\n return {\n name: name,\n getApi: getApi,\n onSetup: bridged.onSetup,\n onShow: bridged.onShow,\n onHide: bridged.onHide\n };\n });\n return map$2(specs, function (spec) {\n var 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(), function (sidepanel, se) {\n var data = se.event;\n var optSidePanelSpec = find$5(specs, function (config) {\n return config.name === data.name;\n });\n optSidePanelSpec.each(function (sidePanelSpec) {\n var handler = data.visible ? sidePanelSpec.onShow : sidePanelSpec.onHide;\n handler(sidePanelSpec.getApi(sidepanel));\n });\n })\n ])\n });\n });\n };\n var makeSidebar = function (panelConfigs) {\n return SlotContainer.sketch(function (parts) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-sidebar__pane-container']\n },\n components: makePanels(parts, panelConfigs),\n slotBehaviours: SimpleBehaviours.unnamedEvents([runOnAttached(function (slotContainer) {\n return SlotContainer.hideAllSlots(slotContainer);\n })])\n };\n });\n };\n var setSidebar = function (sidebar, panelConfigs) {\n var optSlider = Composing.getCurrent(sidebar);\n optSlider.each(function (slider) {\n return Replacing.set(slider, [makeSidebar(panelConfigs)]);\n });\n };\n var toggleSidebar = function (sidebar, name) {\n var optSlider = Composing.getCurrent(sidebar);\n optSlider.each(function (slider) {\n var optSlotContainer = Composing.getCurrent(slider);\n optSlotContainer.each(function (slotContainer) {\n if (Sliding.hasGrown(slider)) {\n if (SlotContainer.isShowing(slotContainer, name)) {\n Sliding.shrink(slider);\n } else {\n SlotContainer.hideAllSlots(slotContainer);\n SlotContainer.showSlot(slotContainer, name);\n }\n } else {\n SlotContainer.hideAllSlots(slotContainer);\n SlotContainer.showSlot(slotContainer, name);\n Sliding.grow(slider);\n }\n });\n });\n };\n var whichSidebar = function (sidebar) {\n var optSlider = Composing.getCurrent(sidebar);\n return optSlider.bind(function (slider) {\n var sidebarOpen = Sliding.isGrowing(slider) || Sliding.hasGrown(slider);\n if (sidebarOpen) {\n var optSlotContainer = Composing.getCurrent(slider);\n return optSlotContainer.bind(function (slotContainer) {\n return find$5(SlotContainer.getSlotNames(slotContainer), function (name) {\n return SlotContainer.isShowing(slotContainer, name);\n });\n });\n } else {\n return Optional.none();\n }\n });\n };\n var fixSize = generate$6('FixSizeEvent');\n var autoSize = generate$6('AutoSizeEvent');\n var renderSidebar = function (spec) {\n return {\n uid: spec.uid,\n dom: {\n tag: 'div',\n classes: ['tox-sidebar'],\n attributes: { role: 'complementary' }\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: function (slider) {\n var optSlotContainer = Composing.getCurrent(slider);\n optSlotContainer.each(SlotContainer.hideAllSlots);\n emit(slider, autoSize);\n },\n onGrown: function (slider) {\n emit(slider, autoSize);\n },\n onStartGrow: function (slider) {\n emitWith(slider, fixSize, { width: getRaw(slider.element, 'width').getOr('') });\n },\n onStartShrink: function (slider) {\n emitWith(slider, fixSize, { width: get$a(slider.element) + 'px' });\n }\n }),\n Replacing.config({}),\n Composing.config({\n find: function (comp) {\n var 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, function (comp, se) {\n set$7(comp.element, 'width', se.event.width);\n }),\n run$1(autoSize, function (comp, _se) {\n remove$6(comp.element, 'width');\n })\n ])\n ])\n };\n };\n\n var block = function (component, config, state, getBusySpec) {\n set$8(component.element, 'aria-busy', true);\n var root = config.getRoot(component).getOr(component);\n var blockerBehaviours = derive$1([\n Keying.config({\n mode: 'special',\n onTab: function () {\n return Optional.some(true);\n },\n onShiftTab: function () {\n return Optional.some(true);\n }\n }),\n Focusing.config({})\n ]);\n var blockSpec = getBusySpec(root, blockerBehaviours);\n var 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(function () {\n return Replacing.remove(root, blocker);\n });\n };\n var unblock = function (component, config, state) {\n remove$7(component.element, 'aria-busy');\n if (state.isBlocked()) {\n config.onUnblock(component);\n }\n state.clear();\n };\n\n var BlockingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n block: block,\n unblock: unblock\n });\n\n var BlockingSchema = [\n defaultedFunction('getRoot', Optional.none),\n defaultedBoolean('focus', true),\n onHandler('onBlock'),\n onHandler('onUnblock')\n ];\n\n var init$4 = function () {\n var blocker = destroyable();\n var blockWith = function (destroy) {\n blocker.set({ destroy: destroy });\n };\n return nu$8({\n readState: blocker.isSet,\n blockWith: 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 var Blocking = create$8({\n fields: BlockingSchema,\n name: 'blocking',\n apis: BlockingApis,\n state: BlockingState\n });\n\n var getAttrs = function (elem) {\n var attributes = elem.dom.attributes !== undefined ? elem.dom.attributes : [];\n return foldl(attributes, function (b, attr) {\n var _a;\n if (attr.name === 'class') {\n return b;\n } else {\n return __assign(__assign({}, b), (_a = {}, _a[attr.name] = attr.value, _a));\n }\n }, {});\n };\n var getClasses = function (elem) {\n return Array.prototype.slice.call(elem.dom.classList, 0);\n };\n var fromHtml = function (html) {\n var elem = SugarElement.fromHtml(html);\n var children$1 = children(elem);\n var attrs = getAttrs(elem);\n var classes = getClasses(elem);\n var contents = children$1.length === 0 ? {} : { innerHtml: get$7(elem) };\n return __assign({\n tag: name$2(elem),\n classes: classes,\n attributes: attrs\n }, contents);\n };\n\n var getBusySpec$1 = function (providerBackstage) {\n return function (_root, _behaviours) {\n return {\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 };\n };\n var focusBusyComponent = function (throbber) {\n return Composing.getCurrent(throbber).each(function (comp) {\n return focus$3(comp.element);\n });\n };\n var toggleEditorTabIndex = function (editor, state) {\n var tabIndexAttr = 'tabindex';\n var dataTabIndexAttr = 'data-mce-' + tabIndexAttr;\n Optional.from(editor.iframeElement).map(SugarElement.fromDom).each(function (iframe) {\n if (state) {\n getOpt(iframe, tabIndexAttr).each(function (tabIndex) {\n return set$8(iframe, dataTabIndexAttr, tabIndex);\n });\n set$8(iframe, tabIndexAttr, -1);\n } else {\n remove$7(iframe, tabIndexAttr);\n getOpt(iframe, dataTabIndexAttr).each(function (tabIndex) {\n set$8(iframe, tabIndexAttr, tabIndex);\n remove$7(iframe, dataTabIndexAttr);\n });\n }\n });\n };\n var toggleThrobber = function (editor, comp, state, providerBackstage) {\n var element = comp.element;\n toggleEditorTabIndex(editor, state);\n if (state) {\n Blocking.block(comp, getBusySpec$1(providerBackstage));\n remove$6(element, 'display');\n remove$7(element, 'aria-hidden');\n if (editor.hasFocus()) {\n focusBusyComponent(comp);\n }\n } else {\n var throbberFocus = Composing.getCurrent(comp).exists(function (busyComp) {\n return hasFocus(busyComp.element);\n });\n Blocking.unblock(comp);\n set$7(element, 'display', 'none');\n set$8(element, 'aria-hidden', 'true');\n if (throbberFocus) {\n editor.focus();\n }\n }\n };\n var renderThrobber = function (spec) {\n return {\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({\n find: function (comp) {\n return head(comp.components());\n }\n })\n ]),\n components: []\n };\n };\n var isFocusEvent = function (event) {\n return event.type === 'focusin';\n };\n var isPasteBinTarget = function (event) {\n if (isFocusEvent(event)) {\n var node = event.composed ? head(event.composedPath()) : Optional.from(event.target);\n return node.map(SugarElement.fromDom).filter(isElement$2).exists(function (targetElm) {\n return has(targetElm, 'mce-pastebin');\n });\n } else {\n return false;\n }\n };\n var setup$7 = function (editor, lazyThrobber, sharedBackstage) {\n var throbberState = Cell(false);\n var timer = value$1();\n var stealFocus = function (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', function () {\n editor.dom.bind(editor.getWin(), 'focusin', stealFocus);\n editor.on('BeforeExecCommand', function (e) {\n if (e.command.toLowerCase() === 'mcefocus' && e.value !== true) {\n stealFocus(e);\n }\n });\n });\n }\n var toggle = function (state) {\n if (state !== throbberState.get()) {\n throbberState.set(state);\n toggleThrobber(editor, lazyThrobber(), state, sharedBackstage.providers);\n editor.fire('AfterProgressState', { state: state });\n }\n };\n editor.on('ProgressState', function (e) {\n timer.on(global$f.clearTimeout);\n if (isNumber(e.time)) {\n var timerId = global$f.setEditorTimeout(editor, function () {\n return toggle(e.state);\n }, e.time);\n timer.set(timerId);\n } else {\n toggle(e.state);\n timer.clear();\n }\n });\n };\n\n var generate$1 = function (xs, f) {\n var init = {\n len: 0,\n list: []\n };\n var r = foldl(xs, function (b, a) {\n var value = f(a, b.len);\n return value.fold(constant$1(b), function (v) {\n return {\n len: v.finish,\n list: b.list.concat([v])\n };\n });\n }, init);\n return r.list;\n };\n\n var output = function (within, extra, withinWidth) {\n return {\n within: within,\n extra: extra,\n withinWidth: withinWidth\n };\n };\n var apportion = function (units, total, len) {\n var parray = generate$1(units, function (unit, current) {\n var width = len(unit);\n return Optional.some({\n element: unit,\n start: current,\n finish: current + width,\n width: width\n });\n });\n var within = filter$2(parray, function (unit) {\n return unit.finish <= total;\n });\n var withinWidth = foldr(within, function (acc, el) {\n return acc + el.width;\n }, 0);\n var extra = parray.slice(within.length);\n return {\n within: within,\n extra: extra,\n withinWidth: withinWidth\n };\n };\n var toUnit = function (parray) {\n return map$2(parray, function (unit) {\n return unit.element;\n });\n };\n var fitLast = function (within, extra, withinWidth) {\n var fits = toUnit(within.concat(extra));\n return output(fits, [], withinWidth);\n };\n var overflow = function (within, extra, overflower, withinWidth) {\n var fits = toUnit(within).concat([overflower]);\n return output(fits, toUnit(extra), withinWidth);\n };\n var fitAll = function (within, extra, withinWidth) {\n return output(toUnit(within), [], withinWidth);\n };\n var tryFit = function (total, units, len) {\n var divide = apportion(units, total, len);\n return divide.extra.length === 0 ? Optional.some(divide) : Optional.none();\n };\n var partition = function (total, units, len, overflower) {\n var divide = tryFit(total, units, len).getOrThunk(function () {\n return apportion(units, total - len(overflower), len);\n });\n var within = divide.within;\n var extra = divide.extra;\n var 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 var setGroups$1 = function (toolbar, storedGroups) {\n var bGroups = map$2(storedGroups, function (g) {\n return premade(g);\n });\n Toolbar.setGroups(toolbar, bGroups);\n };\n var findFocusedComp = function (comps) {\n return findMap(comps, function (comp) {\n return search(comp.element).bind(function (focusedElm) {\n return comp.getSystem().getByDom(focusedElm).toOptional();\n });\n });\n };\n var refresh$2 = function (toolbar, detail, setOverflow) {\n var builtGroups = detail.builtGroups.get();\n if (builtGroups.length === 0) {\n return;\n }\n var primary = getPartOrDie(toolbar, detail, 'primary');\n var overflowGroup = Coupling.getCoupled(toolbar, 'overflowGroup');\n set$7(primary.element, 'visibility', 'hidden');\n var groups = builtGroups.concat([overflowGroup]);\n var focusedComp = findFocusedComp(groups);\n setOverflow([]);\n setGroups$1(primary, groups);\n var availableWidth = get$a(primary.element);\n var overflows = partition(availableWidth, detail.builtGroups.get(), function (comp) {\n return get$a(comp.element);\n }, 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$6(primary.element, 'visibility');\n reflow(primary.element);\n focusedComp.each(Focusing.focus);\n };\n\n var schema$c = constant$1([\n field('splitToolbarBehaviours', [Coupling]),\n customField('builtGroups', function () {\n return Cell([]);\n })\n ]);\n\n var schema$b = constant$1([\n markers$1(['overflowToggledClass']),\n optionFunction('getOverflowBounds'),\n required$1('lazySink'),\n customField('overflowGroups', function () {\n return Cell([]);\n })\n ].concat(schema$c()));\n var parts$7 = constant$1([\n required({\n factory: Toolbar,\n schema: schema$e(),\n name: 'primary'\n }),\n external$1({\n schema: schema$e(),\n name: 'overflow'\n }),\n external$1({ name: 'overflow-button' }),\n external$1({ name: 'overflow-group' })\n ]);\n\n var expandable = constant$1(function (element, available) {\n setMax(element, Math.floor(available));\n });\n\n var 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 ]);\n var parts$6 = constant$1([\n external$1({\n name: 'button',\n overrides: function (detail) {\n return {\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 })])\n };\n }\n }),\n external$1({\n factory: Toolbar,\n schema: schema$e(),\n name: 'toolbar',\n overrides: function (detail) {\n return {\n toolbarBehaviours: derive$1([Keying.config({\n mode: 'cyclic',\n onEscape: function (comp) {\n getPart(comp, detail, 'button').each(Focusing.focus);\n return Optional.none();\n }\n })])\n };\n }\n })\n ]);\n\n var toggle = function (button, externals) {\n var 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 var position = function (button, toolbar, detail, layouts) {\n var bounds = detail.getBounds.map(function (bounder) {\n return bounder();\n });\n var sink = detail.lazySink(button).getOrDie();\n Positioning.positionWithinBounds(sink, toolbar, {\n anchor: {\n type: 'hotspot',\n hotspot: button,\n layouts: layouts,\n overrides: { maxWidthFunction: expandable() }\n }\n }, bounds);\n };\n var setGroups = function (button, toolbar, detail, layouts, groups) {\n Toolbar.setGroups(toolbar, groups);\n position(button, toolbar, detail, layouts);\n Toggling.on(button);\n };\n var makeSandbox = function (button, spec, detail) {\n var ariaOwner = manager();\n var onOpen = function (sandbox, toolbar) {\n detail.fetch().get(function (groups) {\n setGroups(button, toolbar, detail, spec.layouts, groups);\n ariaOwner.link(button.element);\n Keying.focusIn(toolbar);\n });\n };\n var onClose = function () {\n Toggling.off(button);\n Focusing.focus(button);\n ariaOwner.unlink(button.element);\n };\n return {\n dom: {\n tag: 'div',\n attributes: { id: ariaOwner.id }\n },\n behaviours: derive$1([\n Keying.config({\n mode: 'special',\n onEscape: function (comp) {\n Sandboxing.close(comp);\n return Optional.some(true);\n }\n }),\n Sandboxing.config({\n onOpen: onOpen,\n onClose: onClose,\n isPartOf: function (container, data, queryElem) {\n return isPartOf$1(data, queryElem) || isPartOf$1(button, queryElem);\n },\n getAttachPoint: function () {\n return detail.lazySink(button).getOrDie();\n }\n }),\n Receiving.config({\n channels: __assign(__assign({}, receivingChannel$1(__assign({ isExtraPart: never }, detail.fireDismissalEventInstead.map(function (fe) {\n return { fireEventInstead: { event: fe.event } };\n }).getOr({})))), receivingChannel({\n doReposition: function () {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(function (toolbar) {\n position(button, toolbar, detail, spec.layouts);\n });\n }\n }))\n })\n ])\n };\n };\n var factory$a = function (detail, components, spec, externals) {\n return __assign(__assign({}, Button.sketch(__assign(__assign({}, externals.button()), {\n action: function (button) {\n toggle(button, externals);\n },\n buttonBehaviours: SketchBehaviours.augment({ dump: externals.button().buttonBehaviours }, [Coupling.config({\n others: {\n toolbarSandbox: function (button) {\n return makeSandbox(button, spec, detail);\n }\n }\n })])\n }))), {\n apis: {\n setGroups: function (button, groups) {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(function (toolbar) {\n setGroups(button, toolbar, detail, spec.layouts, groups);\n });\n },\n reposition: function (button) {\n Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each(function (toolbar) {\n position(button, toolbar, detail, spec.layouts);\n });\n },\n toggle: function (button) {\n toggle(button, externals);\n },\n getToolbar: function (button) {\n return Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox'));\n },\n isOpen: function (button) {\n return Sandboxing.isOpen(Coupling.getCoupled(button, 'toolbarSandbox'));\n }\n }\n });\n };\n var FloatingToolbarButton = composite({\n name: 'FloatingToolbarButton',\n factory: factory$a,\n configFields: schema$a(),\n partFields: parts$6(),\n apis: {\n setGroups: function (apis, button, groups) {\n apis.setGroups(button, groups);\n },\n reposition: function (apis, button) {\n apis.reposition(button);\n },\n toggle: function (apis, button) {\n apis.toggle(button);\n },\n getToolbar: function (apis, button) {\n return apis.getToolbar(button);\n },\n isOpen: function (apis, button) {\n return apis.isOpen(button);\n }\n }\n });\n\n var schema$9 = constant$1([\n required$1('items'),\n markers$1(['itemSelector']),\n field('tgroupBehaviours', [Keying])\n ]);\n var parts$5 = constant$1([group({\n name: 'items',\n unit: 'item'\n })]);\n\n var factory$9 = function (detail, components, _spec, _externals) {\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: augment(detail.tgroupBehaviours, [Keying.config({\n mode: 'flow',\n selector: detail.markers.itemSelector\n })]),\n domModification: { attributes: { role: 'toolbar' } }\n };\n };\n var ToolbarGroup = composite({\n name: 'ToolbarGroup',\n configFields: schema$9(),\n partFields: parts$5(),\n factory: factory$9\n });\n\n var buildGroups = function (comps) {\n return map$2(comps, function (g) {\n return premade(g);\n });\n };\n var refresh$1 = function (toolbar, memFloatingToolbarButton, detail) {\n refresh$2(toolbar, detail, function (overflowGroups) {\n detail.overflowGroups.set(overflowGroups);\n memFloatingToolbarButton.getOpt(toolbar).each(function (floatingToolbarButton) {\n FloatingToolbarButton.setGroups(floatingToolbarButton, buildGroups(overflowGroups));\n });\n });\n };\n var factory$8 = function (detail, components, spec, externals) {\n var memFloatingToolbarButton = record(FloatingToolbarButton.sketch({\n fetch: function () {\n return Future.nu(function (resolve) {\n resolve(buildGroups(detail.overflowGroups.get()));\n });\n },\n layouts: {\n onLtr: function () {\n return [\n southwest$2,\n southeast$2\n ];\n },\n onRtl: function () {\n return [\n southeast$2,\n southwest$2\n ];\n },\n onBottomLtr: function () {\n return [\n northwest$2,\n northeast$2\n ];\n },\n onBottomRtl: function () {\n return [\n northeast$2,\n northwest$2\n ];\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 }));\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: augment(detail.splitToolbarBehaviours, [Coupling.config({\n others: {\n overflowGroup: function () {\n return ToolbarGroup.sketch(__assign(__assign({}, externals['overflow-group']()), { items: [memFloatingToolbarButton.asSpec()] }));\n }\n }\n })]),\n apis: {\n setGroups: function (toolbar, groups) {\n detail.builtGroups.set(map$2(groups, toolbar.getSystem().build));\n refresh$1(toolbar, memFloatingToolbarButton, detail);\n },\n refresh: function (toolbar) {\n return refresh$1(toolbar, memFloatingToolbarButton, detail);\n },\n toggle: function (toolbar) {\n memFloatingToolbarButton.getOpt(toolbar).each(function (floatingToolbarButton) {\n FloatingToolbarButton.toggle(floatingToolbarButton);\n });\n },\n isOpen: function (toolbar) {\n return memFloatingToolbarButton.getOpt(toolbar).map(FloatingToolbarButton.isOpen).getOr(false);\n },\n reposition: function (toolbar) {\n memFloatingToolbarButton.getOpt(toolbar).each(function (floatingToolbarButton) {\n FloatingToolbarButton.reposition(floatingToolbarButton);\n });\n },\n getOverflow: function (toolbar) {\n return memFloatingToolbarButton.getOpt(toolbar).bind(FloatingToolbarButton.getToolbar);\n }\n },\n domModification: { attributes: { role: 'group' } }\n };\n };\n var SplitFloatingToolbar = composite({\n name: 'SplitFloatingToolbar',\n configFields: schema$b(),\n partFields: parts$7(),\n factory: factory$8,\n apis: {\n setGroups: function (apis, toolbar, groups) {\n apis.setGroups(toolbar, groups);\n },\n refresh: function (apis, toolbar) {\n apis.refresh(toolbar);\n },\n reposition: function (apis, toolbar) {\n apis.reposition(toolbar);\n },\n toggle: function (apis, toolbar) {\n apis.toggle(toolbar);\n },\n isOpen: function (apis, toolbar) {\n return apis.isOpen(toolbar);\n },\n getOverflow: function (apis, toolbar) {\n return apis.getOverflow(toolbar);\n }\n }\n });\n\n var 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 var 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: function (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: function (comp) {\n getPart(comp, detail, 'overflow-button').each(function (button) {\n Toggling.off(button);\n Focusing.focus(button);\n });\n detail.onClosed(comp);\n },\n onGrown: function (comp) {\n Keying.focusIn(comp);\n detail.onOpened(comp);\n },\n onStartGrow: function (comp) {\n getPart(comp, detail, 'overflow-button').each(Toggling.on);\n }\n }),\n Keying.config({\n mode: 'acyclic',\n onEscape: function (comp) {\n getPart(comp, detail, 'overflow-button').each(Focusing.focus);\n return Optional.some(true);\n }\n })\n ])\n };\n }\n }),\n external$1({\n name: 'overflow-button',\n overrides: function (detail) {\n return {\n buttonBehaviours: derive$1([Toggling.config({\n toggleClass: detail.markers.overflowToggledClass,\n aria: { mode: 'pressed' },\n toggleOnExecute: false\n })])\n };\n }\n }),\n external$1({ name: 'overflow-group' })\n ]);\n\n var isOpen = function (toolbar, detail) {\n return getPart(toolbar, detail, 'overflow').map(Sliding.hasGrown).getOr(false);\n };\n var toggleToolbar = function (toolbar, detail) {\n getPart(toolbar, detail, 'overflow-button').bind(function () {\n return getPart(toolbar, detail, 'overflow');\n }).each(function (overf) {\n refresh(toolbar, detail);\n Sliding.toggleGrow(overf);\n });\n };\n var refresh = function (toolbar, detail) {\n getPart(toolbar, detail, 'overflow').each(function (overflow) {\n refresh$2(toolbar, detail, function (groups) {\n var builtGroups = map$2(groups, function (g) {\n return premade(g);\n });\n Toolbar.setGroups(overflow, builtGroups);\n });\n getPart(toolbar, detail, 'overflow-button').each(function (button) {\n if (Sliding.hasGrown(overflow)) {\n Toggling.on(button);\n }\n });\n Sliding.refresh(overflow);\n });\n };\n var factory$7 = function (detail, components, spec, externals) {\n var toolbarToggleEvent = 'alloy.toolbar.toggle';\n var doSetGroups = function (toolbar, groups) {\n var 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: components,\n behaviours: augment(detail.splitToolbarBehaviours, [\n Coupling.config({\n others: {\n overflowGroup: function (toolbar) {\n return ToolbarGroup.sketch(__assign(__assign({}, externals['overflow-group']()), {\n items: [Button.sketch(__assign(__assign({}, externals['overflow-button']()), {\n action: function (_button) {\n emit(toolbar, toolbarToggleEvent);\n }\n }))]\n }));\n }\n }\n }),\n config('toolbar-toggle-events', [run$1(toolbarToggleEvent, function (toolbar) {\n toggleToolbar(toolbar, detail);\n })])\n ]),\n apis: {\n setGroups: function (toolbar, groups) {\n doSetGroups(toolbar, groups);\n refresh(toolbar, detail);\n },\n refresh: function (toolbar) {\n return refresh(toolbar, detail);\n },\n toggle: function (toolbar) {\n return toggleToolbar(toolbar, detail);\n },\n isOpen: function (toolbar) {\n return isOpen(toolbar, detail);\n }\n },\n domModification: { attributes: { role: 'group' } }\n };\n };\n var SplitSlidingToolbar = composite({\n name: 'SplitSlidingToolbar',\n configFields: schema$8(),\n partFields: parts$4(),\n factory: factory$7,\n apis: {\n setGroups: function (apis, toolbar, groups) {\n apis.setGroups(toolbar, groups);\n },\n refresh: function (apis, toolbar) {\n apis.refresh(toolbar);\n },\n toggle: function (apis, toolbar) {\n apis.toggle(toolbar);\n },\n isOpen: function (apis, toolbar) {\n return apis.isOpen(toolbar);\n }\n }\n });\n\n var renderToolbarGroupCommon = function (toolbarGroup) {\n var attributes = toolbarGroup.title.fold(function () {\n return {};\n }, function (title) {\n return { attributes: { title: title } };\n });\n return {\n dom: __assign({\n tag: 'div',\n classes: ['tox-toolbar__group']\n }, attributes),\n components: [ToolbarGroup.parts.items({})],\n items: toolbarGroup.items,\n markers: { itemSelector: '*:not(.tox-split-button) > .tox-tbtn:not([disabled]), ' + '.tox-split-button:not([disabled]), ' + '.tox-toolbar-nav-js:not([disabled])' },\n tgroupBehaviours: derive$1([\n Tabstopping.config({}),\n Focusing.config({})\n ])\n };\n };\n var renderToolbarGroup = function (toolbarGroup) {\n return ToolbarGroup.sketch(renderToolbarGroupCommon(toolbarGroup));\n };\n var getToolbarbehaviours = function (toolbarSpec, modeName) {\n var onAttached = runOnAttached(function (component) {\n var groups = map$2(toolbarSpec.initGroups, renderToolbarGroup);\n Toolbar.setGroups(component, groups);\n });\n return derive$1([\n DisablingConfigs.toolbarButton(toolbarSpec.providers.isDisabled),\n receivingConfig(),\n Keying.config({\n mode: modeName,\n onEscape: toolbarSpec.onEscape,\n selector: '.tox-toolbar__group'\n }),\n config('toolbar-events', [onAttached])\n ]);\n };\n var renderMoreToolbarCommon = function (toolbarSpec) {\n var 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 items: []\n }),\n 'overflow-button': renderIconButtonSpec({\n name: 'more',\n icon: Optional.some('more-drawer'),\n disabled: false,\n tooltip: Optional.some('More...'),\n primary: false,\n borderless: false\n }, Optional.none(), toolbarSpec.providers)\n },\n splitToolbarBehaviours: getToolbarbehaviours(toolbarSpec, modeName)\n };\n };\n var renderFloatingMoreToolbar = function (toolbarSpec) {\n var baseSpec = renderMoreToolbarCommon(toolbarSpec);\n var overflowXOffset = 4;\n var primary = SplitFloatingToolbar.parts.primary({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__primary']\n }\n });\n return SplitFloatingToolbar.sketch(__assign(__assign({}, baseSpec), {\n lazySink: toolbarSpec.getSink,\n getOverflowBounds: function () {\n var headerElem = toolbarSpec.moreDrawerData.lazyHeader().element;\n var headerBounds = absolute$2(headerElem);\n var docElem = documentElement(headerElem);\n var docBounds = absolute$2(docElem);\n var height = Math.max(docElem.dom.scrollHeight, docBounds.height);\n return bounds(headerBounds.x + overflowXOffset, docBounds.y, headerBounds.width - overflowXOffset * 2, height);\n },\n parts: __assign(__assign({}, 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 }));\n };\n var renderSlidingMoreToolbar = function (toolbarSpec) {\n var primary = SplitSlidingToolbar.parts.primary({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__primary']\n }\n });\n var overflow = SplitSlidingToolbar.parts.overflow({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__overflow']\n }\n });\n var baseSpec = renderMoreToolbarCommon(toolbarSpec);\n return SplitSlidingToolbar.sketch(__assign(__assign({}, 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: function (comp) {\n comp.getSystem().broadcastOn([toolbarHeightChange()], { type: 'opened' });\n },\n onClosed: function (comp) {\n comp.getSystem().broadcastOn([toolbarHeightChange()], { type: 'closed' });\n }\n }));\n };\n var renderToolbar = function (toolbarSpec) {\n var 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.scrolling ? ['tox-toolbar--scrolling'] : [])\n },\n components: [Toolbar.parts.groups({})],\n toolbarBehaviours: getToolbarbehaviours(toolbarSpec, modeName)\n });\n };\n\n var factory$6 = function (detail, components, _spec) {\n var apis = {\n getSocket: function (comp) {\n return parts$a.getPart(comp, detail, 'socket');\n },\n setSidebar: function (comp, panelConfigs) {\n parts$a.getPart(comp, detail, 'sidebar').each(function (sidebar) {\n return setSidebar(sidebar, panelConfigs);\n });\n },\n toggleSidebar: function (comp, name) {\n parts$a.getPart(comp, detail, 'sidebar').each(function (sidebar) {\n return toggleSidebar(sidebar, name);\n });\n },\n whichSidebar: function (comp) {\n return parts$a.getPart(comp, detail, 'sidebar').bind(whichSidebar).getOrNull();\n },\n getHeader: function (comp) {\n return parts$a.getPart(comp, detail, 'header');\n },\n getToolbar: function (comp) {\n return parts$a.getPart(comp, detail, 'toolbar');\n },\n setToolbar: function (comp, groups) {\n parts$a.getPart(comp, detail, 'toolbar').each(function (toolbar) {\n toolbar.getApis().setGroups(toolbar, groups);\n });\n },\n setToolbars: function (comp, toolbars) {\n parts$a.getPart(comp, detail, 'multiple-toolbar').each(function (mToolbar) {\n CustomList.setItems(mToolbar, toolbars);\n });\n },\n refreshToolbar: function (comp) {\n var toolbar = parts$a.getPart(comp, detail, 'toolbar');\n toolbar.each(function (toolbar) {\n return toolbar.getApis().refresh(toolbar);\n });\n },\n toggleToolbarDrawer: function (comp) {\n parts$a.getPart(comp, detail, 'toolbar').each(function (toolbar) {\n mapFrom(toolbar.getApis().toggle, function (toggle) {\n return toggle(toolbar);\n });\n });\n },\n isToolbarDrawerToggled: function (comp) {\n return parts$a.getPart(comp, detail, 'toolbar').bind(function (toolbar) {\n return Optional.from(toolbar.getApis().isOpen).map(function (isOpen) {\n return isOpen(toolbar);\n });\n }).getOr(false);\n },\n getThrobber: function (comp) {\n return parts$a.getPart(comp, detail, 'throbber');\n },\n focusToolbar: function (comp) {\n var optToolbar = parts$a.getPart(comp, detail, 'toolbar').orThunk(function () {\n return parts$a.getPart(comp, detail, 'multiple-toolbar');\n });\n optToolbar.each(function (toolbar) {\n Keying.focusIn(toolbar);\n });\n },\n setMenubar: function (comp, menus) {\n parts$a.getPart(comp, detail, 'menubar').each(function (menubar) {\n SilverMenubar.setMenus(menubar, menus);\n });\n },\n focusMenubar: function (comp) {\n parts$a.getPart(comp, detail, 'menubar').each(function (menubar) {\n SilverMenubar.focus(menubar);\n });\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n apis: apis,\n behaviours: detail.behaviours\n };\n };\n var partMenubar = partType.optional({\n factory: SilverMenubar,\n name: 'menubar',\n schema: [required$1('backstage')]\n });\n var toolbarFactory = function (spec) {\n if (spec.type === ToolbarMode.sliding) {\n return renderSlidingMoreToolbar;\n } else if (spec.type === ToolbarMode.floating) {\n return renderFloatingMoreToolbar;\n } else {\n return renderToolbar;\n }\n };\n var partMultipleToolbar = partType.optional({\n factory: {\n sketch: function (spec) {\n return 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: function () {\n return renderToolbar({\n type: spec.type,\n uid: generate$6('multiple-toolbar-item'),\n cyclicKeying: false,\n initGroups: [],\n providers: spec.providers,\n onEscape: function () {\n spec.onEscape();\n return Optional.some(true);\n }\n });\n },\n setupItem: function (_mToolbar, tc, data, _index) {\n Toolbar.setGroups(tc, data);\n },\n shell: true\n });\n }\n },\n name: 'multiple-toolbar',\n schema: [\n required$1('dom'),\n required$1('onEscape')\n ]\n });\n var partToolbar = partType.optional({\n factory: {\n sketch: function (spec) {\n var renderer = toolbarFactory(spec);\n var toolbarSpec = {\n type: spec.type,\n uid: spec.uid,\n onEscape: function () {\n spec.onEscape();\n return Optional.some(true);\n },\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 var partHeader = partType.optional({\n factory: { sketch: renderHeader },\n name: 'header',\n schema: [required$1('dom')]\n });\n var partSocket = partType.optional({\n name: 'socket',\n schema: [required$1('dom')]\n });\n var partSidebar = partType.optional({\n factory: { sketch: renderSidebar },\n name: 'sidebar',\n schema: [required$1('dom')]\n });\n var partThrobber = partType.optional({\n factory: { sketch: renderThrobber },\n name: 'throbber',\n schema: [required$1('dom')]\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 partThrobber\n ],\n apis: {\n getSocket: function (apis, comp) {\n return apis.getSocket(comp);\n },\n setSidebar: function (apis, comp, panelConfigs) {\n apis.setSidebar(comp, panelConfigs);\n },\n toggleSidebar: function (apis, comp, name) {\n apis.toggleSidebar(comp, name);\n },\n whichSidebar: function (apis, comp) {\n return apis.whichSidebar(comp);\n },\n getHeader: function (apis, comp) {\n return apis.getHeader(comp);\n },\n getToolbar: function (apis, comp) {\n return apis.getToolbar(comp);\n },\n setToolbar: function (apis, comp, grps) {\n var groups = map$2(grps, function (grp) {\n return renderToolbarGroup(grp);\n });\n apis.setToolbar(comp, groups);\n },\n setToolbars: function (apis, comp, ts) {\n var renderedToolbars = map$2(ts, function (g) {\n return map$2(g, renderToolbarGroup);\n });\n apis.setToolbars(comp, renderedToolbars);\n },\n refreshToolbar: function (apis, comp) {\n return apis.refreshToolbar(comp);\n },\n toggleToolbarDrawer: function (apis, comp) {\n apis.toggleToolbarDrawer(comp);\n },\n isToolbarDrawerToggled: function (apis, comp) {\n return apis.isToolbarDrawerToggled(comp);\n },\n getThrobber: function (apis, comp) {\n return apis.getThrobber(comp);\n },\n setMenubar: function (apis, comp, menus) {\n apis.setMenubar(comp, menus);\n },\n focusMenubar: function (apis, comp) {\n apis.focusMenubar(comp);\n },\n focusToolbar: function (apis, comp) {\n apis.focusToolbar(comp);\n }\n }\n });\n\n var defaultMenubar = 'file edit view insert format tools table help';\n var defaultMenus = {\n file: {\n title: 'File',\n items: 'newdocument restoredraft | preview | 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 | visualaid visualchars visualblocks | spellchecker | preview fullscreen | showcomments'\n },\n insert: {\n title: 'Insert',\n items: 'image link media addcomment pageembed template codesample inserttable | charmap emoticons hr | pagebreak nonbreaking anchor toc | insertdatetime'\n },\n format: {\n title: 'Format',\n items: 'bold italic underline strikethrough superscript subscript codeformat | formats blockformats fontformats fontsizes align lineheight | forecolor backcolor | language | removeformat'\n },\n tools: {\n title: 'Tools',\n items: 'spellchecker spellcheckerlanguage | a11ycheck code wordcount'\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 var make = function (menu, registry, editor) {\n var removedMenuItems = getRemovedMenuItems(editor).split(/[ ,]/);\n return {\n text: menu.title,\n getItems: function () {\n return bind$3(menu.items, function (i) {\n var itemName = i.toLowerCase();\n if (itemName.trim().length === 0) {\n return [];\n } else if (exists(removedMenuItems, function (removedMenuItem) {\n return removedMenuItem === itemName;\n })) {\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 };\n var parseItemsString = function (items) {\n if (typeof items === 'string') {\n return items.split(' ');\n }\n return items;\n };\n var identifyMenus = function (editor, registry) {\n var rawMenuData = __assign(__assign({}, defaultMenus), registry.menus);\n var userDefinedMenus = keys(registry.menus).length > 0;\n var menubar = registry.menubar === undefined || registry.menubar === true ? parseItemsString(defaultMenubar) : parseItemsString(registry.menubar === false ? '' : registry.menubar);\n var validMenus = filter$2(menubar, function (menuName) {\n var isDefaultMenu = has$2(defaultMenus, menuName);\n if (userDefinedMenus) {\n return isDefaultMenu || get$e(registry.menus, menuName).exists(function (menu) {\n return has$2(menu, 'items');\n });\n } else {\n return isDefaultMenu;\n }\n });\n var menus = map$2(validMenus, function (menuName) {\n var menuData = rawMenuData[menuName];\n return make({\n title: menuData.title,\n items: parseItemsString(menuData.items)\n }, registry, editor);\n });\n return filter$2(menus, function (menu) {\n var isNotSeparator = function (item) {\n return item.type !== 'separator';\n };\n return menu.getItems().length > 0 && exists(menu.getItems(), isNotSeparator);\n });\n };\n\n var fireSkinLoaded = function (editor) {\n var done = function () {\n editor._skinLoaded = true;\n fireSkinLoaded$1(editor);\n };\n return function () {\n if (editor.initialized) {\n done();\n } else {\n editor.on('init', done);\n }\n };\n };\n var fireSkinLoadError = function (editor, err) {\n return function () {\n return fireSkinLoadError$1(editor, { message: err });\n };\n };\n\n var loadStylesheet = function (editor, stylesheetUrl, styleSheetLoader) {\n return new global$c(function (resolve, reject) {\n styleSheetLoader.load(stylesheetUrl, resolve, reject);\n editor.on('remove', function () {\n return styleSheetLoader.unload(stylesheetUrl);\n });\n });\n };\n var loadUiSkins = function (editor, skinUrl) {\n var skinUiCss = skinUrl + '/skin.min.css';\n return loadStylesheet(editor, skinUiCss, editor.ui.styleSheetLoader);\n };\n var loadShadowDomUiSkins = function (editor, skinUrl) {\n var isInShadowRoot$1 = isInShadowRoot(SugarElement.fromDom(editor.getElement()));\n if (isInShadowRoot$1) {\n var shadowDomSkinCss = skinUrl + '/skin.shadowdom.min.css';\n return loadStylesheet(editor, shadowDomSkinCss, global$b.DOM.styleSheetLoader);\n } else {\n return global$c.resolve();\n }\n };\n var loadSkin = function (isInline, editor) {\n var skinUrl = getSkinUrl(editor);\n if (skinUrl) {\n editor.contentCSS.push(skinUrl + (isInline ? '/content.inline' : '/content') + '.min.css');\n }\n if (isSkinDisabled(editor) === false && isString(skinUrl)) {\n global$c.all([\n loadUiSkins(editor, skinUrl),\n loadShadowDomUiSkins(editor, skinUrl)\n ]).then(fireSkinLoaded(editor), fireSkinLoadError(editor, 'Skin could not be loaded'));\n } else {\n fireSkinLoaded(editor)();\n }\n };\n var iframe = curry(loadSkin, false);\n var inline = curry(loadSkin, true);\n\n var onSetupFormatToggle = function (editor, name) {\n return function (api) {\n var boundCallback = unbindable();\n var init = function () {\n api.setActive(editor.formatter.match(name));\n var binding = editor.formatter.formatChanged(name, api.setActive);\n boundCallback.set(binding);\n };\n editor.initialized ? init() : editor.once('init', init);\n return function () {\n editor.off('init', init);\n boundCallback.clear();\n };\n };\n };\n var onSetupEvent = function (editor, event, f) {\n return function (api) {\n var handleEvent = function () {\n return f(api);\n };\n var init = function () {\n f(api);\n editor.on(event, handleEvent);\n };\n editor.initialized ? init() : editor.once('init', init);\n return function () {\n editor.off('init', init);\n editor.off(event, handleEvent);\n };\n };\n };\n var onActionToggleFormat$1 = function (editor) {\n return function (rawItem) {\n return function () {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.execCommand('mceToggleFormat', false, rawItem.format);\n });\n };\n };\n };\n var onActionExecCommand = function (editor, command) {\n return function () {\n return editor.execCommand(command);\n };\n };\n\n var generateSelectItems = function (_editor, backstage, spec) {\n var generateItem = function (rawItem, response, disabled, value) {\n var 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 var items = bind$3(rawItem.getStyleItems(), function (si) {\n return validate(si, response, value);\n });\n if (response === 0 && items.length <= 0) {\n return Optional.none();\n } else {\n return Optional.some({\n type: 'nestedmenuitem',\n text: translatedText,\n disabled: items.length <= 0,\n getSubmenuItems: function () {\n return bind$3(rawItem.getStyleItems(), function (si) {\n return validate(si, response, value);\n });\n }\n });\n }\n } else {\n return Optional.some(__assign({\n type: 'togglemenuitem',\n text: translatedText,\n icon: rawItem.icon,\n active: rawItem.isSelected(value),\n disabled: disabled,\n onAction: spec.onAction(rawItem)\n }, rawItem.getStylePreview().fold(function () {\n return {};\n }, function (preview) {\n return { meta: { style: preview } };\n })));\n }\n };\n var validate = function (item, response, value) {\n var 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 var validateItems = function (preItems) {\n var value = spec.getCurrentValue();\n var response = spec.shouldHide ? 0 : 1;\n return bind$3(preItems, function (item) {\n return validate(item, response, value);\n });\n };\n var getFetch = function (backstage, getStyleItems) {\n return function (comp, callback) {\n var preItems = getStyleItems();\n var items = validateItems(preItems);\n var menu = build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, false);\n callback(menu);\n };\n };\n return {\n validateItems: validateItems,\n getFetch: getFetch\n };\n };\n var createMenuItems = function (editor, backstage, spec) {\n var dataset = spec.dataset;\n var getStyleItems = dataset.type === 'basic' ? function () {\n return map$2(dataset.data, function (d) {\n return processBasic(d, spec.isSelectedFor, spec.getPreviewFor);\n });\n } : dataset.getData;\n return {\n items: generateSelectItems(editor, backstage, spec),\n getStyleItems: getStyleItems\n };\n };\n var createSelectButton = function (editor, backstage, spec) {\n var _a = createMenuItems(editor, backstage, spec), items = _a.items, getStyleItems = _a.getStyleItems;\n var getApi = function (comp) {\n return { getComponent: constant$1(comp) };\n };\n var onSetup = onSetupEvent(editor, 'NodeChange', function (api) {\n var comp = api.getComponent();\n spec.updateText(comp);\n });\n return renderCommonDropdown({\n text: spec.icon.isSome() ? Optional.none() : spec.text,\n icon: spec.icon,\n tooltip: Optional.from(spec.tooltip),\n role: Optional.none(),\n fetch: items.getFetch(backstage, getStyleItems),\n onSetup: onSetup,\n getApi: getApi,\n columns: 1,\n presets: 'normal',\n classes: spec.icon.isSome() ? [] : ['bespoke'],\n dropdownBehaviours: []\n }, 'tox-tbtn', backstage.shared);\n };\n\n var process = function (rawFormats) {\n return map$2(rawFormats, function (item) {\n var title = item, format = item;\n var values = item.split('=');\n if (values.length > 1) {\n title = values[0];\n format = values[1];\n }\n return {\n title: title,\n format: format\n };\n });\n };\n var buildBasicStaticDataset = function (data) {\n return {\n type: 'basic',\n data: data\n };\n };\n var Delimiter;\n (function (Delimiter) {\n Delimiter[Delimiter['SemiColon'] = 0] = 'SemiColon';\n Delimiter[Delimiter['Space'] = 1] = 'Space';\n }(Delimiter || (Delimiter = {})));\n var split = function (rawFormats, delimiter) {\n if (delimiter === Delimiter.SemiColon) {\n return rawFormats.replace(/;$/, '').split(';');\n } else {\n return rawFormats.split(' ');\n }\n };\n var buildBasicSettingsDataset = function (editor, settingName, defaults, delimiter) {\n var rawFormats = editor.getParam(settingName, defaults, 'string');\n var data = process(split(rawFormats, delimiter));\n return {\n type: 'basic',\n data: data\n };\n };\n\n var 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 var getSpec$4 = function (editor) {\n var getMatchingValue = function () {\n return find$5(alignMenuItems, function (item) {\n return editor.formatter.match(item.format);\n });\n };\n var isSelectedFor = function (format) {\n return function () {\n return editor.formatter.match(format);\n };\n };\n var getPreviewFor = function (_format) {\n return Optional.none;\n };\n var updateSelectMenuIcon = function (comp) {\n var match = getMatchingValue();\n var alignment = match.fold(constant$1('left'), function (item) {\n return item.title.toLowerCase();\n });\n emitWith(comp, updateMenuIcon, { icon: 'align-' + alignment });\n };\n var dataset = buildBasicStaticDataset(alignMenuItems);\n var onAction = function (rawItem) {\n return function () {\n return find$5(alignMenuItems, function (item) {\n return item.format === rawItem.format;\n }).each(function (item) {\n return editor.execCommand(item.command);\n });\n };\n };\n return {\n tooltip: 'Align',\n text: Optional.none(),\n icon: Optional.some('align-left'),\n isSelectedFor: isSelectedFor,\n getCurrentValue: Optional.none,\n getPreviewFor: getPreviewFor,\n onAction: onAction,\n updateText: updateSelectMenuIcon,\n dataset: dataset,\n shouldHide: false,\n isInvalid: function (item) {\n return !editor.formatter.canApply(item.format);\n }\n };\n };\n var createAlignSelect = function (editor, backstage) {\n return createSelectButton(editor, backstage, getSpec$4(editor));\n };\n var alignSelectMenu = function (editor, backstage) {\n var menuItems = createMenuItems(editor, backstage, getSpec$4(editor));\n editor.ui.registry.addNestedMenuItem('align', {\n text: backstage.shared.providers.translate('Align'),\n getSubmenuItems: function () {\n return menuItems.items.validateItems(menuItems.getStyleItems());\n }\n });\n };\n\n var defaultFontsFormats = '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 var systemStackFonts = [\n '-apple-system',\n 'Segoe UI',\n 'Roboto',\n 'Helvetica Neue',\n 'sans-serif'\n ];\n var splitFonts = function (fontFamily) {\n var fonts = fontFamily.split(/\\s*,\\s*/);\n return map$2(fonts, function (font) {\n return font.replace(/^['\"]+|['\"]+$/g, '');\n });\n };\n var isSystemFontStack = function (fontFamily) {\n var matchesSystemStack = function () {\n var fonts = splitFonts(fontFamily.toLowerCase());\n return forall(systemStackFonts, function (font) {\n return fonts.indexOf(font.toLowerCase()) > -1;\n });\n };\n return fontFamily.indexOf('-apple-system') === 0 && matchesSystemStack();\n };\n var getSpec$3 = function (editor) {\n var systemFont = 'System Font';\n var getMatchingValue = function () {\n var getFirstFont = function (fontFamily) {\n return fontFamily ? splitFonts(fontFamily)[0] : '';\n };\n var fontFamily = editor.queryCommandValue('FontName');\n var items = dataset.data;\n var font = fontFamily ? fontFamily.toLowerCase() : '';\n var matchOpt = find$5(items, function (item) {\n var format = item.format;\n return format.toLowerCase() === font || getFirstFont(format).toLowerCase() === getFirstFont(font).toLowerCase();\n }).orThunk(function () {\n return someIf(isSystemFontStack(font), {\n title: systemFont,\n format: font\n });\n });\n return {\n matchOpt: matchOpt,\n font: fontFamily\n };\n };\n var isSelectedFor = function (item) {\n return function (valueOpt) {\n return valueOpt.exists(function (value) {\n return value.format === item;\n });\n };\n };\n var getCurrentValue = function () {\n var matchOpt = getMatchingValue().matchOpt;\n return matchOpt;\n };\n var getPreviewFor = function (item) {\n return function () {\n return Optional.some({\n tag: 'div',\n styles: item.indexOf('dings') === -1 ? { 'font-family': item } : {}\n });\n };\n };\n var onAction = function (rawItem) {\n return function () {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.execCommand('FontName', false, rawItem.format);\n });\n };\n };\n var updateSelectMenuText = function (comp) {\n var _a = getMatchingValue(), matchOpt = _a.matchOpt, font = _a.font;\n var text = matchOpt.fold(constant$1(font), function (item) {\n return item.title;\n });\n emitWith(comp, updateMenuText, { text: text });\n };\n var dataset = buildBasicSettingsDataset(editor, 'font_formats', defaultFontsFormats, Delimiter.SemiColon);\n return {\n tooltip: 'Fonts',\n text: Optional.some(systemFont),\n icon: Optional.none(),\n isSelectedFor: isSelectedFor,\n getCurrentValue: getCurrentValue,\n getPreviewFor: getPreviewFor,\n onAction: onAction,\n updateText: updateSelectMenuText,\n dataset: dataset,\n shouldHide: false,\n isInvalid: never\n };\n };\n var createFontSelect = function (editor, backstage) {\n return createSelectButton(editor, backstage, getSpec$3(editor));\n };\n var fontSelectMenu = function (editor, backstage) {\n var menuItems = createMenuItems(editor, backstage, getSpec$3(editor));\n editor.ui.registry.addNestedMenuItem('fontformats', {\n text: backstage.shared.providers.translate('Fonts'),\n getSubmenuItems: function () {\n return menuItems.items.validateItems(menuItems.getStyleItems());\n }\n });\n };\n\n var defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt';\n var legacyFontSizes = {\n '8pt': '1',\n '10pt': '2',\n '12pt': '3',\n '14pt': '4',\n '18pt': '5',\n '24pt': '6',\n '36pt': '7'\n };\n var 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 var round = function (number, precision) {\n var factor = Math.pow(10, precision);\n return Math.round(number * factor) / factor;\n };\n var toPt = function (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$e(keywordFontSizes, fontSize).getOr(fontSize);\n }\n };\n var toLegacy = function (fontSize) {\n return get$e(legacyFontSizes, fontSize).getOr('');\n };\n var getSpec$2 = function (editor) {\n var getMatchingValue = function () {\n var matchOpt = Optional.none();\n var items = dataset.data;\n var fontSize = editor.queryCommandValue('FontSize');\n if (fontSize) {\n var _loop_1 = function (precision) {\n var pt = toPt(fontSize, precision);\n var legacy = toLegacy(pt);\n matchOpt = find$5(items, function (item) {\n return item.format === fontSize || item.format === pt || item.format === legacy;\n });\n };\n for (var precision = 3; matchOpt.isNone() && precision >= 0; precision--) {\n _loop_1(precision);\n }\n }\n return {\n matchOpt: matchOpt,\n size: fontSize\n };\n };\n var isSelectedFor = function (item) {\n return function (valueOpt) {\n return valueOpt.exists(function (value) {\n return value.format === item;\n });\n };\n };\n var getCurrentValue = function () {\n var matchOpt = getMatchingValue().matchOpt;\n return matchOpt;\n };\n var getPreviewFor = constant$1(Optional.none);\n var onAction = function (rawItem) {\n return function () {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.execCommand('FontSize', false, rawItem.format);\n });\n };\n };\n var updateSelectMenuText = function (comp) {\n var _a = getMatchingValue(), matchOpt = _a.matchOpt, size = _a.size;\n var text = matchOpt.fold(constant$1(size), function (match) {\n return match.title;\n });\n emitWith(comp, updateMenuText, { text: text });\n };\n var dataset = buildBasicSettingsDataset(editor, 'fontsize_formats', defaultFontsizeFormats, Delimiter.Space);\n return {\n tooltip: 'Font sizes',\n text: Optional.some('12pt'),\n icon: Optional.none(),\n isSelectedFor: isSelectedFor,\n getPreviewFor: getPreviewFor,\n getCurrentValue: getCurrentValue,\n onAction: onAction,\n updateText: updateSelectMenuText,\n dataset: dataset,\n shouldHide: false,\n isInvalid: never\n };\n };\n var createFontsizeSelect = function (editor, backstage) {\n return createSelectButton(editor, backstage, getSpec$2(editor));\n };\n var fontsizeSelectMenu = function (editor, backstage) {\n var menuItems = createMenuItems(editor, backstage, getSpec$2(editor));\n editor.ui.registry.addNestedMenuItem('fontsizes', {\n text: 'Font sizes',\n getSubmenuItems: function () {\n return menuItems.items.validateItems(menuItems.getStyleItems());\n }\n });\n };\n\n var findNearest = function (editor, getStyles) {\n var styles = getStyles();\n var formats = map$2(styles, function (style) {\n return style.format;\n });\n return Optional.from(editor.formatter.closest(formats)).bind(function (fmt) {\n return find$5(styles, function (data) {\n return data.format === fmt;\n });\n }).orThunk(function () {\n return someIf(editor.formatter.match('p'), {\n title: 'Paragraph',\n format: 'p'\n });\n });\n };\n\n var defaultBlocks = 'Paragraph=p;' + 'Heading 1=h1;' + 'Heading 2=h2;' + 'Heading 3=h3;' + 'Heading 4=h4;' + 'Heading 5=h5;' + 'Heading 6=h6;' + 'Preformatted=pre';\n var getSpec$1 = function (editor) {\n var fallbackFormat = 'Paragraph';\n var isSelectedFor = function (format) {\n return function () {\n return editor.formatter.match(format);\n };\n };\n var getPreviewFor = function (format) {\n return function () {\n var fmt = editor.formatter.get(format);\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 };\n };\n var updateSelectMenuText = function (comp) {\n var detectedFormat = findNearest(editor, function () {\n return dataset.data;\n });\n var text = detectedFormat.fold(constant$1(fallbackFormat), function (fmt) {\n return fmt.title;\n });\n emitWith(comp, updateMenuText, { text: text });\n };\n var dataset = buildBasicSettingsDataset(editor, 'block_formats', defaultBlocks, Delimiter.SemiColon);\n return {\n tooltip: 'Blocks',\n text: Optional.some(fallbackFormat),\n icon: Optional.none(),\n isSelectedFor: isSelectedFor,\n getCurrentValue: Optional.none,\n getPreviewFor: getPreviewFor,\n onAction: onActionToggleFormat$1(editor),\n updateText: updateSelectMenuText,\n dataset: dataset,\n shouldHide: false,\n isInvalid: function (item) {\n return !editor.formatter.canApply(item.format);\n }\n };\n };\n var createFormatSelect = function (editor, backstage) {\n return createSelectButton(editor, backstage, getSpec$1(editor));\n };\n var formatSelectMenu = function (editor, backstage) {\n var menuItems = createMenuItems(editor, backstage, getSpec$1(editor));\n editor.ui.registry.addNestedMenuItem('blockformats', {\n text: 'Blocks',\n getSubmenuItems: function () {\n return menuItems.items.validateItems(menuItems.getStyleItems());\n }\n });\n };\n\n var getSpec = function (editor, dataset) {\n var fallbackFormat = 'Paragraph';\n var isSelectedFor = function (format) {\n return function () {\n return editor.formatter.match(format);\n };\n };\n var getPreviewFor = function (format) {\n return function () {\n var 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 };\n var updateSelectMenuText = function (comp) {\n var getFormatItems = function (fmt) {\n var subs = fmt.items;\n return subs !== undefined && subs.length > 0 ? bind$3(subs, getFormatItems) : [{\n title: fmt.title,\n format: fmt.format\n }];\n };\n var flattenedItems = bind$3(getStyleFormats(editor), getFormatItems);\n var detectedFormat = findNearest(editor, constant$1(flattenedItems));\n var text = detectedFormat.fold(constant$1(fallbackFormat), function (fmt) {\n return fmt.title;\n });\n emitWith(comp, updateMenuText, { text: text });\n };\n return {\n tooltip: 'Formats',\n text: Optional.some(fallbackFormat),\n icon: Optional.none(),\n isSelectedFor: isSelectedFor,\n getCurrentValue: Optional.none,\n getPreviewFor: getPreviewFor,\n onAction: onActionToggleFormat$1(editor),\n updateText: updateSelectMenuText,\n shouldHide: editor.getParam('style_formats_autohide', false, 'boolean'),\n isInvalid: function (item) {\n return !editor.formatter.canApply(item.format);\n },\n dataset: dataset\n };\n };\n var createStyleSelect = function (editor, backstage) {\n var dataset = __assign({ type: 'advanced' }, backstage.styleselect);\n return createSelectButton(editor, backstage, getSpec(editor, dataset));\n };\n var styleSelectMenu = function (editor, backstage) {\n var dataset = __assign({ type: 'advanced' }, backstage.styleselect);\n var menuItems = createMenuItems(editor, backstage, getSpec(editor, dataset));\n editor.ui.registry.addNestedMenuItem('formats', {\n text: 'Formats',\n getSubmenuItems: function () {\n return menuItems.items.validateItems(menuItems.getStyleItems());\n }\n });\n };\n\n var events$3 = function (reflectingConfig, reflectingState) {\n var update = function (component, data) {\n reflectingConfig.updateState.each(function (updateState) {\n var newState = updateState(component, data);\n reflectingState.set(newState);\n });\n reflectingConfig.renderComponents.each(function (renderComponents) {\n var newComponents = renderComponents(data, reflectingState.get());\n var newChildren = map$2(newComponents, component.getSystem().build);\n replaceChildren(component, newChildren);\n });\n };\n return derive$2([\n run$1(receive(), function (component, message) {\n var receivingData = message;\n if (!receivingData.universal) {\n var channel = reflectingConfig.channel;\n if (contains$2(receivingData.channels, channel)) {\n update(component, receivingData.data);\n }\n }\n }),\n runOnAttached(function (comp, _se) {\n reflectingConfig.initialData.each(function (rawData) {\n update(comp, rawData);\n });\n })\n ]);\n };\n\n var ActiveReflecting = /*#__PURE__*/Object.freeze({\n __proto__: null,\n events: events$3\n });\n\n var getState = function (component, replaceConfig, reflectState) {\n return reflectState;\n };\n\n var ReflectingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getState: getState\n });\n\n var ReflectingSchema = [\n required$1('channel'),\n option('renderComponents'),\n option('updateState'),\n option('initialData')\n ];\n\n var init$3 = function () {\n var cell = Cell(Optional.none());\n var clear = function () {\n return cell.set(Optional.none());\n };\n var readState = function () {\n return cell.get().getOr('none');\n };\n return {\n readState: readState,\n get: cell.get,\n set: cell.set,\n clear: clear\n };\n };\n\n var ReflectingState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init$3\n });\n\n var Reflecting = create$8({\n fields: ReflectingSchema,\n name: 'reflecting',\n active: ActiveReflecting,\n apis: ReflectingApis,\n state: ReflectingState\n });\n\n var 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('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('role')\n ].concat(sandboxFields()));\n var arrowPart = required({\n factory: Button,\n schema: [required$1('dom')],\n name: 'arrow',\n defaults: function () {\n return { buttonBehaviours: derive$1([Focusing.revoke()]) };\n },\n overrides: function (detail) {\n return {\n dom: {\n tag: 'span',\n attributes: { role: 'presentation' }\n },\n action: function (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 var buttonPart = required({\n factory: Button,\n schema: [required$1('dom')],\n name: 'button',\n defaults: function () {\n return { buttonBehaviours: derive$1([Focusing.revoke()]) };\n },\n overrides: function (detail) {\n return {\n dom: {\n tag: 'span',\n attributes: { role: 'presentation' }\n },\n action: function (btn) {\n btn.getSystem().getByUid(detail.uid).each(function (splitDropdown) {\n detail.onExecute(splitDropdown, btn);\n });\n }\n };\n }\n });\n var parts$3 = constant$1([\n arrowPart,\n buttonPart,\n optional({\n factory: {\n sketch: function (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$1({\n schema: [tieredMenuMarkers()],\n name: 'menu',\n defaults: function (detail) {\n return {\n onExecute: function (tmenu, item) {\n tmenu.getSystem().getByUid(detail.uid).each(function (splitDropdown) {\n detail.onItemExecute(splitDropdown, tmenu, item);\n });\n }\n };\n }\n }),\n partType$1()\n ]);\n\n var factory$5 = function (detail, components, spec, externals) {\n var _a;\n var switchToMenu = function (sandbox) {\n Composing.getCurrent(sandbox).each(function (current) {\n Highlighting.highlightFirst(current);\n Keying.focusIn(current);\n });\n };\n var action = function (component) {\n var onOpenSync = switchToMenu;\n togglePopup(detail, identity$1, component, externals, onOpenSync, HighlightOnOpen.HighlightFirst).get(noop);\n };\n var openMenu = function (comp) {\n action(comp);\n return Optional.some(true);\n };\n var executeOnButton = function (comp) {\n var button = getPartOrDie(comp, detail, 'button');\n emitExecute(button);\n return Optional.some(true);\n };\n var buttonEvents = __assign(__assign({}, derive$2([runOnAttached(function (component, _simulatedEvent) {\n var ariaDescriptor = getPart(component, detail, 'aria-descriptor');\n ariaDescriptor.each(function (descriptor) {\n var descriptorId = generate$6('aria');\n set$8(descriptor.element, 'id', descriptorId);\n set$8(component.element, 'aria-describedby', descriptorId);\n });\n })])), events$a(Optional.some(action)));\n var apis = {\n repositionMenus: function (comp) {\n if (Toggling.isOn(comp)) {\n repositionMenus(comp);\n }\n }\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n apis: apis,\n eventOrder: __assign(__assign({}, detail.eventOrder), (_a = {}, _a[execute$5()] = [\n 'disabling',\n 'toggling',\n 'alloy.base.behaviour'\n ], _a)),\n events: buttonEvents,\n behaviours: augment(detail.splitDropdownBehaviours, [\n Coupling.config({\n others: {\n sandbox: function (hotspot) {\n var arrow = getPartOrDie(hotspot, detail, 'arrow');\n var extras = {\n onOpen: function () {\n Toggling.on(arrow);\n Toggling.on(hotspot);\n },\n onClose: function () {\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 var SplitDropdown = composite({\n name: 'SplitDropdown',\n configFields: schema$7(),\n partFields: parts$3(),\n factory: factory$5,\n apis: {\n repositionMenus: function (apis, comp) {\n return apis.repositionMenus(comp);\n }\n }\n });\n\n var getButtonApi = function (component) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var getToggleApi = function (component) {\n return {\n setActive: function (state) {\n Toggling.set(component, state);\n },\n isActive: function () {\n return Toggling.isOn(component);\n },\n isDisabled: function () {\n return Disabling.isDisabled(component);\n },\n setDisabled: function (state) {\n return Disabling.set(component, state);\n }\n };\n };\n var getTooltipAttributes = function (tooltip, providersBackstage) {\n return tooltip.map(function (tooltip) {\n return {\n 'aria-label': providersBackstage.translate(tooltip),\n 'title': providersBackstage.translate(tooltip)\n };\n }).getOr({});\n };\n var focusButtonEvent = generate$6('focus-button');\n var renderCommonStructure = function (icon, text, tooltip, receiver, behaviours, providersBackstage) {\n var _d;\n return {\n dom: {\n tag: 'button',\n classes: ['tox-tbtn'].concat(text.isSome() ? ['tox-tbtn--select'] : []),\n attributes: getTooltipAttributes(tooltip, providersBackstage)\n },\n components: componentRenderPipeline([\n icon.map(function (iconName) {\n return renderIconFromPack(iconName, providersBackstage.icons);\n }),\n text.map(function (text) {\n return renderLabel$1(text, 'tox-tbtn', providersBackstage);\n })\n ]),\n eventOrder: (_d = {}, _d[mousedown()] = [\n 'focusing',\n 'alloy.base.behaviour',\n 'common-button-display-events'\n ], _d),\n buttonBehaviours: derive$1([\n DisablingConfigs.toolbarButton(providersBackstage.isDisabled),\n receivingConfig(),\n config('common-button-display-events', [run$1(mousedown(), function (button, se) {\n se.event.prevent();\n emit(button, focusButtonEvent);\n })])\n ].concat(receiver.map(function (r) {\n return Reflecting.config({\n channel: r,\n initialData: {\n icon: icon,\n text: text\n },\n renderComponents: function (data, _state) {\n return componentRenderPipeline([\n data.icon.map(function (iconName) {\n return renderIconFromPack(iconName, providersBackstage.icons);\n }),\n data.text.map(function (text) {\n return renderLabel$1(text, 'tox-tbtn', providersBackstage);\n })\n ]);\n }\n });\n }).toArray()).concat(behaviours.getOr([])))\n };\n };\n var renderFloatingToolbarButton = function (spec, backstage, identifyButtons, attributes) {\n var sharedBackstage = backstage.shared;\n return FloatingToolbarButton.sketch({\n lazySink: sharedBackstage.getSink,\n fetch: function () {\n return Future.nu(function (resolve) {\n resolve(map$2(identifyButtons(spec.items), renderToolbarGroup));\n });\n },\n markers: { toggledClass: 'tox-tbtn--enabled' },\n parts: {\n button: renderCommonStructure(spec.icon, spec.text, spec.tooltip, Optional.none(), Optional.none(), sharedBackstage.providers),\n toolbar: {\n dom: {\n tag: 'div',\n classes: ['tox-toolbar__overflow'],\n attributes: attributes\n }\n }\n }\n });\n };\n var renderCommonToolbarButton = function (spec, specialisation, providersBackstage) {\n var editorOffCell = Cell(noop);\n var structure = renderCommonStructure(spec.icon, spec.text, spec.tooltip, Optional.none(), Optional.none(), providersBackstage);\n return Button.sketch({\n dom: structure.dom,\n components: structure.components,\n eventOrder: toolbarButtonEventOrder,\n buttonBehaviours: 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 DisablingConfigs.toolbarButton(function () {\n return spec.disabled || providersBackstage.isDisabled();\n }),\n receivingConfig()\n ].concat(specialisation.toolbarButtonBehaviours))\n });\n };\n var renderToolbarButton = function (spec, providersBackstage) {\n return renderToolbarButtonWith(spec, providersBackstage, []);\n };\n var renderToolbarButtonWith = function (spec, providersBackstage, bonusEvents) {\n return renderCommonToolbarButton(spec, {\n toolbarButtonBehaviours: [].concat(bonusEvents.length > 0 ? [config('toolbarButtonWith', bonusEvents)] : []),\n getApi: getButtonApi,\n onSetup: spec.onSetup\n }, providersBackstage);\n };\n var renderToolbarToggleButton = function (spec, providersBackstage) {\n return renderToolbarToggleButtonWith(spec, providersBackstage, []);\n };\n var renderToolbarToggleButtonWith = function (spec, providersBackstage, bonusEvents) {\n return deepMerge(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));\n };\n var fetchChoices = function (getApi, spec, providersBackstage) {\n return function (comp) {\n return Future.nu(function (callback) {\n return spec.fetch(callback);\n }).map(function (items) {\n return Optional.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$6('menu-value'), items, function (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(function (comp, _se) {\n detectSize(comp, 4, classForPreset(spec.presets)).each(function (_d) {\n var numRows = _d.numRows, numColumns = _d.numColumns;\n Keying.setGridSize(comp, numRows, numColumns);\n });\n })])\n })));\n });\n };\n };\n var renderSplitButton = function (spec, sharedBackstage) {\n var _d;\n var displayChannel = generate$6('channel-update-split-dropdown-display');\n var getApi = function (comp) {\n return {\n isDisabled: function () {\n return Disabling.isDisabled(comp);\n },\n setDisabled: function (state) {\n return Disabling.set(comp, state);\n },\n setIconFill: function (id, value) {\n descendant(comp.element, 'svg path[id=\"' + id + '\"], rect[id=\"' + id + '\"]').each(function (underlinePath) {\n set$8(underlinePath, 'fill', value);\n });\n },\n setIconStroke: function (id, value) {\n descendant(comp.element, 'svg path[id=\"' + id + '\"], rect[id=\"' + id + '\"]').each(function (underlinePath) {\n set$8(underlinePath, 'stroke', value);\n });\n },\n setActive: function (state) {\n set$8(comp.element, 'aria-pressed', state);\n descendant(comp.element, 'span').each(function (button) {\n comp.getSystem().getByDom(button).each(function (buttonComp) {\n return Toggling.set(buttonComp, state);\n });\n });\n },\n isActive: function () {\n return descendant(comp.element, 'span').exists(function (button) {\n return comp.getSystem().getByDom(button).exists(Toggling.isOn);\n });\n }\n };\n };\n var editorOffCell = Cell(noop);\n var specialisation = {\n getApi: getApi,\n onSetup: spec.onSetup\n };\n return SplitDropdown.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-split-button'],\n attributes: __assign({ 'aria-pressed': false }, getTooltipAttributes(spec.tooltip, sharedBackstage.providers))\n },\n onExecute: function (button) {\n spec.onAction(getApi(button));\n },\n onItemExecute: function (_a, _b, _c) {\n },\n splitDropdownBehaviours: derive$1([\n DisablingConfigs.splitButton(sharedBackstage.providers.isDisabled),\n receivingConfig(),\n config('split-dropdown-events', [\n run$1(focusButtonEvent, Focusing.focus),\n onControlAttached(specialisation, editorOffCell),\n onControlDetached(specialisation, editorOffCell)\n ]),\n Unselecting.config({})\n ]),\n eventOrder: (_d = {}, _d[attachedToDom()] = [\n 'alloy.base.behaviour',\n 'split-dropdown-events'\n ], _d),\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(displayChannel), Optional.some([Toggling.config({\n toggleClass: 'tox-tbtn--enabled',\n toggleOnExecute: false\n })]), sharedBackstage.providers)),\n SplitDropdown.parts.arrow({\n dom: {\n tag: 'button',\n classes: [\n 'tox-tbtn',\n 'tox-split-button__chevron'\n ],\n innerHtml: get$1('chevron-down', sharedBackstage.providers.icons)\n },\n buttonBehaviours: derive$1([\n DisablingConfigs.splitButton(sharedBackstage.providers.isDisabled),\n receivingConfig(),\n addFocusableBehaviour()\n ])\n }),\n SplitDropdown.parts['aria-descriptor']({ text: sharedBackstage.providers.translate('To open the popup, press Shift+Enter') })\n ]\n });\n };\n\n var defaultToolbar = [\n {\n name: 'history',\n items: [\n 'undo',\n 'redo'\n ]\n },\n {\n name: 'styles',\n items: ['styleselect']\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 var renderFromBridge = function (bridgeBuilder, render) {\n return function (spec, extras, editor) {\n var internal = bridgeBuilder(spec).mapError(function (errInfo) {\n return formatError(errInfo);\n }).getOrDie();\n return render(internal, extras, editor);\n };\n };\n var types = {\n button: renderFromBridge(createToolbarButton, function (s, extras) {\n return renderToolbarButton(s, extras.backstage.shared.providers);\n }),\n togglebutton: renderFromBridge(createToggleButton, function (s, extras) {\n return renderToolbarToggleButton(s, extras.backstage.shared.providers);\n }),\n menubutton: renderFromBridge(createMenuButton, function (s, extras) {\n return renderMenuButton(s, 'tox-tbtn', extras.backstage, Optional.none());\n }),\n splitbutton: renderFromBridge(createSplitButton, function (s, extras) {\n return renderSplitButton(s, extras.backstage.shared);\n }),\n grouptoolbarbutton: renderFromBridge(createGroupToolbarButton, function (s, extras, editor) {\n var _a;\n var buttons = editor.ui.registry.getAll().buttons;\n var identify = function (toolbar) {\n return identifyButtons(editor, {\n buttons: buttons,\n toolbar: toolbar,\n allowToolbarGroups: false\n }, extras, Optional.none());\n };\n var attributes = (_a = {}, _a[Attribute] = extras.backstage.shared.header.isPositionedAtTop() ? AttributeValue.TopToBottom : AttributeValue.BottomToTop, _a);\n switch (getToolbarMode(editor)) {\n case ToolbarMode.floating:\n return renderFloatingToolbarButton(s, extras.backstage, identify, attributes);\n default:\n throw new Error('Toolbar groups are only supported when using floating toolbar mode');\n }\n }),\n styleSelectButton: function (editor, extras) {\n return createStyleSelect(editor, extras.backstage);\n },\n fontsizeSelectButton: function (editor, extras) {\n return createFontsizeSelect(editor, extras.backstage);\n },\n fontSelectButton: function (editor, extras) {\n return createFontSelect(editor, extras.backstage);\n },\n formatButton: function (editor, extras) {\n return createFormatSelect(editor, extras.backstage);\n },\n alignMenuButton: function (editor, extras) {\n return createAlignSelect(editor, extras.backstage);\n }\n };\n var extractFrom = function (spec, extras, editor) {\n return get$e(types, spec.type).fold(function () {\n console.error('skipping button defined by', spec);\n return Optional.none();\n }, function (render) {\n return Optional.some(render(spec, extras, editor));\n });\n };\n var bespokeButtons = {\n styleselect: types.styleSelectButton,\n fontsizeselect: types.fontsizeSelectButton,\n fontselect: types.fontSelectButton,\n formatselect: types.formatButton,\n align: types.alignMenuButton\n };\n var removeUnusedDefaults = function (buttons) {\n var filteredItemGroups = map$2(defaultToolbar, function (group) {\n var items = filter$2(group.items, function (subItem) {\n return has$2(buttons, subItem) || has$2(bespokeButtons, subItem);\n });\n return {\n name: group.name,\n items: items\n };\n });\n return filter$2(filteredItemGroups, function (group) {\n return group.items.length > 0;\n });\n };\n var convertStringToolbar = function (strToolbar) {\n var groupsStrings = strToolbar.split('|');\n return map$2(groupsStrings, function (g) {\n return { items: g.trim().split(' ') };\n });\n };\n var isToolbarGroupSettingArray = function (toolbar) {\n return isArrayOf(toolbar, function (t) {\n return has$2(t, 'name') && has$2(t, 'items');\n });\n };\n var createToolbar = function (toolbarConfig) {\n var toolbar = toolbarConfig.toolbar;\n var 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 var lookupButton = function (editor, buttons, toolbarItem, allowToolbarGroups, extras, prefixes) {\n return get$e(buttons, toolbarItem.toLowerCase()).orThunk(function () {\n return prefixes.bind(function (ps) {\n return findMap(ps, function (prefix) {\n return get$e(buttons, prefix + toolbarItem.toLowerCase());\n });\n });\n }).fold(function () {\n return get$e(bespokeButtons, toolbarItem.toLowerCase()).map(function (r) {\n return r(editor, extras);\n }).orThunk(function () {\n return Optional.none();\n });\n }, function (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, extras, editor);\n }\n });\n };\n var identifyButtons = function (editor, toolbarConfig, extras, prefixes) {\n var toolbarGroups = createToolbar(toolbarConfig);\n var groups = map$2(toolbarGroups, function (group) {\n var items = bind$3(group.items, function (toolbarItem) {\n return toolbarItem.trim().length === 0 ? [] : lookupButton(editor, toolbarConfig.buttons, toolbarItem, toolbarConfig.allowToolbarGroups, extras, prefixes).toArray();\n });\n return {\n title: Optional.from(editor.translate(group.name)),\n items: items\n };\n });\n return filter$2(groups, function (group) {\n return group.items.length > 0;\n });\n };\n\n var setToolbar = function (editor, uiComponents, rawUiConfig, backstage) {\n var comp = uiComponents.outerContainer;\n var toolbarConfig = rawUiConfig.toolbar;\n var toolbarButtonsConfig = rawUiConfig.buttons;\n if (isArrayOf(toolbarConfig, isString)) {\n var toolbars = toolbarConfig.map(function (t) {\n var config = {\n toolbar: t,\n buttons: toolbarButtonsConfig,\n allowToolbarGroups: rawUiConfig.allowToolbarGroups\n };\n return identifyButtons(editor, config, { backstage: backstage }, Optional.none());\n });\n OuterContainer.setToolbars(comp, toolbars);\n } else {\n OuterContainer.setToolbar(comp, identifyButtons(editor, rawUiConfig, { backstage: backstage }, Optional.none()));\n }\n };\n\n var detection = detect$1();\n var isiOS12 = detection.os.isiOS() && detection.os.version.major <= 12;\n var setupEvents$1 = function (editor, uiComponents) {\n var dom = editor.dom;\n var contentWindow = editor.getWin();\n var initialDocEle = editor.getDoc().documentElement;\n var lastWindowDimensions = Cell(SugarPosition(contentWindow.innerWidth, contentWindow.innerHeight));\n var lastDocumentDimensions = Cell(SugarPosition(initialDocEle.offsetWidth, initialDocEle.offsetHeight));\n var resizeWindow = function () {\n var 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 var resizeDocument = function () {\n var docEle = editor.getDoc().documentElement;\n var 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 var scroll = function (e) {\n return fireScrollContent(editor, e);\n };\n dom.bind(contentWindow, 'resize', resizeWindow);\n dom.bind(contentWindow, 'scroll', scroll);\n var elementLoad = capture(SugarElement.fromDom(editor.getBody()), 'load', resizeDocument);\n var mothership = uiComponents.uiMothership.element;\n editor.on('hide', function () {\n set$7(mothership, 'display', 'none');\n });\n editor.on('show', function () {\n remove$6(mothership, 'display');\n });\n editor.on('NodeChange', resizeDocument);\n editor.on('remove', function () {\n elementLoad.unbind();\n dom.unbind(contentWindow, 'resize', resizeWindow);\n dom.unbind(contentWindow, 'scroll', scroll);\n contentWindow = null;\n });\n };\n var render$1 = function (editor, uiComponents, rawUiConfig, backstage, args) {\n var lastToolbarWidth = Cell(0);\n var outerContainer = uiComponents.outerContainer;\n iframe(editor);\n var eTargetNode = SugarElement.fromDom(args.targetNode);\n var uiRoot = getContentContainer(getRootNode(eTargetNode));\n attachSystemAfter(eTargetNode, uiComponents.mothership);\n attachSystem(uiRoot, uiComponents.uiMothership);\n editor.on('PostRender', function () {\n setToolbar(editor, uiComponents, rawUiConfig, backstage);\n lastToolbarWidth.set(editor.getWin().innerWidth);\n OuterContainer.setMenubar(outerContainer, identifyMenus(editor, rawUiConfig));\n OuterContainer.setSidebar(outerContainer, rawUiConfig.sidebar);\n setupEvents$1(editor, uiComponents);\n });\n var 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 var limit = first(function () {\n editor.fire('ScrollContent');\n }, 20);\n var unbinder = bind(socket.element, 'scroll', limit.throttle);\n editor.on('remove', unbinder.unbind);\n }\n setupReadonlyModeSwitch(editor, uiComponents);\n editor.addCommand('ToggleSidebar', function (_ui, value) {\n OuterContainer.toggleSidebar(outerContainer, value);\n editor.fire('ToggleSidebar');\n });\n editor.addQueryValueHandler('ToggleSidebar', function () {\n return OuterContainer.whichSidebar(outerContainer);\n });\n var toolbarMode = getToolbarMode(editor);\n var refreshDrawer = function () {\n OuterContainer.refreshToolbar(uiComponents.outerContainer);\n };\n if (toolbarMode === ToolbarMode.sliding || toolbarMode === ToolbarMode.floating) {\n editor.on('ResizeWindow ResizeEditor ResizeContent', function () {\n var width = editor.getWin().innerWidth;\n if (width !== lastToolbarWidth.get()) {\n refreshDrawer();\n lastToolbarWidth.set(width);\n }\n });\n }\n var api = {\n enable: function () {\n broadcastReadonly(uiComponents, false);\n },\n disable: function () {\n broadcastReadonly(uiComponents, true);\n },\n isDisabled: function () {\n return Disabling.isDisabled(outerContainer);\n }\n };\n return {\n iframeContainer: socket.element.dom,\n editorContainer: outerContainer.element.dom,\n api: api\n };\n };\n\n var Iframe = /*#__PURE__*/Object.freeze({\n __proto__: null,\n render: render$1\n });\n\n var parseToInt = function (val) {\n var re = /^[0-9\\.]+(|px)$/i;\n if (re.test('' + val)) {\n return Optional.some(parseInt('' + val, 10));\n }\n return Optional.none();\n };\n var numToPx = function (val) {\n return isNumber(val) ? val + 'px' : val;\n };\n var calcCappedSize = function (size, minSize, maxSize) {\n var minOverride = minSize.filter(function (min) {\n return size < min;\n });\n var maxOverride = maxSize.filter(function (max) {\n return size > max;\n });\n return minOverride.or(maxOverride).getOr(size);\n };\n\n var getHeight = function (editor) {\n var baseHeight = getHeightSetting(editor);\n var minHeight = getMinHeightSetting(editor);\n var maxHeight = getMaxHeightSetting(editor);\n return parseToInt(baseHeight).map(function (height) {\n return calcCappedSize(height, minHeight, maxHeight);\n });\n };\n var getHeightWithFallback = function (editor) {\n var height = getHeight(editor);\n return height.getOr(getHeightSetting(editor));\n };\n var getWidth = function (editor) {\n var baseWidth = getWidthSetting(editor);\n var minWidth = getMinWidthSetting(editor);\n var maxWidth = getMaxWidthSetting(editor);\n return parseToInt(baseWidth).map(function (width) {\n return calcCappedSize(width, minWidth, maxWidth);\n });\n };\n var getWidthWithFallback = function (editor) {\n var width = getWidth(editor);\n return width.getOr(getWidthSetting(editor));\n };\n\n var InlineHeader = function (editor, targetElm, uiComponents, backstage, floatContainer) {\n var uiMothership = uiComponents.uiMothership, outerContainer = uiComponents.outerContainer;\n var DOM = global$b.DOM;\n var useFixedToolbarContainer = useFixedContainer(editor);\n var isSticky = isStickyToolbar(editor);\n var editorMaxWidthOpt = getMaxWidthSetting(editor).or(getWidth(editor));\n var headerBackstage = backstage.shared.header;\n var isPositionedAtTop = headerBackstage.isPositionedAtTop;\n var toolbarMode = getToolbarMode(editor);\n var isSplitToolbar = toolbarMode === ToolbarMode.sliding || toolbarMode === ToolbarMode.floating;\n var visible = Cell(false);\n var isVisible = function () {\n return visible.get() && !editor.removed;\n };\n var calcToolbarOffset = function (toolbar) {\n return isSplitToolbar ? toolbar.fold(constant$1(0), function (tbar) {\n return tbar.components().length > 1 ? get$b(tbar.components()[1].element) : 0;\n }) : 0;\n };\n var calcMode = function (container) {\n switch (getToolbarLocation(editor)) {\n case ToolbarLocation.auto:\n var toolbar_1 = OuterContainer.getToolbar(outerContainer);\n var offset = calcToolbarOffset(toolbar_1);\n var toolbarHeight = get$b(container.element) - offset;\n var targetBounds = box$1(targetElm);\n var roomAtTop = targetBounds.y > toolbarHeight;\n if (roomAtTop) {\n return 'top';\n } else {\n var doc = documentElement(targetElm);\n var docHeight = Math.max(doc.dom.scrollHeight, get$b(doc));\n var roomAtBottom = targetBounds.bottom < docHeight - toolbarHeight;\n if (roomAtBottom) {\n return 'bottom';\n } else {\n var winBounds = win();\n var 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 var setupMode = function (mode) {\n var container = floatContainer.get();\n Docking.setModes(container, [mode]);\n headerBackstage.setDockingMode(mode);\n var verticalDir = isPositionedAtTop() ? AttributeValue.TopToBottom : AttributeValue.BottomToTop;\n set$8(container.element, Attribute, verticalDir);\n };\n var updateChromeWidth = function () {\n var maxWidth = editorMaxWidthOpt.getOrThunk(function () {\n var bodyMargin = parseToInt(get$c(body(), 'margin-left')).getOr(0);\n return get$a(body()) - absolute$3(targetElm).left + bodyMargin;\n });\n set$7(floatContainer.get().element, 'max-width', maxWidth + 'px');\n };\n var updateChromePosition = function () {\n var toolbar = OuterContainer.getToolbar(outerContainer);\n var offset = calcToolbarOffset(toolbar);\n var targetBounds = box$1(targetElm);\n var top = isPositionedAtTop() ? Math.max(targetBounds.y - get$b(floatContainer.get().element) + offset, 0) : targetBounds.bottom;\n setAll(outerContainer.element, {\n position: 'absolute',\n top: Math.round(top) + 'px',\n left: Math.round(targetBounds.x) + 'px'\n });\n };\n var repositionPopups$1 = function () {\n uiMothership.broadcastOn([repositionPopups()], {});\n };\n var updateChromeUi = function (resetDocking) {\n if (resetDocking === void 0) {\n resetDocking = false;\n }\n if (!isVisible()) {\n return;\n }\n if (!useFixedToolbarContainer) {\n updateChromeWidth();\n }\n if (isSplitToolbar) {\n OuterContainer.refreshToolbar(outerContainer);\n }\n if (!useFixedToolbarContainer) {\n updateChromePosition();\n }\n if (isSticky) {\n var floatContainerComp = floatContainer.get();\n resetDocking ? Docking.reset(floatContainerComp) : Docking.refresh(floatContainerComp);\n }\n repositionPopups$1();\n };\n var updateMode = function (updateUi) {\n if (updateUi === void 0) {\n updateUi = true;\n }\n if (useFixedToolbarContainer || !isSticky || !isVisible()) {\n return;\n }\n var currentMode = headerBackstage.getDockingMode();\n var newMode = calcMode(floatContainer.get());\n if (newMode !== currentMode) {\n setupMode(newMode);\n if (updateUi) {\n updateChromeUi(true);\n }\n }\n };\n var show = function () {\n visible.set(true);\n set$7(outerContainer.element, 'display', 'flex');\n DOM.addClass(editor.getBody(), 'mce-edit-focus');\n remove$6(uiMothership.element, 'display');\n updateMode(false);\n updateChromeUi();\n };\n var hide = function () {\n visible.set(false);\n if (uiComponents.outerContainer) {\n set$7(outerContainer.element, 'display', 'none');\n DOM.removeClass(editor.getBody(), 'mce-edit-focus');\n }\n set$7(uiMothership.element, 'display', 'none');\n };\n return {\n isVisible: isVisible,\n isPositionedAtTop: isPositionedAtTop,\n show: show,\n hide: hide,\n update: updateChromeUi,\n updateMode: updateMode,\n repositionPopups: repositionPopups$1\n };\n };\n\n var getTargetPosAndBounds = function (targetElm, isToolbarTop) {\n var bounds = box$1(targetElm);\n return {\n pos: isToolbarTop ? bounds.y : bounds.bottom,\n bounds: bounds\n };\n };\n var setupEvents = function (editor, targetElm, ui, toolbarPersist) {\n var prevPosAndBounds = Cell(getTargetPosAndBounds(targetElm, ui.isPositionedAtTop()));\n var resizeContent = function (e) {\n var _a = getTargetPosAndBounds(targetElm, ui.isPositionedAtTop()), pos = _a.pos, bounds = _a.bounds;\n var _b = prevPosAndBounds.get(), prevPos = _b.pos, prevBounds = _b.bounds;\n var hasResized = bounds.height !== prevBounds.height || bounds.width !== prevBounds.width;\n prevPosAndBounds.set({\n pos: pos,\n bounds: bounds\n });\n if (hasResized) {\n fireResizeContent(editor, e);\n }\n if (ui.isVisible()) {\n if (prevPos !== pos) {\n ui.update(true);\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', function () {\n return ui.update(true);\n });\n editor.on('NodeChange keydown', function (e) {\n global$f.requestAnimationFrame(function () {\n return resizeContent(e);\n });\n });\n editor.on('ScrollWindow', function () {\n return ui.updateMode();\n });\n var elementLoad = unbindable();\n elementLoad.set(capture(SugarElement.fromDom(editor.getBody()), 'load', resizeContent));\n editor.on('remove', function () {\n elementLoad.clear();\n });\n };\n var render = function (editor, uiComponents, rawUiConfig, backstage, args) {\n var mothership = uiComponents.mothership, uiMothership = uiComponents.uiMothership, outerContainer = uiComponents.outerContainer;\n var floatContainer = Cell(null);\n var targetElm = SugarElement.fromDom(args.targetNode);\n var ui = InlineHeader(editor, targetElm, uiComponents, backstage, floatContainer);\n var toolbarPersist = isToolbarPersist(editor);\n inline(editor);\n var render = function () {\n if (floatContainer.get()) {\n ui.show();\n return;\n }\n floatContainer.set(OuterContainer.getHeader(outerContainer).getOrDie());\n var uiContainer = getUiContainer(editor);\n attachSystem(uiContainer, mothership);\n attachSystem(uiContainer, uiMothership);\n setToolbar(editor, uiComponents, rawUiConfig, backstage);\n OuterContainer.setMenubar(outerContainer, identifyMenus(editor, rawUiConfig));\n ui.show();\n setupEvents(editor, targetElm, ui, toolbarPersist);\n editor.nodeChanged();\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', function () {\n if (editor.hasFocus() || toolbarPersist) {\n render();\n }\n });\n setupReadonlyModeSwitch(editor, uiComponents);\n var api = {\n show: function () {\n ui.show();\n },\n hide: function () {\n ui.hide();\n },\n enable: function () {\n broadcastReadonly(uiComponents, false);\n },\n disable: function () {\n broadcastReadonly(uiComponents, true);\n },\n isDisabled: function () {\n return Disabling.isDisabled(outerContainer);\n }\n };\n return {\n editorContainer: outerContainer.element.dom,\n api: api\n };\n };\n\n var Inline = /*#__PURE__*/Object.freeze({\n __proto__: null,\n render: render\n });\n\n var showContextToolbarEvent = 'contexttoolbar-show';\n var hideContextToolbarEvent = 'contexttoolbar-hide';\n\n var getFormApi = function (input) {\n return {\n hide: function () {\n return emit(input, sandboxClose());\n },\n getValue: function () {\n return Representing.getValue(input);\n }\n };\n };\n var runOnExecute = function (memInput, original) {\n return run$1(internalToolbarButtonExecute, function (comp, se) {\n var input = memInput.get(comp);\n var formApi = getFormApi(input);\n original.onAction(formApi, se.event.buttonApi);\n });\n };\n var renderContextButton = function (memInput, button, extras) {\n var _a = button.original; _a.primary; var rest = __rest(_a, ['primary']);\n var bridged = getOrDie(createToolbarButton(__assign(__assign({}, rest), {\n type: 'button',\n onAction: noop\n })));\n return renderToolbarButtonWith(bridged, extras.backstage.shared.providers, [runOnExecute(memInput, button)]);\n };\n var renderContextToggleButton = function (memInput, button, extras) {\n var _a = button.original; _a.primary; var rest = __rest(_a, ['primary']);\n var bridged = getOrDie(createToggleButton(__assign(__assign({}, rest), {\n type: 'togglebutton',\n onAction: noop\n })));\n return renderToolbarToggleButtonWith(bridged, extras.backstage.shared.providers, [runOnExecute(memInput, button)]);\n };\n var generateOne = function (memInput, button, providersBackstage) {\n var extras = { backstage: { shared: { providers: providersBackstage } } };\n if (button.type === 'contextformtogglebutton') {\n return renderContextToggleButton(memInput, button, extras);\n } else {\n return renderContextButton(memInput, button, extras);\n }\n };\n var generate = function (memInput, buttons, providersBackstage) {\n var mementos = map$2(buttons, function (button) {\n return record(generateOne(memInput, button, providersBackstage));\n });\n var asSpecs = function () {\n return map$2(mementos, function (mem) {\n return mem.asSpec();\n });\n };\n var findPrimary = function (compInSystem) {\n return findMap(buttons, function (button, i) {\n if (button.primary) {\n return Optional.from(mementos[i]).bind(function (mem) {\n return mem.getOpt(compInSystem);\n }).filter(not(Disabling.isDisabled));\n } else {\n return Optional.none();\n }\n });\n };\n return {\n asSpecs: asSpecs,\n findPrimary: findPrimary\n };\n };\n\n var buildInitGroups = function (ctx, providers) {\n var inputAttributes = ctx.label.fold(function () {\n return {};\n }, function (label) {\n return { 'aria-label': label };\n });\n var memInput = record(Input.sketch({\n inputClasses: [\n 'tox-toolbar-textfield',\n 'tox-toolbar-nav-js'\n ],\n data: ctx.initValue(),\n inputAttributes: inputAttributes,\n selectOnFocus: true,\n inputBehaviours: derive$1([Keying.config({\n mode: 'special',\n onEnter: function (input) {\n return commands.findPrimary(input).map(function (primary) {\n emitExecute(primary);\n return true;\n });\n },\n onLeft: function (comp, se) {\n se.cut();\n return Optional.none();\n },\n onRight: function (comp, se) {\n se.cut();\n return Optional.none();\n }\n })])\n }));\n var commands = generate(memInput, ctx.commands, providers);\n return [\n {\n title: Optional.none(),\n items: [memInput.asSpec()]\n },\n {\n title: Optional.none(),\n items: commands.asSpecs()\n }\n ];\n };\n var renderContextForm = function (toolbarType, ctx, providers) {\n return renderToolbar({\n type: toolbarType,\n uid: generate$6('context-toolbar'),\n initGroups: buildInitGroups(ctx, providers),\n onEscape: Optional.none,\n cyclicKeying: true,\n providers: providers\n });\n };\n var ContextForm = {\n renderContextForm: renderContextForm,\n buildInitGroups: buildInitGroups\n };\n\n var isVerticalOverlap = function (a, b, threshold) {\n if (threshold === void 0) {\n threshold = 0.01;\n }\n return b.bottom - a.y >= threshold && a.bottom - b.y >= threshold;\n };\n var getRangeRect = function (rng) {\n var rect = rng.getBoundingClientRect();\n if (rect.height <= 0 && rect.width <= 0) {\n var leaf$1 = leaf(SugarElement.fromDom(rng.startContainer), rng.startOffset).element;\n var elm = isText$1(leaf$1) ? parent(leaf$1) : Optional.some(leaf$1);\n return elm.filter(isElement$2).map(function (e) {\n return e.dom.getBoundingClientRect();\n }).getOr(rect);\n } else {\n return rect;\n }\n };\n var getSelectionBounds = function (editor) {\n var rng = editor.selection.getRng();\n var rect = getRangeRect(rng);\n if (editor.inline) {\n var scroll_1 = get$9();\n return bounds(scroll_1.left + rect.left, scroll_1.top + rect.top, rect.width, rect.height);\n } else {\n var 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 var getAnchorElementBounds = function (editor, lastElement) {\n return lastElement.filter(inBody).map(absolute$2).getOrThunk(function () {\n return getSelectionBounds(editor);\n });\n };\n var getHorizontalBounds = function (contentAreaBox, viewportBounds, margin) {\n var x = Math.max(contentAreaBox.x + margin, viewportBounds.x);\n var right = Math.min(contentAreaBox.right - margin, viewportBounds.right);\n return {\n x: x,\n width: right - x\n };\n };\n var getVerticalBounds = function (editor, contentAreaBox, viewportBounds, isToolbarLocationTop, toolbarType, margin) {\n var container = SugarElement.fromDom(editor.getContainer());\n var header = descendant(container, '.tox-editor-header').getOr(container);\n var headerBox = box$1(header);\n var isToolbarBelowContentArea = headerBox.y >= contentAreaBox.bottom;\n var 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 var 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 var getContextToolbarBounds = function (editor, sharedBackstage, toolbarType, margin) {\n if (margin === void 0) {\n margin = 0;\n }\n var viewportBounds = getBounds$3(window);\n var contentAreaBox = box$1(SugarElement.fromDom(editor.getContentAreaContainer()));\n var toolbarOrMenubarEnabled = isMenubarEnabled(editor) || isToolbarEnabled(editor) || isMultipleToolbars(editor);\n var _a = getHorizontalBounds(contentAreaBox, viewportBounds, margin), x = _a.x, width = _a.width;\n if (editor.inline && !toolbarOrMenubarEnabled) {\n return bounds(x, viewportBounds.y, width, viewportBounds.height);\n } else {\n var isToolbarTop = sharedBackstage.header.isPositionedAtTop();\n var _b = getVerticalBounds(editor, contentAreaBox, viewportBounds, isToolbarTop, toolbarType, margin), y = _b.y, bottom = _b.bottom;\n return bounds(x, y, width, bottom - y);\n }\n };\n\n var bubbleSize$1 = 12;\n var 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 var anchorOverrides = {\n maxHeightFunction: expandable$1(),\n maxWidthFunction: expandable()\n };\n var isEntireElementSelected = function (editor, elem) {\n var rng = editor.selection.getRng();\n var 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 var preservePosition = function (elem, position, f) {\n var currentPosition = getRaw(elem, 'position');\n set$7(elem, 'position', position);\n var result = f(elem);\n currentPosition.each(function (pos) {\n return set$7(elem, 'position', pos);\n });\n return result;\n };\n var shouldUseInsetLayouts = function (position) {\n return position === 'node';\n };\n var determineInsetLayout = function (editor, contextbar, elem, data, bounds) {\n var selectionBounds = getSelectionBounds(editor);\n var isSameAnchorElement = data.lastElement().exists(function (prev) {\n return eq(elem, prev);\n });\n if (isEntireElementSelected(editor, elem)) {\n return isSameAnchorElement ? preserve : north;\n } else if (isSameAnchorElement) {\n return preservePosition(contextbar, data.getMode(), function () {\n var isOverlapping = isVerticalOverlap(selectionBounds, box$1(contextbar));\n return isOverlapping && !data.isReposition() ? flip$2 : preserve;\n });\n } else {\n var yBounds = data.getMode() === 'fixed' ? bounds.y + get$9().top : bounds.y;\n var contextbarHeight = get$b(contextbar) + bubbleSize$1;\n return yBounds + contextbarHeight <= selectionBounds.y ? north : south;\n }\n };\n var getAnchorSpec$2 = function (editor, mobile, data, position) {\n var smartInsetLayout = function (elem) {\n return function (anchor, element, bubbles, placee, bounds) {\n var layout = determineInsetLayout(editor, placee, elem, data, bounds);\n var newAnchor = __assign(__assign({}, anchor), {\n y: bounds.y,\n height: bounds.height\n });\n return __assign(__assign({}, layout(newAnchor, element, bubbles, placee, bounds)), { alwaysFit: true });\n };\n };\n var getInsetLayouts = function (elem) {\n return shouldUseInsetLayouts(position) ? [smartInsetLayout(elem)] : [];\n };\n var desktopAnchorSpecLayouts = {\n onLtr: function (elem) {\n return [\n north$2,\n south$2,\n northeast$2,\n southeast$2,\n northwest$2,\n southwest$2\n ].concat(getInsetLayouts(elem));\n },\n onRtl: function (elem) {\n return [\n north$2,\n south$2,\n northwest$2,\n southwest$2,\n northeast$2,\n southeast$2\n ].concat(getInsetLayouts(elem));\n }\n };\n var mobileAnchorSpecLayouts = {\n onLtr: function (elem) {\n return [\n south$2,\n southeast$2,\n southwest$2,\n northeast$2,\n northwest$2,\n north$2\n ].concat(getInsetLayouts(elem));\n },\n onRtl: function (elem) {\n return [\n south$2,\n southwest$2,\n southeast$2,\n northwest$2,\n northeast$2,\n north$2\n ].concat(getInsetLayouts(elem));\n }\n };\n return mobile ? mobileAnchorSpecLayouts : desktopAnchorSpecLayouts;\n };\n var getAnchorLayout = function (editor, position, isTouch, data) {\n if (position === 'line') {\n return {\n bubble: nu$5(bubbleSize$1, 0, bubbleAlignments$1),\n layouts: {\n onLtr: function () {\n return [east$2];\n },\n onRtl: function () {\n return [west$2];\n }\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 var matchTargetWith = function (elem, candidates) {\n var ctxs = filter$2(candidates, function (toolbarApi) {\n return toolbarApi.predicate(elem.dom);\n });\n var _a = partition$3(ctxs, function (t) {\n return t.type === 'contexttoolbar';\n }), pass = _a.pass, fail = _a.fail;\n return {\n contextToolbars: pass,\n contextForms: fail\n };\n };\n var filterByPositionForStartNode = function (toolbars) {\n if (toolbars.length <= 1) {\n return toolbars;\n } else {\n var doesPositionExist = function (value) {\n return exists(toolbars, function (t) {\n return t.position === value;\n });\n };\n var filterToolbarsByPosition = function (value) {\n return filter$2(toolbars, function (t) {\n return t.position === value;\n });\n };\n var hasSelectionToolbars = doesPositionExist('selection');\n var hasNodeToolbars = doesPositionExist('node');\n if (hasSelectionToolbars || hasNodeToolbars) {\n if (hasNodeToolbars && hasSelectionToolbars) {\n var nodeToolbars = filterToolbarsByPosition('node');\n var selectionToolbars = map$2(filterToolbarsByPosition('selection'), function (t) {\n return __assign(__assign({}, t), { 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 var filterByPositionForAncestorNode = function (toolbars) {\n if (toolbars.length <= 1) {\n return toolbars;\n } else {\n var findPosition_1 = function (value) {\n return find$5(toolbars, function (t) {\n return t.position === value;\n });\n };\n var basePosition = findPosition_1('selection').orThunk(function () {\n return findPosition_1('node');\n }).orThunk(function () {\n return findPosition_1('line');\n }).map(function (t) {\n return t.position;\n });\n return basePosition.fold(function () {\n return [];\n }, function (pos) {\n return filter$2(toolbars, function (t) {\n return t.position === pos;\n });\n });\n }\n };\n var matchStartNode = function (elem, nodeCandidates, editorCandidates) {\n var nodeMatches = matchTargetWith(elem, nodeCandidates);\n if (nodeMatches.contextForms.length > 0) {\n return Optional.some({\n elem: elem,\n toolbars: [nodeMatches.contextForms[0]]\n });\n } else {\n var editorMatches = matchTargetWith(elem, editorCandidates);\n if (editorMatches.contextForms.length > 0) {\n return Optional.some({\n elem: elem,\n toolbars: [editorMatches.contextForms[0]]\n });\n } else if (nodeMatches.contextToolbars.length > 0 || editorMatches.contextToolbars.length > 0) {\n var toolbars = filterByPositionForStartNode(nodeMatches.contextToolbars.concat(editorMatches.contextToolbars));\n return Optional.some({\n elem: elem,\n toolbars: toolbars\n });\n } else {\n return Optional.none();\n }\n }\n };\n var matchAncestor = function (isRoot, startNode, scopes) {\n if (isRoot(startNode)) {\n return Optional.none();\n } else {\n return ancestor$2(startNode, function (ancestorElem) {\n if (isElement$2(ancestorElem)) {\n var _a = matchTargetWith(ancestorElem, scopes.inNodeScope), contextToolbars = _a.contextToolbars, contextForms = _a.contextForms;\n var toolbars = contextForms.length > 0 ? contextForms : filterByPositionForAncestorNode(contextToolbars);\n return toolbars.length > 0 ? Optional.some({\n elem: ancestorElem,\n toolbars: toolbars\n }) : Optional.none();\n } else {\n return Optional.none();\n }\n }, isRoot);\n }\n };\n var lookup$1 = function (scopes, editor) {\n var rootElem = SugarElement.fromDom(editor.getBody());\n var isRoot = function (elem) {\n return eq(elem, rootElem);\n };\n var isOutsideRoot = function (startNode) {\n return !isRoot(startNode) && !contains(rootElem, startNode);\n };\n var startNode = SugarElement.fromDom(editor.selection.getNode());\n if (isOutsideRoot(startNode)) {\n return Optional.none();\n }\n return matchStartNode(startNode, scopes.inNodeScope, scopes.inEditorScope).orThunk(function () {\n return matchAncestor(isRoot, startNode, scopes);\n });\n };\n\n var categorise = function (contextToolbars, navigate) {\n var forms = {};\n var inNodeScope = [];\n var inEditorScope = [];\n var formNavigators = {};\n var lookupTable = {};\n var registerForm = function (key, toolbarSpec) {\n var contextForm = getOrDie(createContextForm(toolbarSpec));\n forms[key] = contextForm;\n contextForm.launch.map(function (launch) {\n formNavigators['form:' + key + ''] = __assign(__assign({}, toolbarSpec.launch), {\n type: launch.type === 'contextformtogglebutton' ? 'togglebutton' : 'button',\n onAction: function () {\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 var registerToolbar = function (key, toolbarSpec) {\n createContextToolbar(toolbarSpec).each(function (contextToolbar) {\n if (toolbarSpec.scope === 'editor') {\n inEditorScope.push(contextToolbar);\n } else {\n inNodeScope.push(contextToolbar);\n }\n lookupTable[key] = contextToolbar;\n });\n };\n var keys$1 = keys(contextToolbars);\n each$1(keys$1, function (key) {\n var toolbarApi = contextToolbars[key];\n if (toolbarApi.type === 'contextform') {\n registerForm(key, toolbarApi);\n } else if (toolbarApi.type === 'contexttoolbar') {\n registerToolbar(key, toolbarApi);\n }\n });\n return {\n forms: forms,\n inNodeScope: inNodeScope,\n inEditorScope: inEditorScope,\n lookupTable: lookupTable,\n formNavigators: formNavigators\n };\n };\n\n var forwardSlideEvent = generate$6('forward-slide');\n var backSlideEvent = generate$6('backward-slide');\n var changeSlideEvent = generate$6('change-slide-event');\n var resizingClass = 'tox-pop--resizing';\n var renderContextToolbar = function (spec) {\n var stack = Cell([]);\n return InlineView.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-pop']\n },\n fireDismissalEventInstead: { event: 'doNotDismissYet' },\n onShow: function (comp) {\n stack.set([]);\n InlineView.getContent(comp).each(function (c) {\n remove$6(c.element, 'visibility');\n });\n remove$2(comp.element, resizingClass);\n remove$6(comp.element, 'width');\n },\n inlineBehaviours: derive$1([\n config('context-toolbar-events', [\n runOnSource(transitionend(), function (comp, se) {\n if (se.event.raw.propertyName === 'width') {\n remove$2(comp.element, resizingClass);\n remove$6(comp.element, 'width');\n }\n }),\n run$1(changeSlideEvent, function (comp, se) {\n var elem = comp.element;\n remove$6(elem, 'width');\n var currentWidth = get$a(elem);\n InlineView.setContent(comp, se.event.contents);\n add$2(elem, resizingClass);\n var newWidth = get$a(elem);\n set$7(elem, 'width', currentWidth + 'px');\n InlineView.getContent(comp).each(function (newContents) {\n se.event.focus.bind(function (f) {\n focus$3(f);\n return search(elem);\n }).orThunk(function () {\n Keying.focusIn(newContents);\n return active(getRootNode(elem));\n });\n });\n global$f.setTimeout(function () {\n set$7(comp.element, 'width', newWidth + 'px');\n }, 0);\n }),\n run$1(forwardSlideEvent, function (comp, se) {\n InlineView.getContent(comp).each(function (oldContents) {\n stack.set(stack.get().concat([{\n bar: oldContents,\n focus: active(getRootNode(comp.element))\n }]));\n });\n emitWith(comp, changeSlideEvent, {\n contents: se.event.forwardContents,\n focus: Optional.none()\n });\n }),\n run$1(backSlideEvent, function (comp, _se) {\n last$2(stack.get()).each(function (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: function (comp) {\n return last$2(stack.get()).fold(function () {\n return spec.onEscape();\n }, function (_) {\n emit(comp, backSlideEvent);\n return Optional.some(true);\n });\n }\n })\n ]),\n lazySink: function () {\n return Result.value(spec.sink);\n }\n });\n };\n\n var transitionClass = 'tox-pop--transition';\n var register$7 = function (editor, registryContextToolbars, sink, extras) {\n var backstage = extras.backstage;\n var sharedBackstage = backstage.shared;\n var isTouch = detect$1().deviceType.isTouch;\n var lastElement = value$1();\n var lastTrigger = value$1();\n var lastContextPosition = value$1();\n var contextbar = build$1(renderContextToolbar({\n sink: sink,\n onEscape: function () {\n editor.focus();\n return Optional.some(true);\n }\n }));\n var getBounds = function () {\n var position = lastContextPosition.get().getOr('node');\n var margin = shouldUseInsetLayouts(position) ? 1 : 0;\n return getContextToolbarBounds(editor, sharedBackstage, position, margin);\n };\n var canLaunchToolbar = function () {\n return !editor.removed && !(isTouch() && backstage.isContextMenuOpen());\n };\n var isSameLaunchElement = function (elem) {\n return is$1(lift2(elem, lastElement.get(), eq), true);\n };\n var shouldContextToolbarHide = function () {\n if (!canLaunchToolbar()) {\n return true;\n } else {\n var contextToolbarBounds = getBounds();\n var anchorBounds = is$1(lastContextPosition.get(), 'node') ? getAnchorElementBounds(editor, lastElement.get()) : getSelectionBounds(editor);\n return contextToolbarBounds.height <= 0 || !isVerticalOverlap(anchorBounds, contextToolbarBounds);\n }\n };\n var close = function () {\n lastElement.clear();\n lastTrigger.clear();\n lastContextPosition.clear();\n InlineView.hide(contextbar);\n };\n var hideOrRepositionIfNecessary = function () {\n if (InlineView.isOpen(contextbar)) {\n var contextBarEle = contextbar.element;\n remove$6(contextBarEle, 'display');\n if (shouldContextToolbarHide()) {\n set$7(contextBarEle, 'display', 'none');\n } else {\n lastTrigger.set(0);\n InlineView.reposition(contextbar);\n }\n }\n };\n var wrapInPopDialog = function (toolbarSpec) {\n return {\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(function (comp) {\n editor.shortcuts.add('ctrl+F9', 'focus statusbar', function () {\n return Keying.focusIn(comp);\n });\n }),\n runOnDetached(function (_comp) {\n editor.shortcuts.remove('ctrl+F9');\n })\n ])\n ])\n };\n };\n var getScopes = cached(function () {\n return categorise(registryContextToolbars, function (toolbarApi) {\n var alloySpec = buildToolbar([toolbarApi]);\n emitWith(contextbar, forwardSlideEvent, { forwardContents: wrapInPopDialog(alloySpec) });\n });\n });\n var buildContextToolbarGroups = function (allButtons, ctx) {\n return identifyButtons(editor, {\n buttons: allButtons,\n toolbar: ctx.items,\n allowToolbarGroups: false\n }, extras, Optional.some(['form:']));\n };\n var buildContextFormGroups = function (ctx, providers) {\n return ContextForm.buildInitGroups(ctx, providers);\n };\n var buildToolbar = function (toolbars) {\n var buttons = editor.ui.registry.getAll().buttons;\n var scopes = getScopes();\n var allButtons = __assign(__assign({}, buttons), scopes.formNavigators);\n var toolbarType = getToolbarMode(editor) === ToolbarMode.scrolling ? ToolbarMode.scrolling : ToolbarMode.default;\n var initGroups = flatten(map$2(toolbars, function (ctx) {\n return ctx.type === 'contexttoolbar' ? buildContextToolbarGroups(allButtons, ctx) : buildContextFormGroups(ctx, sharedBackstage.providers);\n }));\n return renderToolbar({\n type: toolbarType,\n uid: generate$6('context-toolbar'),\n initGroups: initGroups,\n onEscape: Optional.none,\n cyclicKeying: true,\n providers: sharedBackstage.providers\n });\n };\n var getAnchor = function (position, element) {\n var anchorage = position === 'node' ? sharedBackstage.anchors.node(element) : sharedBackstage.anchors.cursor();\n var anchorLayout = getAnchorLayout(editor, position, isTouch(), {\n lastElement: lastElement.get,\n isReposition: function () {\n return is$1(lastTrigger.get(), 0);\n },\n getMode: function () {\n return Positioning.getMode(sink);\n }\n });\n return deepMerge(anchorage, anchorLayout);\n };\n var launchContext = function (toolbarApi, elem) {\n launchContextToolbar.cancel();\n if (!canLaunchToolbar()) {\n return;\n }\n var toolbarSpec = buildToolbar(toolbarApi);\n var position = toolbarApi[0].position;\n var anchor = getAnchor(position, elem);\n lastContextPosition.set(position);\n lastTrigger.set(1);\n var contextBarEle = contextbar.element;\n remove$6(contextBarEle, 'display');\n if (!isSameLaunchElement(elem)) {\n remove$2(contextBarEle, transitionClass);\n Positioning.reset(sink, contextbar);\n }\n InlineView.showWithinBounds(contextbar, wrapInPopDialog(toolbarSpec), {\n anchor: anchor,\n transition: {\n classes: [transitionClass],\n mode: 'placement'\n }\n }, function () {\n return Optional.some(getBounds());\n });\n elem.fold(lastElement.clear, lastElement.set);\n if (shouldContextToolbarHide()) {\n set$7(contextBarEle, 'display', 'none');\n }\n };\n var launchContextToolbar = last(function () {\n if (!editor.hasFocus() || editor.removed) {\n return;\n }\n if (has(contextbar.element, transitionClass)) {\n launchContextToolbar.throttle();\n } else {\n var scopes = getScopes();\n lookup$1(scopes, editor).fold(close, function (info) {\n launchContext(info.toolbars, Optional.some(info.elem));\n });\n }\n }, 17);\n editor.on('init', function () {\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, function (e) {\n var scopes = getScopes();\n get$e(scopes.lookupTable, e.toolbarKey).each(function (ctx) {\n launchContext([ctx], someIf(e.target !== editor, e.target));\n InlineView.getContent(contextbar).each(Keying.focusIn);\n });\n });\n editor.on('focusout', function (_e) {\n global$f.setEditorTimeout(editor, function () {\n if (search(sink.element).isNone() && search(contextbar.element).isNone()) {\n close();\n }\n }, 0);\n });\n editor.on('SwitchMode', function () {\n if (editor.mode.isReadOnly()) {\n close();\n }\n });\n editor.on('AfterProgressState', function (event) {\n if (event.state) {\n close();\n } else if (editor.hasFocus()) {\n launchContextToolbar.throttle();\n }\n });\n editor.on('NodeChange', function (_e) {\n search(contextbar.element).fold(launchContextToolbar.throttle, noop);\n });\n });\n };\n\n var register$6 = function (editor) {\n var 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, function (item) {\n editor.ui.registry.addToggleButton(item.name, {\n tooltip: item.text,\n icon: item.icon,\n onAction: onActionExecCommand(editor, item.cmd),\n onSetup: onSetupFormatToggle(editor, item.name)\n });\n });\n editor.ui.registry.addButton('alignnone', {\n tooltip: 'No alignment',\n icon: 'align-none',\n onAction: onActionExecCommand(editor, 'JustifyNone')\n });\n };\n\n var 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 var pattern = function () {\n var decimalDigits = '[0-9]+';\n var signedInteger = '[+-]?' + decimalDigits;\n var exponentPart = '[eE]' + signedInteger;\n var dot = '\\\\.';\n var opt = function (input) {\n return '(?:' + input + ')?';\n };\n var unsignedDecimalLiteral = [\n 'Infinity',\n decimalDigits + dot + opt(decimalDigits) + opt(exponentPart),\n dot + decimalDigits + opt(exponentPart),\n decimalDigits + opt(exponentPart)\n ].join('|');\n var float = '[+-]?(?:' + unsignedDecimalLiteral + ')';\n return new RegExp('^(' + float + ')(.*)$');\n }();\n var isUnit = function (unit, accepted) {\n return exists(accepted, function (acc) {\n return exists(units[acc], function (check) {\n return unit === check;\n });\n });\n };\n var parse = function (input, accepted) {\n var match = Optional.from(pattern.exec(input));\n return match.bind(function (array) {\n var value = Number(array[1]);\n var unitRaw = array[2];\n if (isUnit(unitRaw, accepted)) {\n return Optional.some({\n value: value,\n unit: unitRaw\n });\n } else {\n return Optional.none();\n }\n });\n };\n var normalise = function (input, accepted) {\n return parse(input, accepted).map(function (_a) {\n var value = _a.value, unit = _a.unit;\n return value + unit;\n });\n };\n\n var registerController = function (editor, spec) {\n var getMenuItems = function () {\n var options = spec.getOptions(editor);\n var initial = spec.getCurrent(editor).map(spec.hash);\n var current = value$1();\n return map$2(options, function (value) {\n return {\n type: 'togglemenuitem',\n text: spec.display(value),\n onSetup: function (api) {\n var setActive = function (active) {\n if (active) {\n current.on(function (oldApi) {\n return oldApi.setActive(false);\n });\n current.set(api);\n }\n api.setActive(active);\n };\n setActive(is$1(initial, spec.hash(value)));\n var unbindWatcher = spec.watcher(editor, value, setActive);\n return function () {\n current.clear();\n unbindWatcher();\n };\n },\n onAction: function () {\n return spec.setCurrent(editor, value);\n }\n };\n });\n };\n editor.ui.registry.addMenuButton(spec.name, {\n tooltip: spec.text,\n icon: spec.icon,\n fetch: function (callback) {\n return callback(getMenuItems());\n },\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 var lineHeightSpec = {\n name: 'lineheight',\n text: 'Line height',\n icon: 'line-height',\n getOptions: getLineHeightFormats,\n hash: function (input) {\n return normalise(input, [\n 'fixed',\n 'relative',\n 'empty'\n ]).getOr(input);\n },\n display: identity$1,\n watcher: function (editor, value, callback) {\n return editor.formatter.formatChanged('lineheight', callback, false, { value: value }).unbind;\n },\n getCurrent: function (editor) {\n return Optional.from(editor.queryCommandValue('LineHeight'));\n },\n setCurrent: function (editor, value) {\n return editor.execCommand('LineHeight', false, value);\n }\n };\n var languageSpec = function (editor) {\n var settingsOpt = Optional.from(getContentLanguages(editor));\n return settingsOpt.map(function (settings) {\n return {\n name: 'language',\n text: 'Language',\n icon: 'language',\n getOptions: constant$1(settings),\n hash: function (input) {\n return isUndefined(input.customCode) ? input.code : input.code + '/' + input.customCode;\n },\n display: function (input) {\n return input.title;\n },\n watcher: function (editor, value, callback) {\n return editor.formatter.formatChanged('lang', callback, false, {\n value: value.code,\n customValue: value.customCode\n }).unbind;\n },\n getCurrent: function (editor) {\n var node = SugarElement.fromDom(editor.selection.getNode());\n return closest$4(node, function (n) {\n return Optional.some(n).filter(isElement$2).bind(function (ele) {\n var codeOpt = getOpt(ele, 'lang');\n return codeOpt.map(function (code) {\n var customCode = getOpt(ele, 'data-mce-lang').getOrUndefined();\n return {\n code: code,\n customCode: customCode,\n title: ''\n };\n });\n });\n });\n },\n setCurrent: function (editor, lang) {\n return editor.execCommand('Lang', false, lang);\n },\n onToolbarSetup: function (api) {\n var unbinder = unbindable();\n api.setActive(editor.formatter.match('lang', {}, undefined, true));\n unbinder.set(editor.formatter.formatChanged('lang', api.setActive, true));\n return unbinder.clear;\n }\n };\n });\n };\n var register$5 = function (editor) {\n registerController(editor, lineHeightSpec);\n languageSpec(editor).each(function (spec) {\n return registerController(editor, spec);\n });\n };\n\n var register$4 = function (editor, backstage) {\n alignSelectMenu(editor, backstage);\n fontSelectMenu(editor, backstage);\n styleSelectMenu(editor, backstage);\n formatSelectMenu(editor, backstage);\n fontsizeSelectMenu(editor, backstage);\n };\n\n var onSetupOutdentState = function (editor) {\n return onSetupEvent(editor, 'NodeChange', function (api) {\n api.setDisabled(!editor.queryCommandState('outdent'));\n });\n };\n var registerButtons$2 = function (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 onAction: onActionExecCommand(editor, 'indent')\n });\n };\n var register$3 = function (editor) {\n registerButtons$2(editor);\n };\n\n var onActionToggleFormat = function (editor, fmt) {\n return function () {\n editor.execCommand('mceToggleFormat', false, fmt);\n };\n };\n var registerFormatButtons = function (editor) {\n global$5.each([\n {\n name: 'bold',\n text: 'Bold',\n icon: 'bold'\n },\n {\n name: 'italic',\n text: 'Italic',\n icon: 'italic'\n },\n {\n name: 'underline',\n text: 'Underline',\n icon: 'underline'\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 ], function (btn, _idx) {\n editor.ui.registry.addToggleButton(btn.name, {\n tooltip: btn.text,\n icon: btn.icon,\n onSetup: onSetupFormatToggle(editor, btn.name),\n onAction: onActionToggleFormat(editor, btn.name)\n });\n });\n for (var i = 1; i <= 6; i++) {\n var name_1 = 'h' + i;\n editor.ui.registry.addToggleButton(name_1, {\n text: name_1.toUpperCase(),\n tooltip: 'Heading ' + i,\n onSetup: onSetupFormatToggle(editor, name_1),\n onAction: onActionToggleFormat(editor, name_1)\n });\n }\n };\n var registerCommandButtons = function (editor) {\n global$5.each([\n {\n name: 'cut',\n text: 'Cut',\n action: 'Cut',\n icon: 'cut'\n },\n {\n name: 'copy',\n text: 'Copy',\n action: 'Copy',\n icon: 'copy'\n },\n {\n name: 'paste',\n text: 'Paste',\n action: 'Paste',\n icon: 'paste'\n },\n {\n name: 'help',\n text: 'Help',\n action: 'mceHelp',\n icon: 'help'\n },\n {\n name: 'selectall',\n text: 'Select all',\n action: 'SelectAll',\n icon: 'select-all'\n },\n {\n name: 'newdocument',\n text: 'New document',\n action: 'mceNewDocument',\n icon: 'new-document'\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 ], function (btn) {\n editor.ui.registry.addButton(btn.name, {\n tooltip: btn.text,\n icon: btn.icon,\n onAction: onActionExecCommand(editor, btn.action)\n });\n });\n };\n var registerCommandToggleButtons = function (editor) {\n global$5.each([{\n name: 'blockquote',\n text: 'Blockquote',\n action: 'mceBlockQuote',\n icon: 'quote'\n }], function (btn) {\n editor.ui.registry.addToggleButton(btn.name, {\n tooltip: btn.text,\n icon: btn.icon,\n onAction: onActionExecCommand(editor, btn.action),\n onSetup: onSetupFormatToggle(editor, btn.name)\n });\n });\n };\n var registerButtons$1 = function (editor) {\n registerFormatButtons(editor);\n registerCommandButtons(editor);\n registerCommandToggleButtons(editor);\n };\n var registerMenuItems$2 = function (editor) {\n global$5.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 shortcut: ''\n },\n {\n name: 'subscript',\n text: 'Subscript',\n action: 'Subscript',\n icon: 'subscript',\n shortcut: ''\n },\n {\n name: 'superscript',\n text: 'Superscript',\n action: 'Superscript',\n icon: 'superscript',\n shortcut: ''\n },\n {\n name: 'removeformat',\n text: 'Clear formatting',\n action: 'RemoveFormat',\n icon: 'remove-formatting',\n shortcut: ''\n },\n {\n name: 'newdocument',\n text: 'New document',\n action: 'mceNewDocument',\n icon: 'new-document',\n shortcut: ''\n },\n {\n name: 'cut',\n text: 'Cut',\n action: 'Cut',\n icon: 'cut',\n shortcut: 'Meta+X'\n },\n {\n name: 'copy',\n text: 'Copy',\n action: 'Copy',\n icon: 'copy',\n shortcut: 'Meta+C'\n },\n {\n name: 'paste',\n text: 'Paste',\n action: 'Paste',\n icon: 'paste',\n shortcut: 'Meta+V'\n },\n {\n name: 'selectall',\n text: 'Select all',\n action: 'SelectAll',\n icon: 'select-all',\n shortcut: 'Meta+A'\n }\n ], function (btn) {\n editor.ui.registry.addMenuItem(btn.name, {\n text: btn.text,\n icon: btn.icon,\n shortcut: btn.shortcut,\n onAction: onActionExecCommand(editor, btn.action)\n });\n });\n editor.ui.registry.addMenuItem('codeformat', {\n text: 'Code',\n icon: 'sourcecode',\n onAction: onActionToggleFormat(editor, 'code')\n });\n };\n var register$2 = function (editor) {\n registerButtons$1(editor);\n registerMenuItems$2(editor);\n };\n\n var onSetupUndoRedoState = function (editor, type) {\n return onSetupEvent(editor, 'Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', function (api) {\n api.setDisabled(editor.mode.isReadOnly() || !editor.undoManager[type]());\n });\n };\n var registerMenuItems$1 = function (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 var registerButtons = function (editor) {\n editor.ui.registry.addButton('undo', {\n tooltip: 'Undo',\n icon: 'undo',\n disabled: true,\n onSetup: onSetupUndoRedoState(editor, 'hasUndo'),\n onAction: onActionExecCommand(editor, 'undo')\n });\n editor.ui.registry.addButton('redo', {\n tooltip: 'Redo',\n icon: 'redo',\n disabled: true,\n onSetup: onSetupUndoRedoState(editor, 'hasRedo'),\n onAction: onActionExecCommand(editor, 'redo')\n });\n };\n var register$1 = function (editor) {\n registerMenuItems$1(editor);\n registerButtons(editor);\n };\n\n var onSetupVisualAidState = function (editor) {\n return onSetupEvent(editor, 'VisualAid', function (api) {\n api.setActive(editor.hasVisual);\n });\n };\n var registerMenuItems = function (editor) {\n editor.ui.registry.addToggleMenuItem('visualaid', {\n text: 'Visual aids',\n onSetup: onSetupVisualAidState(editor),\n onAction: onActionExecCommand(editor, 'mceToggleVisualAid')\n });\n };\n var registerToolbarButton = function (editor) {\n editor.ui.registry.addButton('visualaid', {\n tooltip: 'Visual aids',\n text: 'Visual aids',\n onAction: onActionExecCommand(editor, 'mceToggleVisualAid')\n });\n };\n var register = function (editor) {\n registerToolbarButton(editor);\n registerMenuItems(editor);\n };\n\n var setup$6 = function (editor, backstage) {\n register$6(editor);\n register$2(editor);\n register$4(editor, backstage);\n register$1(editor);\n register$a(editor);\n register(editor);\n register$3(editor);\n register$5(editor);\n };\n\n var nu = function (x, y) {\n return {\n type: 'makeshift',\n x: x,\n y: y\n };\n };\n var transpose = function (pos, dx, dy) {\n return nu(pos.x + dx, pos.y + dy);\n };\n var isTouchEvent = function (e) {\n return e.type === 'longpress' || e.type.indexOf('touch') === 0;\n };\n var fromPageXY = function (e) {\n if (isTouchEvent(e)) {\n var touch = e.touches[0];\n return nu(touch.pageX, touch.pageY);\n } else {\n return nu(e.pageX, e.pageY);\n }\n };\n var fromClientXY = function (e) {\n if (isTouchEvent(e)) {\n var touch = e.touches[0];\n return nu(touch.clientX, touch.clientY);\n } else {\n return nu(e.clientX, e.clientY);\n }\n };\n var transposeContentAreaContainer = function (element, pos) {\n var containerPos = global$b.DOM.getPos(element);\n return transpose(pos, containerPos.x, containerPos.y);\n };\n var getPointAnchor = function (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 var getSelectionAnchor = function (editor) {\n return {\n type: 'selection',\n root: SugarElement.fromDom(editor.selection.getNode())\n };\n };\n var getNodeAnchor = function (editor) {\n return {\n type: 'node',\n node: Optional.some(SugarElement.fromDom(editor.selection.getNode())),\n root: SugarElement.fromDom(editor.getBody())\n };\n };\n var getAnchorSpec$1 = function (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 var initAndShow$1 = function (editor, e, buildMenu, backstage, contextmenu, anchorType) {\n var items = buildMenu();\n var anchorSpec = getAnchorSpec$1(editor, e, anchorType);\n build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, false).map(function (menuData) {\n e.preventDefault();\n InlineView.showMenuAt(contextmenu, { anchor: anchorSpec }, {\n menu: { markers: markers('normal') },\n data: menuData\n });\n });\n };\n\n var layouts = {\n onLtr: function () {\n return [\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 },\n onRtl: function () {\n return [\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 };\n var bubbleSize = 12;\n var 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 var isTouchWithinSelection = function (editor, e) {\n var selection = editor.selection;\n if (selection.isCollapsed() || e.touches.length < 1) {\n return false;\n } else {\n var touch_1 = e.touches[0];\n var rng = selection.getRng();\n var rngRectOpt = getFirstRect(editor.getWin(), SimSelection.domRange(rng));\n return rngRectOpt.exists(function (rngRect) {\n return rngRect.left <= touch_1.clientX && rngRect.right >= touch_1.clientX && rngRect.top <= touch_1.clientY && rngRect.bottom >= touch_1.clientY;\n });\n }\n };\n var setupiOSOverrides = function (editor) {\n var originalSelection = editor.selection.getRng();\n var selectionReset = function () {\n global$f.setEditorTimeout(editor, function () {\n editor.selection.setRng(originalSelection);\n }, 10);\n unbindEventListeners();\n };\n editor.once('touchend', selectionReset);\n var preventMousedown = function (e) {\n e.preventDefault();\n e.stopImmediatePropagation();\n };\n editor.on('mousedown', preventMousedown, true);\n var clearSelectionReset = function () {\n return unbindEventListeners();\n };\n editor.once('longpresscancel', clearSelectionReset);\n var unbindEventListeners = function () {\n editor.off('touchend', selectionReset);\n editor.off('longpresscancel', clearSelectionReset);\n editor.off('mousedown', preventMousedown);\n };\n };\n var getAnchorSpec = function (editor, e, anchorType) {\n var anchorSpec = getAnchorSpec$1(editor, e, anchorType);\n var bubbleYOffset = anchorType === 'point' ? bubbleSize : 0;\n return __assign({\n bubble: nu$5(0, bubbleYOffset, bubbleAlignments),\n layouts: layouts,\n overrides: {\n maxWidthFunction: expandable(),\n maxHeightFunction: expandable$1()\n }\n }, anchorSpec);\n };\n var show = function (editor, e, items, backstage, contextmenu, anchorType, highlightImmediately) {\n var anchorSpec = getAnchorSpec(editor, e, anchorType);\n build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, true).map(function (menuData) {\n e.preventDefault();\n InlineView.showMenuWithinBounds(contextmenu, { anchor: anchorSpec }, {\n menu: {\n markers: markers('normal'),\n highlightImmediately: highlightImmediately\n },\n data: menuData,\n type: 'horizontal'\n }, function () {\n return Optional.some(getContextToolbarBounds(editor, backstage.shared, anchorType === 'node' ? 'node' : 'selection'));\n });\n editor.fire(hideContextToolbarEvent);\n });\n };\n var initAndShow = function (editor, e, buildMenu, backstage, contextmenu, anchorType) {\n var detection = detect$1();\n var isiOS = detection.os.isiOS();\n var isOSX = detection.os.isOSX();\n var isAndroid = detection.os.isAndroid();\n var isTouch = detection.deviceType.isTouch();\n var shouldHighlightImmediately = function () {\n return !(isAndroid || isiOS || isOSX && isTouch);\n };\n var open = function () {\n var items = buildMenu();\n show(editor, e, items, backstage, contextmenu, anchorType, shouldHighlightImmediately());\n };\n if ((isOSX || isiOS) && anchorType !== 'node') {\n var openiOS_1 = function () {\n setupiOSOverrides(editor);\n open();\n };\n if (isTouchWithinSelection(editor, e)) {\n openiOS_1();\n } else {\n editor.once('selectionchange', openiOS_1);\n editor.once('touchend', function () {\n return editor.off('selectionchange', openiOS_1);\n });\n }\n } else {\n open();\n }\n };\n\n var patchPipeConfig = function (config) {\n return typeof config === 'string' ? config.split(/[ ,]/) : config;\n };\n var shouldNeverUseNative = function (editor) {\n return editor.getParam('contextmenu_never_use_native', false, 'boolean');\n };\n var getMenuItems = function (editor, name, defaultItems) {\n var contextMenus = editor.ui.registry.getAll().contextMenus;\n return Optional.from(editor.getParam(name)).map(patchPipeConfig).getOrThunk(function () {\n return filter$2(patchPipeConfig(defaultItems), function (item) {\n return has$2(contextMenus, item);\n });\n });\n };\n var isContextMenuDisabled = function (editor) {\n return editor.getParam('contextmenu') === false;\n };\n var getContextMenu = function (editor) {\n return getMenuItems(editor, 'contextmenu', 'link linkchecker image imagetools table spellchecker configurepermanentpen');\n };\n var getAvoidOverlapSelector = function (editor) {\n return editor.getParam('contextmenu_avoid_overlap', '', 'string');\n };\n\n var isSeparator = function (item) {\n return isString(item) ? item === '|' : item.type === 'separator';\n };\n var separator = { type: 'separator' };\n var makeContextItem = function (item) {\n var commonMenuItem = function (item) {\n return {\n text: item.text,\n icon: item.icon,\n disabled: item.disabled,\n shortcut: item.shortcut\n };\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 __assign(__assign({ type: 'nestedmenuitem' }, commonMenuItem(item)), {\n getSubmenuItems: function () {\n var items = item.getSubmenuItems();\n if (isString(items)) {\n return items;\n } else {\n return map$2(items, makeContextItem);\n }\n }\n });\n default:\n return __assign(__assign({ type: 'menuitem' }, commonMenuItem(item)), { onAction: noarg(item.onAction) });\n }\n }\n };\n var addContextMenuGroup = function (xs, groupItems) {\n if (groupItems.length === 0) {\n return xs;\n }\n var lastMenuItem = last$2(xs).filter(function (item) {\n return !isSeparator(item);\n });\n var before = lastMenuItem.fold(function () {\n return [];\n }, function (_) {\n return [separator];\n });\n return xs.concat(before).concat(groupItems).concat([separator]);\n };\n var generateContextMenu = function (contextMenus, menuConfig, selectedElement) {\n var sections = foldl(menuConfig, function (acc, name) {\n return get$e(contextMenus, name.toLowerCase()).map(function (menu) {\n var items = menu.update(selectedElement);\n if (isString(items)) {\n return addContextMenuGroup(acc, items.split(' '));\n } else if (items.length > 0) {\n var allItems = map$2(items, makeContextItem);\n return addContextMenuGroup(acc, allItems);\n } else {\n return acc;\n }\n }).getOrThunk(function () {\n return acc.concat([name]);\n });\n }, []);\n if (sections.length > 0 && isSeparator(sections[sections.length - 1])) {\n sections.pop();\n }\n return sections;\n };\n var isNativeOverrideKeyEvent = function (editor, e) {\n return e.ctrlKey && !shouldNeverUseNative(editor);\n };\n var isTriggeredByKeyboard = function (editor, e) {\n return e.type !== 'longpress' && (e.button !== 2 || e.target === editor.getBody() && e.pointerType === '');\n };\n var getSelectedElement = function (editor, e) {\n return isTriggeredByKeyboard(editor, e) ? editor.selection.getStart(true) : e.target;\n };\n var getAnchorType = function (editor, e) {\n var selector = getAvoidOverlapSelector(editor);\n var anchorType = isTriggeredByKeyboard(editor, e) ? 'selection' : 'point';\n if (isNotEmpty(selector)) {\n var target = getSelectedElement(editor, e);\n var selectorExists = closest(SugarElement.fromDom(target), selector);\n return selectorExists ? 'node' : anchorType;\n } else {\n return anchorType;\n }\n };\n var setup$5 = function (editor, lazySink, backstage) {\n var detection = detect$1();\n var isTouch = detection.deviceType.isTouch;\n var contextmenu = build$1(InlineView.sketch({\n dom: { tag: 'div' },\n lazySink: lazySink,\n onEscape: function () {\n return editor.focus();\n },\n onShow: function () {\n return backstage.setContextMenuState(true);\n },\n onHide: function () {\n return backstage.setContextMenuState(false);\n },\n fireDismissalEventInstead: {},\n inlineBehaviours: derive$1([config('dismissContextMenu', [run$1(dismissRequested(), function (comp, _se) {\n Sandboxing.close(comp);\n editor.focus();\n })])])\n }));\n var hideContextMenu = function (_e) {\n return InlineView.hide(contextmenu);\n };\n var showContextMenu = function (e) {\n if (shouldNeverUseNative(editor)) {\n e.preventDefault();\n }\n if (isNativeOverrideKeyEvent(editor, e) || isContextMenuDisabled(editor)) {\n return;\n }\n var anchorType = getAnchorType(editor, e);\n var buildMenu = function () {\n var selectedElement = getSelectedElement(editor, e);\n var registry = editor.ui.registry.getAll();\n var menuConfig = getContextMenu(editor);\n return generateContextMenu(registry.contextMenus, menuConfig, selectedElement);\n };\n var initAndShow$2 = isTouch() ? initAndShow : initAndShow$1;\n initAndShow$2(editor, e, buildMenu, backstage, contextmenu, anchorType);\n };\n editor.on('init', function () {\n var hideEvents = 'ResizeEditor ScrollContent ScrollWindow longpresscancel' + (isTouch() ? '' : ' ResizeWindow');\n editor.on(hideEvents, hideContextMenu);\n editor.on('longpress contextmenu', showContextMenu);\n });\n };\n\n var 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 var subtract = function (change) {\n return function (point) {\n return point.translate(-change.left, -change.top);\n };\n };\n var add = function (change) {\n return function (point) {\n return point.translate(change.left, change.top);\n };\n };\n var transform = function (changes) {\n return function (x, y) {\n return foldl(changes, function (rest, f) {\n return f(rest);\n }, SugarPosition(x, y));\n };\n };\n var asFixed = function (coord, scroll, origin) {\n return coord.fold(transform([\n add(origin),\n subtract(scroll)\n ]), transform([subtract(scroll)]), transform([]));\n };\n var asAbsolute = function (coord, scroll, origin) {\n return coord.fold(transform([add(origin)]), transform([]), transform([add(scroll)]));\n };\n var asOffset = function (coord, scroll, origin) {\n return coord.fold(transform([]), transform([subtract(origin)]), transform([\n add(scroll),\n subtract(origin)\n ]));\n };\n var withinRange = function (coord1, coord2, xRange, yRange, scroll, origin) {\n var a1 = asAbsolute(coord1, scroll, origin);\n var a2 = asAbsolute(coord2, scroll, origin);\n return Math.abs(a1.left - a2.left) <= xRange && Math.abs(a1.top - a2.top) <= yRange;\n };\n var getDeltas = function (coord1, coord2, xRange, yRange, scroll, origin) {\n var a1 = asAbsolute(coord1, scroll, origin);\n var a2 = asAbsolute(coord2, scroll, origin);\n var left = Math.abs(a1.left - a2.left);\n var top = Math.abs(a1.top - a2.top);\n return SugarPosition(left, top);\n };\n var toStyles = function (coord, scroll, origin) {\n var stylesOpt = coord.fold(function (x, y) {\n return {\n position: Optional.some('absolute'),\n left: Optional.some(x + 'px'),\n top: Optional.some(y + 'px')\n };\n }, function (x, y) {\n return {\n position: Optional.some('absolute'),\n left: Optional.some(x - origin.left + 'px'),\n top: Optional.some(y - origin.top + 'px')\n };\n }, function (x, y) {\n return {\n position: Optional.some('fixed'),\n left: Optional.some(x + 'px'),\n top: Optional.some(y + 'px')\n };\n });\n return __assign({\n right: Optional.none(),\n bottom: Optional.none()\n }, stylesOpt);\n };\n var translate = function (coord, deltaX, deltaY) {\n return coord.fold(function (x, y) {\n return offset(x + deltaX, y + deltaY);\n }, function (x, y) {\n return absolute(x + deltaX, y + deltaY);\n }, function (x, y) {\n return fixed(x + deltaX, y + deltaY);\n });\n };\n var absorb = function (partialCoord, originalCoord, scroll, origin) {\n var absorbOne = function (stencil, nu) {\n return function (optX, optY) {\n var original = stencil(originalCoord, scroll, origin);\n return nu(optX.getOr(original.left), optY.getOr(original.top));\n };\n };\n return partialCoord.fold(absorbOne(asOffset, offset), absorbOne(asAbsolute, absolute), absorbOne(asFixed, fixed));\n };\n var offset = adt.offset;\n var absolute = adt.absolute;\n var fixed = adt.fixed;\n\n var parseAttrToInt = function (element, name) {\n var value = get$d(element, name);\n return isUndefined(value) ? NaN : parseInt(value, 10);\n };\n var get = function (component, snapsInfo) {\n var element = component.element;\n var x = parseAttrToInt(element, snapsInfo.leftAttr);\n var y = parseAttrToInt(element, snapsInfo.topAttr);\n return isNaN(x) || isNaN(y) ? Optional.none() : Optional.some(SugarPosition(x, y));\n };\n var set = function (component, snapsInfo, pt) {\n var element = component.element;\n set$8(element, snapsInfo.leftAttr, pt.left + 'px');\n set$8(element, snapsInfo.topAttr, pt.top + 'px');\n };\n var clear = function (component, snapsInfo) {\n var element = component.element;\n remove$7(element, snapsInfo.leftAttr);\n remove$7(element, snapsInfo.topAttr);\n };\n\n var getCoords = function (component, snapInfo, coord, delta) {\n return get(component, snapInfo).fold(function () {\n return coord;\n }, function (fixed$1) {\n return fixed(fixed$1.left + delta.left, fixed$1.top + delta.top);\n });\n };\n var moveOrSnap = function (component, snapInfo, coord, delta, scroll, origin) {\n var newCoord = getCoords(component, snapInfo, coord, delta);\n var snap = snapInfo.mustSnap ? findClosestSnap(component, snapInfo, newCoord, scroll, origin) : findSnap(component, snapInfo, newCoord, scroll, origin);\n var fixedCoord = asFixed(newCoord, scroll, origin);\n set(component, snapInfo, fixedCoord);\n return snap.fold(function () {\n return {\n coord: fixed(fixedCoord.left, fixedCoord.top),\n extra: Optional.none()\n };\n }, function (spanned) {\n return {\n coord: spanned.output,\n extra: spanned.extra\n };\n });\n };\n var stopDrag = function (component, snapInfo) {\n clear(component, snapInfo);\n };\n var findMatchingSnap = function (snaps, newCoord, scroll, origin) {\n return findMap(snaps, function (snap) {\n var sensor = snap.sensor;\n var 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 };\n var findClosestSnap = function (component, snapInfo, newCoord, scroll, origin) {\n var snaps = snapInfo.getSnapPoints(component);\n var matchSnap = findMatchingSnap(snaps, newCoord, scroll, origin);\n return matchSnap.orThunk(function () {\n var bestSnap = foldl(snaps, function (acc, snap) {\n var sensor = snap.sensor;\n var deltas = getDeltas(newCoord, sensor, snap.range.left, snap.range.top, scroll, origin);\n return acc.deltas.fold(function () {\n return {\n deltas: Optional.some(deltas),\n snap: Optional.some(snap)\n };\n }, function (bestDeltas) {\n var currAvg = (deltas.left + deltas.top) / 2;\n var 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(function (snap) {\n return {\n output: absorb(snap.output, newCoord, scroll, origin),\n extra: snap.extra\n };\n });\n });\n };\n var findSnap = function (component, snapInfo, newCoord, scroll, origin) {\n var snaps = snapInfo.getSnapPoints(component);\n return findMatchingSnap(snaps, newCoord, scroll, origin);\n };\n var snapTo$1 = function (snap, scroll, origin) {\n return {\n coord: absorb(snap.output, snap.output, scroll, origin),\n extra: snap.extra\n };\n };\n\n var snapTo = function (component, dragConfig, _state, snap) {\n var target = dragConfig.getTarget(component.element);\n if (dragConfig.repositionTarget) {\n var doc = owner$4(component.element);\n var scroll_1 = get$9(doc);\n var origin_1 = getOrigin(target);\n var snapPin = snapTo$1(snap, scroll_1, origin_1);\n var styles = toStyles(snapPin.coord, scroll_1, origin_1);\n setOptions(target, styles);\n }\n };\n\n var DraggingApis = /*#__PURE__*/Object.freeze({\n __proto__: null,\n snapTo: snapTo\n });\n\n var initialAttribute = 'data-initial-z-index';\n var resetZIndex = function (blocker) {\n parent(blocker.element).filter(isElement$2).each(function (root) {\n getOpt(root, initialAttribute).fold(function () {\n return remove$6(root, 'z-index');\n }, function (zIndex) {\n return set$7(root, 'z-index', zIndex);\n });\n remove$7(root, initialAttribute);\n });\n };\n var changeZIndex = function (blocker) {\n parent(blocker.element).filter(isElement$2).each(function (root) {\n getRaw(root, 'z-index').each(function (zindex) {\n set$8(root, initialAttribute, zindex);\n });\n set$7(root, 'z-index', get$c(blocker.element, 'z-index'));\n });\n };\n var instigate = function (anyComponent, blocker) {\n anyComponent.getSystem().addToGui(blocker);\n changeZIndex(blocker);\n };\n var discard = function (blocker) {\n resetZIndex(blocker);\n blocker.getSystem().removeFromGui(blocker);\n };\n var createComponent = function (component, blockerClass, blockerEvents) {\n return 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\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 var schema$6 = [\n defaulted('useFixed', never),\n required$1('blockerClass'),\n defaulted('getTarget', identity$1),\n defaulted('onDrag', noop),\n defaulted('repositionTarget', true),\n defaulted('onDrop', noop),\n defaultedFunction('getBounds', win),\n SnapSchema\n ];\n\n var getCurrentCoord = function (target) {\n return lift3(getRaw(target, 'left'), getRaw(target, 'top'), getRaw(target, 'position'), function (left, top, position) {\n var nu = position === 'fixed' ? fixed : offset;\n return nu(parseInt(left, 10), parseInt(top, 10));\n }).getOrThunk(function () {\n var location = absolute$3(target);\n return absolute(location.left, location.top);\n });\n };\n var clampCoords = function (component, coords, scroll, origin, startData) {\n var bounds = startData.bounds;\n var absoluteCoord = asAbsolute(coords, scroll, origin);\n var newX = clamp$1(absoluteCoord.left, bounds.x, bounds.x + bounds.width - startData.width);\n var newY = clamp$1(absoluteCoord.top, bounds.y, bounds.y + bounds.height - startData.height);\n var newCoords = absolute(newX, newY);\n return coords.fold(function () {\n var offset$1 = asOffset(newCoords, scroll, origin);\n return offset(offset$1.left, offset$1.top);\n }, constant$1(newCoords), function () {\n var fixed$1 = asFixed(newCoords, scroll, origin);\n return fixed(fixed$1.left, fixed$1.top);\n });\n };\n var calcNewCoord = function (component, optSnaps, currentCoord, scroll, origin, delta, startData) {\n var newCoord = optSnaps.fold(function () {\n var translated = translate(currentCoord, delta.left, delta.top);\n var fixedCoord = asFixed(translated, scroll, origin);\n return fixed(fixedCoord.left, fixedCoord.top);\n }, function (snapInfo) {\n var snapping = moveOrSnap(component, snapInfo, currentCoord, delta, scroll, origin);\n snapping.extra.each(function (extra) {\n snapInfo.onSensor(component, extra);\n });\n return snapping.coord;\n });\n return clampCoords(component, newCoord, scroll, origin, startData);\n };\n var dragBy = function (component, dragConfig, startData, delta) {\n var target = dragConfig.getTarget(component.element);\n if (dragConfig.repositionTarget) {\n var doc = owner$4(component.element);\n var scroll_1 = get$9(doc);\n var origin_1 = getOrigin(target);\n var currentCoord = getCurrentCoord(target);\n var newCoord = calcNewCoord(component, dragConfig.snaps, currentCoord, scroll_1, origin_1, delta, startData);\n var styles = toStyles(newCoord, scroll_1, origin_1);\n setOptions(target, styles);\n }\n dragConfig.onDrag(component, target, delta);\n };\n\n var calcStartData = function (dragConfig, comp) {\n return {\n bounds: dragConfig.getBounds(),\n height: getOuter$2(comp.element),\n width: getOuter$1(comp.element)\n };\n };\n var move = function (component, dragConfig, dragState, dragMode, event) {\n var delta = dragState.update(dragMode, event);\n var dragStartData = dragState.getStartData().getOrThunk(function () {\n return calcStartData(dragConfig, component);\n });\n delta.each(function (dlt) {\n dragBy(component, dragConfig, dragStartData, dlt);\n });\n };\n var stop = function (component, blocker, dragConfig, dragState) {\n blocker.each(discard);\n dragConfig.snaps.each(function (snapInfo) {\n stopDrag(component, snapInfo);\n });\n var target = dragConfig.getTarget(component.element);\n dragState.reset();\n dragConfig.onDrop(component, target);\n };\n var handlers = function (events) {\n return function (dragConfig, dragState) {\n var updateStartState = function (comp) {\n dragState.setStartData(calcStartData(dragConfig, comp));\n };\n return derive$2(__spreadArray([run$1(windowScroll(), function (comp) {\n dragState.getStartData().each(function () {\n return updateStartState(comp);\n });\n })], events(dragConfig, dragState, updateStartState), true));\n };\n };\n\n var init$2 = function (dragApi) {\n return derive$2([\n run$1(mousedown(), dragApi.forceDrop),\n run$1(mouseup(), dragApi.drop),\n run$1(mousemove(), function (comp, simulatedEvent) {\n dragApi.move(simulatedEvent.event);\n }),\n run$1(mouseout(), dragApi.delayDrop)\n ]);\n };\n\n var getData$1 = function (event) {\n return Optional.from(SugarPosition(event.x, event.y));\n };\n var getDelta$1 = function (old, nu) {\n return SugarPosition(nu.left - old.left, nu.top - old.top);\n };\n\n var MouseData = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getData: getData$1,\n getDelta: getDelta$1\n });\n\n var events$2 = function (dragConfig, dragState, updateStartState) {\n return [run$1(mousedown(), function (component, simulatedEvent) {\n var raw = simulatedEvent.event.raw;\n if (raw.button !== 0) {\n return;\n }\n simulatedEvent.stop();\n var stop$1 = function () {\n return stop(component, Optional.some(blocker), dragConfig, dragState);\n };\n var delayDrop = DelayedFunction(stop$1, 200);\n var dragApi = {\n drop: stop$1,\n delayDrop: delayDrop.schedule,\n forceDrop: stop$1,\n move: function (event) {\n delayDrop.cancel();\n move(component, dragConfig, dragState, MouseData, event);\n }\n };\n var blocker = createComponent(component, dragConfig.blockerClass, init$2(dragApi));\n var start = function () {\n updateStartState(component);\n instigate(component, blocker);\n };\n start();\n })];\n };\n var schema$5 = __spreadArray(__spreadArray([], schema$6, true), [output$1('dragger', { handlers: handlers(events$2) })], false);\n\n var init$1 = function (dragApi) {\n return derive$2([\n run$1(touchstart(), dragApi.forceDrop),\n run$1(touchend(), dragApi.drop),\n run$1(touchcancel(), dragApi.drop),\n run$1(touchmove(), function (comp, simulatedEvent) {\n dragApi.move(simulatedEvent.event);\n })\n ]);\n };\n\n var getDataFrom = function (touches) {\n var touch = touches[0];\n return Optional.some(SugarPosition(touch.clientX, touch.clientY));\n };\n var getData = function (event) {\n var raw = event.raw;\n var touches = raw.touches;\n return touches.length === 1 ? getDataFrom(touches) : Optional.none();\n };\n var getDelta = function (old, nu) {\n return SugarPosition(nu.left - old.left, nu.top - old.top);\n };\n\n var TouchData = /*#__PURE__*/Object.freeze({\n __proto__: null,\n getData: getData,\n getDelta: getDelta\n });\n\n var events$1 = function (dragConfig, dragState, updateStartState) {\n var blockerSingleton = value$1();\n var stopBlocking = function (component) {\n stop(component, blockerSingleton.get(), dragConfig, dragState);\n blockerSingleton.clear();\n };\n return [\n run$1(touchstart(), function (component, simulatedEvent) {\n simulatedEvent.stop();\n var stop = function () {\n return stopBlocking(component);\n };\n var dragApi = {\n drop: stop,\n delayDrop: noop,\n forceDrop: stop,\n move: function (event) {\n move(component, dragConfig, dragState, TouchData, event);\n }\n };\n var blocker = createComponent(component, dragConfig.blockerClass, init$1(dragApi));\n blockerSingleton.set(blocker);\n var start = function () {\n updateStartState(component);\n instigate(component, blocker);\n };\n start();\n }),\n run$1(touchmove(), function (component, simulatedEvent) {\n simulatedEvent.stop();\n move(component, dragConfig, dragState, TouchData, simulatedEvent.event);\n }),\n run$1(touchend(), function (component, simulatedEvent) {\n simulatedEvent.stop();\n stopBlocking(component);\n }),\n run$1(touchcancel(), stopBlocking)\n ];\n };\n var schema$4 = __spreadArray(__spreadArray([], schema$6, true), [output$1('dragger', { handlers: handlers(events$1) })], false);\n\n var events = function (dragConfig, dragState, updateStartState) {\n return __spreadArray(__spreadArray([], events$2(dragConfig, dragState, updateStartState), true), events$1(dragConfig, dragState, updateStartState), true);\n };\n var schema$3 = __spreadArray(__spreadArray([], schema$6, true), [output$1('dragger', { handlers: handlers(events) })], false);\n\n var mouse = schema$5;\n var touch = schema$4;\n var 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 var init = function () {\n var previous = Optional.none();\n var startData = Optional.none();\n var reset = function () {\n previous = Optional.none();\n startData = Optional.none();\n };\n var calculateDelta = function (mode, nu) {\n var result = previous.map(function (old) {\n return mode.getDelta(old, nu);\n });\n previous = Optional.some(nu);\n return result;\n };\n var update = function (mode, dragEvent) {\n return mode.getData(dragEvent).bind(function (nuData) {\n return calculateDelta(mode, nuData);\n });\n };\n var setStartData = function (data) {\n startData = Optional.some(data);\n };\n var getStartData = function () {\n return startData;\n };\n var readState = constant$1({});\n return nu$8({\n readState: readState,\n reset: reset,\n update: update,\n getStartData: getStartData,\n setStartData: setStartData\n });\n };\n\n var DragState = /*#__PURE__*/Object.freeze({\n __proto__: null,\n init: init\n });\n\n var Dragging = createModes({\n branchKey: 'mode',\n branches: DraggingBranches,\n name: 'dragging',\n active: {\n events: function (dragConfig, dragState) {\n var dragger = dragConfig.dragger;\n return dragger.handlers(dragConfig, dragState);\n }\n },\n extra: {\n snap: function (sConfig) {\n return {\n sensor: sConfig.sensor,\n range: sConfig.range,\n output: sConfig.output,\n extra: Optional.from(sConfig.extra)\n };\n }\n },\n state: DragState,\n apis: DraggingApis\n });\n\n var snapWidth = 40;\n var snapOffset = snapWidth / 2;\n var calcSnap = function (selectorOpt, td, x, y, width, height) {\n return selectorOpt.fold(function () {\n return 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: td }\n });\n }, function (selectorHandle) {\n var sensorLeft = x - snapOffset;\n var sensorTop = y - snapOffset;\n var sensorWidth = snapWidth;\n var sensorHeight = snapWidth;\n var 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: td }\n });\n });\n };\n var getSnapsConfig = function (getSnapPoints, cell, onChange) {\n var isSameCell = function (cellOpt, td) {\n return cellOpt.exists(function (currentTd) {\n return eq(currentTd, td);\n });\n };\n return {\n getSnapPoints: getSnapPoints,\n leftAttr: 'data-drag-left',\n topAttr: 'data-drag-top',\n onSensor: function (component, extra) {\n var td = extra.td;\n if (!isSameCell(cell.get(), td)) {\n cell.set(td);\n onChange(td);\n }\n },\n mustSnap: true\n };\n };\n var createSelector = function (snaps) {\n return 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: 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 };\n var setup$4 = function (editor, sink) {\n var tlTds = Cell([]);\n var brTds = Cell([]);\n var isVisible = Cell(false);\n var startCell = value$1();\n var finishCell = value$1();\n var getTopLeftSnap = function (td) {\n var box = absolute$2(td);\n return calcSnap(memTopLeft.getOpt(sink), td, box.x, box.y, box.width, box.height);\n };\n var getTopLeftSnaps = function () {\n return map$2(tlTds.get(), function (td) {\n return getTopLeftSnap(td);\n });\n };\n var getBottomRightSnap = function (td) {\n var box = absolute$2(td);\n return calcSnap(memBottomRight.getOpt(sink), td, box.right, box.bottom, box.width, box.height);\n };\n var getBottomRightSnaps = function () {\n return map$2(brTds.get(), function (td) {\n return getBottomRightSnap(td);\n });\n };\n var topLeftSnaps = getSnapsConfig(getTopLeftSnaps, startCell, function (start) {\n finishCell.get().each(function (finish) {\n editor.fire('TableSelectorChange', {\n start: start,\n finish: finish\n });\n });\n });\n var bottomRightSnaps = getSnapsConfig(getBottomRightSnaps, finishCell, function (finish) {\n startCell.get().each(function (start) {\n editor.fire('TableSelectorChange', {\n start: start,\n finish: finish\n });\n });\n });\n var memTopLeft = createSelector(topLeftSnaps);\n var memBottomRight = createSelector(bottomRightSnaps);\n var topLeft = build$1(memTopLeft.asSpec());\n var bottomRight = build$1(memBottomRight.asSpec());\n var showOrHideHandle = function (selector, cell, isAbove, isBelow) {\n var cellRect = cell.dom.getBoundingClientRect();\n remove$6(selector.element, 'display');\n var viewportHeight = defaultView(SugarElement.fromDom(editor.getBody())).dom.innerHeight;\n var aboveViewport = isAbove(cellRect);\n var belowViewport = isBelow(cellRect, viewportHeight);\n if (aboveViewport || belowViewport) {\n set$7(selector.element, 'display', 'none');\n }\n };\n var snapTo = function (selector, cell, getSnapConfig, pos) {\n var snap = getSnapConfig(cell);\n Dragging.snapTo(selector, snap);\n var isAbove = function (rect) {\n return rect[pos] < 0;\n };\n var isBelow = function (rect, viewportHeight) {\n return rect[pos] > viewportHeight;\n };\n showOrHideHandle(selector, cell, isAbove, isBelow);\n };\n var snapTopLeft = function (cell) {\n return snapTo(topLeft, cell, getTopLeftSnap, 'top');\n };\n var snapLastTopLeft = function () {\n return startCell.get().each(snapTopLeft);\n };\n var snapBottomRight = function (cell) {\n return snapTo(bottomRight, cell, getBottomRightSnap, 'bottom');\n };\n var snapLastBottomRight = function () {\n return finishCell.get().each(snapBottomRight);\n };\n if (detect$1().deviceType.isTouch()) {\n editor.on('TableSelectionChange', function (e) {\n if (!isVisible.get()) {\n attach(sink, topLeft);\n attach(sink, bottomRight);\n isVisible.set(true);\n }\n startCell.set(e.start);\n finishCell.set(e.finish);\n e.otherCells.each(function (otherCells) {\n tlTds.set(otherCells.upOrLeftCells);\n brTds.set(otherCells.downOrRightCells);\n snapTopLeft(e.start);\n snapBottomRight(e.finish);\n });\n });\n editor.on('ResizeEditor ResizeWindow ScrollContent', function () {\n snapLastTopLeft();\n snapLastBottomRight();\n });\n editor.on('TableSelectionClear', function () {\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 isHidden = function (elm) {\n if (elm.nodeType === 1) {\n if (elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus')) {\n return true;\n }\n if (elm.getAttribute('data-mce-type') === 'bookmark') {\n return true;\n }\n }\n return false;\n };\n var renderElementPath = function (editor, settings, providersBackstage) {\n if (!settings.delimiter) {\n settings.delimiter = '\\xBB';\n }\n var getDataPath = function (data) {\n var parts = data || [];\n var newPathElements = map$2(parts, function (part, index) {\n return Button.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__path-item'],\n attributes: {\n 'role': 'button',\n 'data-index': index,\n 'tab-index': -1,\n 'aria-level': index + 1\n },\n innerHtml: part.name\n },\n action: function (_btn) {\n editor.focus();\n editor.selection.select(part.element);\n editor.nodeChanged();\n },\n buttonBehaviours: derive$1([\n DisablingConfigs.button(providersBackstage.isDisabled),\n receivingConfig()\n ])\n });\n });\n var divider = {\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__path-divider'],\n attributes: { 'aria-hidden': true },\n innerHtml: ' ' + settings.delimiter + ' '\n }\n };\n return foldl(newPathElements.slice(1), function (acc, element) {\n var newAcc = acc;\n newAcc.push(divider);\n newAcc.push(element);\n return newAcc;\n }, [newPathElements[0]]);\n };\n var updatePath = function (parents) {\n var newPath = [];\n var i = parents.length;\n while (i-- > 0) {\n var parent_1 = parents[i];\n if (parent_1.nodeType === 1 && !isHidden(parent_1)) {\n var args = editor.fire('ResolveName', {\n name: parent_1.nodeName.toLowerCase(),\n target: parent_1\n });\n if (!args.isDefaultPrevented()) {\n newPath.push({\n name: args.name,\n element: parent_1\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 receivingConfig(),\n Tabstopping.config({}),\n Replacing.config({}),\n config('elementPathEvents', [runOnAttached(function (comp, _e) {\n editor.shortcuts.add('alt+F11', 'focus statusbar elementpath', function () {\n return Keying.focusIn(comp);\n });\n editor.on('NodeChange', function (e) {\n var newPath = updatePath(e.parents);\n if (newPath.length > 0) {\n Replacing.set(comp, getDataPath(newPath));\n } else {\n Replacing.set(comp, []);\n }\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 var getDimensions = function (editor, deltas, resizeType, originalHeight, originalWidth) {\n var dimensions = {};\n dimensions.height = calcCappedSize(originalHeight + deltas.top, getMinHeightSetting(editor), getMaxHeightSetting(editor));\n if (resizeType === ResizeTypes.Both) {\n dimensions.width = calcCappedSize(originalWidth + deltas.left, getMinWidthSetting(editor), getMaxWidthSetting(editor));\n }\n return dimensions;\n };\n var resize = function (editor, deltas, resizeType) {\n var container = SugarElement.fromDom(editor.getContainer());\n var dimensions = getDimensions(editor, deltas, resizeType, get$b(container), get$a(container));\n each(dimensions, function (val, dim) {\n return set$7(container, dim, numToPx(val));\n });\n fireResizeEditor(editor);\n };\n\n var getResizeType = function (editor) {\n var fallback = !editor.hasPlugin('autoresize');\n var resize = editor.getParam('resize', fallback);\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 var keyboardHandler = function (editor, resizeType, x, y) {\n var scale = 20;\n var delta = SugarPosition(x * scale, y * scale);\n resize(editor, delta, resizeType);\n return Optional.some(true);\n };\n var renderResizeHandler = function (editor, providersBackstage) {\n var resizeType = getResizeType(editor);\n if (resizeType === ResizeTypes.None) {\n return Optional.none();\n }\n return Optional.some(render$3('resize-handle', {\n tag: 'div',\n classes: ['tox-statusbar__resize-handle'],\n attributes: { title: providersBackstage.translate('Resize') },\n behaviours: [\n Dragging.config({\n mode: 'mouse',\n repositionTarget: false,\n onDrag: function (_comp, _target, delta) {\n return resize(editor, delta, resizeType);\n },\n blockerClass: 'tox-blocker'\n }),\n Keying.config({\n mode: 'special',\n onLeft: function () {\n return keyboardHandler(editor, resizeType, -1, 0);\n },\n onRight: function () {\n return keyboardHandler(editor, resizeType, 1, 0);\n },\n onUp: function () {\n return keyboardHandler(editor, resizeType, 0, -1);\n },\n onDown: function () {\n return keyboardHandler(editor, resizeType, 0, 1);\n }\n }),\n Tabstopping.config({}),\n Focusing.config({})\n ]\n }, providersBackstage.icons));\n };\n\n var renderWordCount = function (editor, providersBackstage) {\n var _a;\n var replaceCountText = function (comp, count, mode) {\n return Replacing.set(comp, [text$1(providersBackstage.translate([\n '{0} ' + mode,\n count[mode]\n ]))]);\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 receivingConfig(),\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(function (comp) {\n var currentVal = Representing.getValue(comp);\n var 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(function (comp) {\n editor.on('wordCountUpdate', function (e) {\n var mode = Representing.getValue(comp).mode;\n Representing.setValue(comp, {\n mode: mode,\n count: e.wordCount\n });\n replaceCountText(comp, e.wordCount, mode);\n });\n })\n ])\n ]),\n eventOrder: (_a = {}, _a[execute$5()] = [\n 'disabling',\n 'alloy.base.behaviour',\n 'wordcount-events'\n ], _a)\n });\n };\n\n var renderStatusbar = function (editor, providersBackstage) {\n var renderBranding = function () {\n var label = global$e.translate([\n 'Powered by {0}',\n 'Tiny'\n ]);\n var linkHtml = '' + label + '';\n return {\n dom: {\n tag: 'span',\n classes: ['tox-statusbar__branding'],\n innerHtml: linkHtml\n }\n };\n };\n var getTextComponents = function () {\n var components = [];\n if (editor.getParam('elementpath', true, 'boolean')) {\n components.push(renderElementPath(editor, {}, providersBackstage));\n }\n if (editor.hasPlugin('wordcount')) {\n components.push(renderWordCount(editor, providersBackstage));\n }\n if (editor.getParam('branding', true, 'boolean')) {\n components.push(renderBranding());\n }\n if (components.length > 0) {\n return [{\n dom: {\n tag: 'div',\n classes: ['tox-statusbar__text-container']\n },\n components: components\n }];\n }\n return [];\n };\n var getComponents = function () {\n var components = getTextComponents();\n var 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 var setup$3 = function (editor) {\n var _a;\n var isInline = editor.inline;\n var mode = isInline ? Inline : Iframe;\n var header = isStickyToolbar(editor) ? StickyHeader : StaticHeader;\n var lazyOuterContainer = Optional.none();\n var platform = detect$1();\n var isIE = platform.browser.isIE();\n var platformClasses = isIE ? ['tox-platform-ie'] : [];\n var isTouch = platform.deviceType.isTouch();\n var touchPlatformClass = 'tox-platform-touch';\n var deviceClasses = isTouch ? [touchPlatformClass] : [];\n var isToolbarBottom = isToolbarLocationBottom(editor);\n var uiContainer = getUiContainer(editor);\n var dirAttributes = global$e.isRtl() ? { attributes: { dir: 'rtl' } } : {};\n var verticalDirAttributes = { attributes: (_a = {}, _a[Attribute] = isToolbarBottom ? AttributeValue.BottomToTop : AttributeValue.TopToBottom, _a) };\n var lazyHeader = function () {\n return lazyOuterContainer.bind(OuterContainer.getHeader);\n };\n var isHeaderDocked = function () {\n return header.isDocked(lazyHeader);\n };\n var resizeUiMothership = function () {\n set$7(uiMothership.element, 'width', document.body.clientWidth + 'px');\n };\n var makeSinkDefinition = function () {\n var isGridUiContainer = eq(body(), uiContainer) && get$c(uiContainer, 'display') === 'grid';\n var sinkSpec = {\n dom: __assign({\n tag: 'div',\n classes: [\n 'tox',\n 'tox-silver-sink',\n 'tox-tinymce-aux'\n ].concat(platformClasses).concat(deviceClasses)\n }, dirAttributes),\n behaviours: derive$1([Positioning.config({\n useFixed: function () {\n return isHeaderDocked();\n }\n })])\n };\n var reactiveWidthSpec = {\n dom: { styles: { width: document.body.clientWidth + 'px' } },\n events: derive$2([run$1(windowResize(), resizeUiMothership)])\n };\n return deepMerge(sinkSpec, isGridUiContainer ? reactiveWidthSpec : {});\n };\n var sink = build$1(makeSinkDefinition());\n var lazySink = function () {\n return Result.value(sink);\n };\n var memAnchorBar = record({\n dom: {\n tag: 'div',\n classes: ['tox-anchorbar']\n }\n });\n var lazyAnchorBar = function () {\n return lazyOuterContainer.bind(function (container) {\n return memAnchorBar.getOpt(container);\n }).getOrDie('Could not find a anchor bar element');\n };\n var lazyToolbar = function () {\n return lazyOuterContainer.bind(function (container) {\n return OuterContainer.getToolbar(container);\n }).getOrDie('Could not find more toolbar element');\n };\n var lazyThrobber = function () {\n return lazyOuterContainer.bind(function (container) {\n return OuterContainer.getThrobber(container);\n }).getOrDie('Could not find throbber element');\n };\n var backstage = init$7(sink, editor, lazyAnchorBar);\n var partMenubar = OuterContainer.parts.menubar({\n dom: {\n tag: 'div',\n classes: ['tox-menubar']\n },\n backstage: backstage,\n onEscape: function () {\n editor.focus();\n }\n });\n var toolbarMode = getToolbarMode(editor);\n var partToolbar = OuterContainer.parts.toolbar(__assign({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar']\n },\n getSink: lazySink,\n providers: backstage.shared.providers,\n onEscape: function () {\n editor.focus();\n },\n type: toolbarMode,\n lazyToolbar: lazyToolbar,\n lazyHeader: function () {\n return lazyHeader().getOrDie('Could not find header element');\n }\n }, verticalDirAttributes));\n var partMultipleToolbar = OuterContainer.parts['multiple-toolbar']({\n dom: {\n tag: 'div',\n classes: ['tox-toolbar-overlord']\n },\n providers: backstage.shared.providers,\n onEscape: function () {\n editor.focus();\n },\n type: toolbarMode\n });\n var partSocket = OuterContainer.parts.socket({\n dom: {\n tag: 'div',\n classes: ['tox-edit-area']\n }\n });\n var partSidebar = OuterContainer.parts.sidebar({\n dom: {\n tag: 'div',\n classes: ['tox-sidebar']\n }\n });\n var partThrobber = OuterContainer.parts.throbber({\n dom: {\n tag: 'div',\n classes: ['tox-throbber']\n },\n backstage: backstage\n });\n var sb = editor.getParam('statusbar', true, 'boolean');\n var statusbar = sb && !isInline ? Optional.some(renderStatusbar(editor, backstage.shared.providers)) : Optional.none();\n var socketSidebarContainer = {\n dom: {\n tag: 'div',\n classes: ['tox-sidebar-wrap']\n },\n components: [\n partSocket,\n partSidebar\n ]\n };\n var hasMultipleToolbar = isMultipleToolbars(editor);\n var hasToolbar = isToolbarEnabled(editor);\n var hasMenubar = isMenubarEnabled(editor);\n var getPartToolbar = function () {\n if (hasMultipleToolbar) {\n return [partMultipleToolbar];\n } else if (hasToolbar) {\n return [partToolbar];\n } else {\n return [];\n }\n };\n var partHeader = OuterContainer.parts.header({\n dom: __assign({\n tag: 'div',\n classes: ['tox-editor-header']\n }, verticalDirAttributes),\n components: flatten([\n hasMenubar ? [partMenubar] : [],\n getPartToolbar(),\n useFixedContainer(editor) ? [] : [memAnchorBar.asSpec()]\n ]),\n sticky: isStickyToolbar(editor),\n editor: editor,\n sharedBackstage: backstage.shared\n });\n var editorComponents = flatten([\n isToolbarBottom ? [] : [partHeader],\n isInline ? [] : [socketSidebarContainer],\n isToolbarBottom ? [partHeader] : []\n ]);\n var editorContainer = {\n dom: {\n tag: 'div',\n classes: ['tox-editor-container']\n },\n components: editorComponents\n };\n var containerComponents = flatten([\n [editorContainer],\n isInline ? [] : statusbar.toArray(),\n [partThrobber]\n ]);\n var isHidden = isDistractionFree(editor);\n var attributes = __assign(__assign({ role: 'application' }, global$e.isRtl() ? { dir: 'rtl' } : {}), isHidden ? { 'aria-hidden': 'true' } : {});\n var 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).concat(platformClasses),\n styles: __assign({ visibility: 'hidden' }, isHidden ? {\n opacity: '0',\n border: '0'\n } : {}),\n attributes: attributes\n },\n components: containerComponents,\n behaviours: derive$1([\n receivingConfig(),\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 lazyOuterContainer = Optional.some(outerContainer);\n editor.shortcuts.add('alt+F9', 'focus menubar', function () {\n OuterContainer.focusMenubar(outerContainer);\n });\n editor.shortcuts.add('alt+F10', 'focus toolbar', function () {\n OuterContainer.focusToolbar(outerContainer);\n });\n editor.addCommand('ToggleToolbarDrawer', function () {\n OuterContainer.toggleToolbarDrawer(outerContainer);\n });\n editor.addQueryStateHandler('ToggleToolbarDrawer', function () {\n return OuterContainer.isToolbarDrawerToggled(outerContainer);\n });\n var mothership = takeover(outerContainer);\n var uiMothership = takeover(sink);\n setup$b(editor, mothership, uiMothership);\n var getUi = function () {\n var channels = {\n broadcastAll: uiMothership.broadcast,\n broadcastOn: uiMothership.broadcastOn,\n register: noop\n };\n return { channels: channels };\n };\n var setEditorSize = function () {\n var parsedHeight = numToPx(getHeightWithFallback(editor));\n var parsedWidth = numToPx(getWidthWithFallback(editor));\n if (!editor.inline) {\n if (isValidValue('div', 'width', parsedWidth)) {\n set$7(outerContainer.element, 'width', parsedWidth);\n }\n if (isValidValue('div', 'height', parsedHeight)) {\n set$7(outerContainer.element, 'height', parsedHeight);\n } else {\n set$7(outerContainer.element, 'height', '200px');\n }\n }\n return parsedHeight;\n };\n var renderUI = function () {\n header.setup(editor, backstage.shared, lazyHeader);\n setup$6(editor, backstage);\n setup$5(editor, lazySink, backstage);\n setup$8(editor);\n setup$7(editor, lazyThrobber, backstage.shared);\n map$1(getToolbarGroups(editor), function (toolbarGroupButtonConfig, name) {\n editor.ui.registry.addGroupToolbarButton(name, toolbarGroupButtonConfig);\n });\n var _a = editor.ui.registry.getAll(), buttons = _a.buttons, menuItems = _a.menuItems, contextToolbars = _a.contextToolbars, sidebars = _a.sidebars;\n var toolbarOpt = getMultipleToolbarsSetting(editor);\n var rawUiConfig = {\n menuItems: menuItems,\n menus: getMenus(editor),\n menubar: getMenubar(editor),\n toolbar: toolbarOpt.getOrThunk(function () {\n return getToolbar(editor);\n }),\n allowToolbarGroups: toolbarMode === ToolbarMode.floating,\n buttons: buttons,\n sidebar: sidebars\n };\n register$7(editor, contextToolbars, sink, { backstage: backstage });\n setup$4(editor, sink);\n var elm = editor.getElement();\n var height = setEditorSize();\n var uiComponents = {\n mothership: mothership,\n uiMothership: uiMothership,\n outerContainer: outerContainer\n };\n var args = {\n targetNode: elm,\n height: height\n };\n return mode.render(editor, uiComponents, rawUiConfig, backstage, args);\n };\n return {\n mothership: mothership,\n uiMothership: uiMothership,\n backstage: backstage,\n renderUI: renderUI,\n getUi: getUi\n };\n };\n\n var describedBy = function (describedElement, describeElement) {\n var describeId = Optional.from(get$d(describedElement, 'id')).fold(function () {\n var id = generate$6('dialog-describe');\n set$8(describeElement, 'id', id);\n return id;\n }, identity$1);\n set$8(describedElement, 'aria-describedby', describeId);\n };\n\n var labelledBy = function (labelledElement, labelElement) {\n var labelId = getOpt(labelledElement, 'id').fold(function () {\n var id = generate$6('dialog-label');\n set$8(labelElement, 'id', id);\n return id;\n }, identity$1);\n set$8(labelledElement, 'aria-labelledby', labelId);\n };\n\n var schema$2 = constant$1([\n required$1('lazySink'),\n option('dragBlockClass'),\n defaultedFunction('getBounds', win),\n defaulted('useTabstopAt', always),\n defaulted('eventOrder', {}),\n field('modalBehaviours', [Keying]),\n onKeyboardHandler('onExecute'),\n onStrictKeyboardHandler('onEscape')\n ]);\n var basic = { sketch: identity$1 };\n var parts$2 = constant$1([\n optional({\n name: 'draghandle',\n overrides: function (detail, spec) {\n return {\n behaviours: derive$1([Dragging.config({\n mode: 'mouse',\n getTarget: function (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$1({\n factory: {\n sketch: function (spec, detail) {\n return __assign(__assign({}, spec), {\n dom: detail.dom,\n components: detail.components\n });\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 var factory$4 = function (detail, components, spec, externals) {\n var _a;\n var dialogComp = value$1();\n var showDialog = function (dialog) {\n dialogComp.set(dialog);\n var sink = detail.lazySink(dialog).getOrDie();\n var externalBlocker = externals.blocker();\n var blocker = sink.getSystem().build(__assign(__assign({}, externalBlocker), {\n components: externalBlocker.components.concat([premade(dialog)]),\n behaviours: derive$1([\n Focusing.config({}),\n config('dialog-blocker-events', [runOnSource(focusin(), function () {\n Keying.focusIn(dialog);\n })])\n ])\n }));\n attach(sink, blocker);\n Keying.focusIn(dialog);\n };\n var hideDialog = function (dialog) {\n dialogComp.clear();\n parent(dialog.element).each(function (blockerDom) {\n dialog.getSystem().getByDom(blockerDom).each(function (blocker) {\n detach(blocker);\n });\n });\n };\n var getDialogBody = function (dialog) {\n return getPartOrDie(dialog, detail, 'body');\n };\n var getDialogFooter = function (dialog) {\n return getPartOrDie(dialog, detail, 'footer');\n };\n var setBusy = function (dialog, getBusySpec) {\n Blocking.block(dialog, getBusySpec);\n };\n var setIdle = function (dialog) {\n Blocking.unblock(dialog);\n };\n var modalEventsId = generate$6('modal-events');\n var eventOrder = __assign(__assign({}, detail.eventOrder), (_a = {}, _a[attachedToDom()] = [modalEventsId].concat(detail.eventOrder['alloy.system.attached'] || []), _a));\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n apis: {\n show: showDialog,\n hide: hideDialog,\n getBody: getDialogBody,\n getFooter: getDialogFooter,\n setIdle: setIdle,\n setBusy: setBusy\n },\n eventOrder: 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 }),\n Blocking.config({ getRoot: dialogComp.get }),\n config(modalEventsId, [runOnAttached(function (c) {\n labelledBy(c.element, getPartOrDie(c, detail, 'title').element);\n describedBy(c.element, getPartOrDie(c, detail, 'body').element);\n })])\n ])\n };\n };\n var ModalDialog = composite({\n name: 'ModalDialog',\n configFields: schema$2(),\n partFields: parts$2(),\n factory: factory$4,\n apis: {\n show: function (apis, dialog) {\n apis.show(dialog);\n },\n hide: function (apis, dialog) {\n apis.hide(dialog);\n },\n getBody: function (apis, dialog) {\n return apis.getBody(dialog);\n },\n getFooter: function (apis, dialog) {\n return apis.getFooter(dialog);\n },\n setBusy: function (apis, dialog, getBusySpec) {\n apis.setBusy(dialog, getBusySpec);\n },\n setIdle: function (apis, dialog) {\n apis.setIdle(dialog);\n }\n }\n });\n\n var dialogToggleMenuItemSchema = objOf([\n requiredString('type'),\n requiredString('name')\n ].concat(commonMenuItemFields));\n var dialogToggleMenuItemDataProcessor = boolean;\n\n var baseFooterButtonFields = [\n field$1('name', 'name', defaultedThunk(function () {\n return generate$6('button-name');\n }), string),\n optionString('icon'),\n defaultedStringEnum('align', 'end', [\n 'start',\n 'end'\n ]),\n defaultedBoolean('primary', false),\n defaultedBoolean('disabled', false)\n ];\n var dialogFooterButtonFields = __spreadArray(__spreadArray([], baseFooterButtonFields, true), [requiredString('text')], false);\n var normalFooterButtonFields = __spreadArray([requiredStringEnum('type', [\n 'submit',\n 'cancel',\n 'custom'\n ])], dialogFooterButtonFields, true);\n var menuFooterButtonFields = __spreadArray([\n requiredStringEnum('type', ['menu']),\n optionString('text'),\n optionString('tooltip'),\n optionString('icon'),\n requiredArrayOf('items', dialogToggleMenuItemSchema)\n ], baseFooterButtonFields, true);\n var dialogFooterButtonSchema = choose$1('type', {\n submit: normalFooterButtonFields,\n cancel: normalFooterButtonFields,\n custom: normalFooterButtonFields,\n menu: menuFooterButtonFields\n });\n\n var alertBannerFields = [\n requiredString('type'),\n requiredString('text'),\n requiredStringEnum('level', [\n 'info',\n 'warn',\n 'error',\n 'success'\n ]),\n requiredString('icon'),\n defaulted('url', '')\n ];\n var alertBannerSchema = objOf(alertBannerFields);\n\n var createBarFields = function (itemsField) {\n return [\n requiredString('type'),\n itemsField\n ];\n };\n\n var buttonFields = [\n requiredString('type'),\n requiredString('text'),\n defaultedBoolean('disabled', false),\n defaultedBoolean('primary', false),\n field$1('name', 'name', defaultedThunk(function () {\n return generate$6('button-name');\n }), string),\n optionString('icon'),\n defaultedBoolean('borderless', false)\n ];\n var buttonSchema = objOf(buttonFields);\n\n var checkboxFields = [\n requiredString('type'),\n requiredString('name'),\n requiredString('label'),\n defaultedBoolean('disabled', false)\n ];\n var checkboxSchema = objOf(checkboxFields);\n var checkboxDataProcessor = boolean;\n\n var formComponentFields = [\n requiredString('type'),\n requiredString('name')\n ];\n var formComponentWithLabelFields = formComponentFields.concat([optionString('label')]);\n\n var collectionFields = formComponentWithLabelFields.concat([defaulted('columns', 'auto')]);\n var collectionSchema = objOf(collectionFields);\n var collectionDataProcessor = arrOfObj([\n requiredString('value'),\n requiredString('text'),\n requiredString('icon')\n ]);\n\n var colorInputFields = formComponentWithLabelFields;\n var colorInputSchema = objOf(colorInputFields);\n var colorInputDataProcessor = string;\n\n var colorPickerFields = formComponentWithLabelFields;\n var colorPickerSchema = objOf(colorPickerFields);\n var colorPickerDataProcessor = string;\n\n var customEditorFields = formComponentFields.concat([\n defaultedString('tag', 'textarea'),\n requiredString('scriptId'),\n requiredString('scriptUrl'),\n defaultedPostMsg('settings', undefined)\n ]);\n var customEditorFieldsOld = formComponentFields.concat([\n defaultedString('tag', 'textarea'),\n requiredFunction('init')\n ]);\n var customEditorSchema = valueOf(function (v) {\n return asRaw('customeditor.old', objOfOnly(customEditorFieldsOld), v).orThunk(function () {\n return asRaw('customeditor.new', objOfOnly(customEditorFields), v);\n });\n });\n var customEditorDataProcessor = string;\n\n var dropZoneFields = formComponentWithLabelFields;\n var dropZoneSchema = objOf(dropZoneFields);\n var dropZoneDataProcessor = arrOfVal();\n\n var createGridFields = function (itemsField) {\n return [\n requiredString('type'),\n requiredNumber('columns'),\n itemsField\n ];\n };\n\n var htmlPanelFields = [\n requiredString('type'),\n requiredString('html'),\n defaultedStringEnum('presets', 'presentation', [\n 'presentation',\n 'document'\n ])\n ];\n var htmlPanelSchema = objOf(htmlPanelFields);\n\n var iframeFields = formComponentWithLabelFields.concat([defaultedBoolean('sandboxed', true)]);\n var iframeSchema = objOf(iframeFields);\n var iframeDataProcessor = string;\n\n var imageToolsFields = formComponentWithLabelFields.concat([requiredOf('currentState', objOf([\n required$1('blob'),\n requiredString('url')\n ]))]);\n var imageToolsSchema = objOf(imageToolsFields);\n\n var inputFields = formComponentWithLabelFields.concat([\n optionString('inputMode'),\n optionString('placeholder'),\n defaultedBoolean('maximized', false),\n defaultedBoolean('disabled', false)\n ]);\n var inputSchema = objOf(inputFields);\n var inputDataProcessor = string;\n\n var createLabelFields = function (itemsField) {\n return [\n requiredString('type'),\n requiredString('label'),\n itemsField\n ];\n };\n\n var listBoxSingleItemFields = [\n requiredString('text'),\n requiredString('value')\n ];\n var listBoxNestedItemFields = [\n requiredString('text'),\n requiredArrayOf('items', thunkOf('items', function () {\n return listBoxItemSchema;\n }))\n ];\n var listBoxItemSchema = oneOf([\n objOf(listBoxSingleItemFields),\n objOf(listBoxNestedItemFields)\n ]);\n var listBoxFields = formComponentWithLabelFields.concat([\n requiredArrayOf('items', listBoxItemSchema),\n defaultedBoolean('disabled', false)\n ]);\n var listBoxSchema = objOf(listBoxFields);\n var listBoxDataProcessor = string;\n\n var selectBoxFields = formComponentWithLabelFields.concat([\n requiredArrayOfObj('items', [\n requiredString('text'),\n requiredString('value')\n ]),\n defaultedNumber('size', 1),\n defaultedBoolean('disabled', false)\n ]);\n var selectBoxSchema = objOf(selectBoxFields);\n var selectBoxDataProcessor = string;\n\n var sizeInputFields = formComponentWithLabelFields.concat([\n defaultedBoolean('constrain', true),\n defaultedBoolean('disabled', false)\n ]);\n var sizeInputSchema = objOf(sizeInputFields);\n var sizeInputDataProcessor = objOf([\n requiredString('width'),\n requiredString('height')\n ]);\n\n var tableFields = [\n requiredString('type'),\n requiredArrayOf('header', string),\n requiredArrayOf('cells', arrOf(string))\n ];\n var tableSchema = objOf(tableFields);\n\n var textAreaFields = formComponentWithLabelFields.concat([\n optionString('placeholder'),\n defaultedBoolean('maximized', false),\n defaultedBoolean('disabled', false)\n ]);\n var textAreaSchema = objOf(textAreaFields);\n var textAreaDataProcessor = string;\n\n var urlInputFields = formComponentWithLabelFields.concat([\n defaultedStringEnum('filetype', 'file', [\n 'image',\n 'media',\n 'file'\n ]),\n defaulted('disabled', false)\n ]);\n var urlInputSchema = objOf(urlInputFields);\n var urlInputDataProcessor = objOf([\n requiredString('value'),\n defaulted('meta', {})\n ]);\n\n var createItemsField = function (name) {\n return field$1('items', 'items', required$2(), arrOf(valueOf(function (v) {\n return asRaw('Checking item of ' + name, itemSchema, v).fold(function (sErr) {\n return Result.error(formatError(sErr));\n }, function (passValue) {\n return Result.value(passValue);\n });\n })));\n };\n var itemSchema = valueThunk(function () {\n return 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 textarea: textAreaSchema,\n urlinput: urlInputSchema,\n customeditor: customEditorSchema,\n htmlpanel: htmlPanelSchema,\n imagetools: imageToolsSchema,\n collection: collectionSchema,\n label: objOf(createLabelFields(createItemsField('label'))),\n table: tableSchema,\n panel: panelSchema\n });\n });\n var panelFields = [\n requiredString('type'),\n defaulted('classes', []),\n requiredArrayOf('items', itemSchema)\n ];\n var panelSchema = objOf(panelFields);\n\n var tabFields = [\n field$1('name', 'name', defaultedThunk(function () {\n return generate$6('tab-name');\n }), string),\n requiredString('title'),\n requiredArrayOf('items', itemSchema)\n ];\n var tabPanelFields = [\n requiredString('type'),\n requiredArrayOfObj('tabs', tabFields)\n ];\n var tabPanelSchema = objOf(tabPanelFields);\n\n var dialogButtonFields = dialogFooterButtonFields;\n var dialogButtonSchema = dialogFooterButtonSchema;\n var dialogSchema = objOf([\n requiredString('title'),\n requiredOf('body', choose$2('type', {\n panel: panelSchema,\n tabpanel: tabPanelSchema\n })),\n defaultedString('size', 'normal'),\n requiredArrayOf('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 defaulted('onTabChange', noop)\n ]);\n var createDialog = function (spec) {\n return asRaw('dialog', dialogSchema, spec);\n };\n\n var urlDialogButtonSchema = objOf(__spreadArray([requiredStringEnum('type', [\n 'cancel',\n 'custom'\n ])], dialogButtonFields, true));\n var 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 var createUrlDialog = function (spec) {\n return asRaw('dialog', urlDialogSchema, spec);\n };\n\n var getAllObjects = function (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 var isNamedItem = function (obj) {\n return isString(obj.type) && isString(obj.name);\n };\n var dataProcessors = {\n checkbox: checkboxDataProcessor,\n colorinput: colorInputDataProcessor,\n colorpicker: colorPickerDataProcessor,\n dropzone: dropZoneDataProcessor,\n input: inputDataProcessor,\n iframe: iframeDataProcessor,\n sizeinput: sizeInputDataProcessor,\n selectbox: selectBoxDataProcessor,\n listbox: listBoxDataProcessor,\n size: sizeInputDataProcessor,\n textarea: textAreaDataProcessor,\n urlinput: urlInputDataProcessor,\n customeditor: customEditorDataProcessor,\n collection: collectionDataProcessor,\n togglemenuitem: dialogToggleMenuItemDataProcessor\n };\n var getDataProcessor = function (item) {\n return Optional.from(dataProcessors[item.type]);\n };\n var getNamedItems = function (structure) {\n return filter$2(getAllObjects(structure), isNamedItem);\n };\n\n var createDataValidator = function (structure) {\n var namedItems = getNamedItems(structure);\n var fields = bind$3(namedItems, function (item) {\n return getDataProcessor(item).fold(function () {\n return [];\n }, function (schema) {\n return [requiredOf(item.name, schema)];\n });\n });\n return objOf(fields);\n };\n\n var extract = function (structure) {\n var internalDialog = getOrDie(createDialog(structure));\n var dataValidator = createDataValidator(structure);\n var initialData = structure.initialData;\n return {\n internalDialog: internalDialog,\n dataValidator: dataValidator,\n initialData: initialData\n };\n };\n var DialogManager = {\n open: function (factory, structure) {\n var extraction = extract(structure);\n return factory(extraction.internalDialog, extraction.initialData, extraction.dataValidator);\n },\n openUrl: function (factory, structure) {\n var internalDialog = getOrDie(createUrlDialog(structure));\n return factory(internalDialog);\n },\n redial: function (structure) {\n return extract(structure);\n }\n };\n\n var toValidValues = function (values) {\n var errors = [];\n var result = {};\n each(values, function (value, name) {\n value.fold(function () {\n errors.push(name);\n }, function (v) {\n result[name] = v;\n });\n });\n return errors.length > 0 ? Result.error(errors) : Result.value(result);\n };\n\n var renderBodyPanel = function (spec, backstage) {\n var memForm = record(Form.sketch(function (parts) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form'].concat(spec.classes)\n },\n components: map$2(spec.items, function (item) {\n return interpretInForm(parts, item, backstage);\n })\n };\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 RepresentingConfigs.memento(memForm, {\n postprocess: function (formValue) {\n return toValidValues(formValue).fold(function (err) {\n console.error(err);\n return {};\n }, identity$1);\n }\n })\n ])\n };\n };\n\n var factory$3 = function (detail, _spec) {\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: detail.components,\n events: events$a(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 };\n var TabButton = single({\n name: 'TabButton',\n configFields: [\n defaulted('uid', undefined),\n required$1('value'),\n field$1('dom', 'dom', mergeWithThunk(function () {\n return {\n attributes: {\n 'role': 'tab',\n 'id': generate$6('aria'),\n 'aria-selected': 'false'\n }\n };\n }), anyValue()),\n option('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 var 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 var tabsPart = group({\n factory: TabButton,\n name: 'tabs',\n unit: 'tab',\n overrides: function (barDetail) {\n var dismissTab$1 = function (tabbar, button) {\n Highlighting.dehighlight(tabbar, button);\n emitWith(tabbar, dismissTab(), {\n tabbar: tabbar,\n button: button\n });\n };\n var changeTab$1 = function (tabbar, button) {\n Highlighting.highlight(tabbar, button);\n emitWith(tabbar, changeTab(), {\n tabbar: tabbar,\n button: button\n });\n };\n return {\n action: function (button) {\n var tabbar = button.getSystem().getByUid(barDetail.uid).getOrDie();\n var activeButton = Highlighting.isHighlighted(tabbar, button);\n var response = function () {\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 var parts$1 = constant$1([tabsPart]);\n\n var factory$2 = function (detail, components, _spec, _externals) {\n return {\n 'uid': detail.uid,\n 'dom': detail.dom,\n components: 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: function (tabbar, tab) {\n set$8(tab.element, 'aria-selected', 'true');\n },\n onDehighlight: function (tabbar, tab) {\n set$8(tab.element, 'aria-selected', 'false');\n }\n }),\n Keying.config({\n mode: 'flow',\n getInitial: function (tabbar) {\n return Highlighting.getHighlighted(tabbar).map(function (tab) {\n return tab.element;\n });\n },\n selector: '.' + detail.markers.tabClass,\n executeOnMove: true\n })\n ])\n };\n };\n var Tabbar = composite({\n name: 'Tabbar',\n configFields: schema$1(),\n partFields: parts$1(),\n factory: factory$2\n });\n\n var factory$1 = function (detail, _spec) {\n return {\n uid: detail.uid,\n dom: detail.dom,\n behaviours: augment(detail.tabviewBehaviours, [Replacing.config({})]),\n domModification: { attributes: { role: 'tabpanel' } }\n };\n };\n var Tabview = single({\n name: 'Tabview',\n configFields: [field('tabviewBehaviours', [Replacing])],\n factory: factory$1\n });\n\n var schema = constant$1([\n defaulted('selectFirst', true),\n onHandler('onChangeTab'),\n onHandler('onDismissTab'),\n defaulted('tabs', []),\n field('tabSectionBehaviours', [])\n ]);\n var 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: function (detail) {\n return { tabs: detail.tabs };\n }\n });\n var viewPart = required({\n factory: Tabview,\n name: 'tabview'\n });\n var parts = constant$1([\n barPart,\n viewPart\n ]);\n\n var factory = function (detail, components, _spec, _externals) {\n var changeTab$1 = function (button) {\n var tabValue = Representing.getValue(button);\n getPart(button, detail, 'tabview').each(function (tabview) {\n var tabWithValue = find$5(detail.tabs, function (t) {\n return t.value === tabValue;\n });\n tabWithValue.each(function (tabData) {\n var panel = tabData.view();\n getOpt(button.element, 'id').each(function (id) {\n set$8(tabview.element, 'aria-labelledby', id);\n });\n Replacing.set(tabview, panel);\n detail.onChangeTab(tabview, button, panel);\n });\n });\n };\n var changeTabBy = function (section, byPred) {\n getPart(section, detail, 'tabbar').each(function (tabbar) {\n byPred(tabbar).each(emitExecute);\n });\n };\n return {\n uid: detail.uid,\n dom: detail.dom,\n components: components,\n behaviours: get$2(detail.tabSectionBehaviours),\n events: derive$2(flatten([\n detail.selectFirst ? [runOnAttached(function (section, _simulatedEvent) {\n changeTabBy(section, Highlighting.getFirst);\n })] : [],\n [\n run$1(changeTab(), function (section, simulatedEvent) {\n var button = simulatedEvent.event.button;\n changeTab$1(button);\n }),\n run$1(dismissTab(), function (section, simulatedEvent) {\n var button = simulatedEvent.event.button;\n detail.onDismissTab(section, button);\n })\n ]\n ])),\n apis: {\n getViewItems: function (section) {\n return getPart(section, detail, 'tabview').map(function (tabview) {\n return Replacing.contents(tabview);\n }).getOr([]);\n },\n showTab: function (section, tabKey) {\n var getTabIfNotActive = function (tabbar) {\n var candidates = Highlighting.getCandidates(tabbar);\n var optTab = find$5(candidates, function (c) {\n return Representing.getValue(c) === tabKey;\n });\n return optTab.filter(function (tab) {\n return !Highlighting.isHighlighted(tabbar, tab);\n });\n };\n changeTabBy(section, getTabIfNotActive);\n }\n }\n };\n };\n var TabSection = composite({\n name: 'TabSection',\n configFields: schema(),\n partFields: parts(),\n factory: factory,\n apis: {\n getViewItems: function (apis, component) {\n return apis.getViewItems(component);\n },\n showTab: function (apis, component, tabKey) {\n apis.showTab(component, tabKey);\n }\n }\n });\n\n var measureHeights = function (allTabs, tabview, tabviewComp) {\n return map$2(allTabs, function (_tab, i) {\n Replacing.set(tabviewComp, allTabs[i].view());\n var rect = tabview.dom.getBoundingClientRect();\n Replacing.set(tabviewComp, []);\n return rect.height;\n });\n };\n var getMaxHeight = function (heights) {\n return head(sort(heights, function (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 };\n var getMaxTabviewHeight = function (dialog, tabview, tablist) {\n var documentElement$1 = documentElement(dialog).dom;\n var rootElm = ancestor(dialog, '.tox-dialog-wrap').getOr(dialog);\n var isFixed = get$c(rootElm, 'position') === 'fixed';\n var 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 var tabviewHeight = get$b(tabview);\n var isTabListBeside = tabview.dom.offsetLeft >= tablist.dom.offsetLeft + get$a(tablist);\n var currentTabHeight = isTabListBeside ? Math.max(get$b(tablist), tabviewHeight) : tabviewHeight;\n var dialogTopMargin = parseInt(get$c(dialog, 'margin-top'), 10) || 0;\n var dialogBottomMargin = parseInt(get$c(dialog, 'margin-bottom'), 10) || 0;\n var dialogHeight = get$b(dialog) + dialogTopMargin + dialogBottomMargin;\n var chromeHeight = dialogHeight - currentTabHeight;\n return maxHeight - chromeHeight;\n };\n var showTab = function (allTabs, comp) {\n head(allTabs).each(function (tab) {\n return TabSection.showTab(comp, tab.value);\n });\n };\n var setTabviewHeight = function (tabview, height) {\n set$7(tabview, 'height', height + 'px');\n if (!detect$1().browser.isIE()) {\n set$7(tabview, 'flex-basis', height + 'px');\n } else {\n remove$6(tabview, 'flex-basis');\n }\n };\n var updateTabviewHeight = function (dialogBody, tabview, maxTabHeight) {\n ancestor(dialogBody, '[role=\"dialog\"]').each(function (dialog) {\n descendant(dialog, '[role=\"tablist\"]').each(function (tablist) {\n maxTabHeight.get().map(function (height) {\n set$7(tabview, 'height', '0');\n set$7(tabview, 'flex-basis', '0');\n return Math.min(height, getMaxTabviewHeight(dialog, tabview, tablist));\n }).each(function (height) {\n setTabviewHeight(tabview, height);\n });\n });\n });\n };\n var getTabview = function (dialog) {\n return descendant(dialog, '[role=\"tabpanel\"]');\n };\n var setMode = function (allTabs) {\n var smartTabHeight = function () {\n var maxTabHeight = value$1();\n var extraEvents = [\n runOnAttached(function (comp) {\n var dialog = comp.element;\n getTabview(dialog).each(function (tabview) {\n set$7(tabview, 'visibility', 'hidden');\n comp.getSystem().getByDom(tabview).toOptional().each(function (tabviewComp) {\n var heights = measureHeights(allTabs, tabview, tabviewComp);\n var maxTabHeightOpt = getMaxHeight(heights);\n maxTabHeightOpt.fold(maxTabHeight.clear, maxTabHeight.set);\n });\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n remove$6(tabview, 'visibility');\n showTab(allTabs, comp);\n global$f.requestAnimationFrame(function () {\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n });\n });\n }),\n run$1(windowResize(), function (comp) {\n var dialog = comp.element;\n getTabview(dialog).each(function (tabview) {\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n });\n }),\n run$1(formResizeEvent, function (comp, _se) {\n var dialog = comp.element;\n getTabview(dialog).each(function (tabview) {\n var oldFocus = active(getRootNode(tabview));\n set$7(tabview, 'visibility', 'hidden');\n var oldHeight = getRaw(tabview, 'height').map(function (h) {\n return parseInt(h, 10);\n });\n remove$6(tabview, 'height');\n remove$6(tabview, 'flex-basis');\n var newHeight = tabview.dom.getBoundingClientRect().height;\n var hasGrown = oldHeight.forall(function (h) {\n return newHeight > h;\n });\n if (hasGrown) {\n maxTabHeight.set(newHeight);\n updateTabviewHeight(dialog, tabview, maxTabHeight);\n } else {\n oldHeight.each(function (h) {\n setTabviewHeight(tabview, h);\n });\n }\n remove$6(tabview, 'visibility');\n oldFocus.each(focus$3);\n });\n })\n ];\n var selectFirst = false;\n return {\n extraEvents: extraEvents,\n selectFirst: selectFirst\n };\n }();\n var naiveTabHeight = function () {\n var extraEvents = [];\n var selectFirst = true;\n return {\n extraEvents: extraEvents,\n selectFirst: selectFirst\n };\n }();\n return {\n smartTabHeight: smartTabHeight,\n naiveTabHeight: naiveTabHeight\n };\n };\n\n var SendDataToSectionChannel = 'send-data-to-section';\n var SendDataToViewChannel = 'send-data-to-view';\n var renderTabPanel = function (spec, backstage) {\n var storedValue = Cell({});\n var updateDataWithForm = function (form) {\n var formData = Representing.getValue(form);\n var validData = toValidValues(formData).getOr({});\n var currentData = storedValue.get();\n var newData = deepMerge(currentData, validData);\n storedValue.set(newData);\n };\n var setDataOnForm = function (form) {\n var tabData = storedValue.get();\n Representing.setValue(form, tabData);\n };\n var oldTab = Cell(null);\n var allTabs = map$2(spec.tabs, function (tab) {\n return {\n value: tab.name,\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body-nav-item'],\n innerHtml: backstage.shared.providers.translate(tab.title)\n },\n view: function () {\n return [Form.sketch(function (parts) {\n return {\n dom: {\n tag: 'div',\n classes: ['tox-form']\n },\n components: map$2(tab.items, function (item) {\n return interpretInForm(parts, item, backstage);\n }),\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 });\n var tabMode = setMode(allTabs).smartTabHeight;\n return TabSection.sketch({\n dom: {\n tag: 'div',\n classes: ['tox-dialog__body']\n },\n onChangeTab: function (section, button, _viewItems) {\n var name = Representing.getValue(button);\n emitWith(section, formTabChangeEvent, {\n name: 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({\n find: function (comp) {\n return head(TabSection.getViewItems(comp));\n }\n }),\n Representing.config({\n store: {\n mode: 'manual',\n getValue: function (tsection) {\n tsection.getSystem().broadcastOn([SendDataToSectionChannel], {});\n return storedValue.get();\n },\n setValue: function (tsection, value) {\n storedValue.set(value);\n tsection.getSystem().broadcastOn([SendDataToViewChannel], {});\n }\n }\n })\n ])\n });\n };\n\n var dialogChannel = generate$6('update-dialog');\n var titleChannel = generate$6('update-title');\n var bodyChannel = generate$6('update-body');\n var footerChannel = generate$6('update-footer');\n var bodySendMessageChannel = generate$6('body-send-message');\n\n var renderBody = function (spec, id, backstage, ariaAttrs) {\n var renderComponents = function (incoming) {\n switch (incoming.body.type) {\n case 'tabpanel': {\n return [renderTabPanel(incoming.body, backstage)];\n }\n default: {\n return [renderBodyPanel(incoming.body, backstage)];\n }\n }\n };\n var updateState = function (_comp, incoming) {\n return Optional.some({\n isTabPanel: function () {\n return incoming.body.type === 'tabpanel';\n }\n });\n };\n var ariaAttributes = { 'aria-live': 'polite' };\n return {\n dom: {\n tag: 'div',\n classes: ['tox-dialog__content-js'],\n attributes: __assign(__assign({}, id.map(function (x) {\n return { id: x };\n }).getOr({})), ariaAttrs ? ariaAttributes : {})\n },\n components: [],\n behaviours: derive$1([\n ComposingConfigs.childAt(0),\n Reflecting.config({\n channel: bodyChannel,\n updateState: updateState,\n renderComponents: renderComponents,\n initialData: spec\n })\n ])\n };\n };\n var renderInlineBody = function (spec, contentId, backstage, ariaAttrs) {\n return renderBody(spec, Optional.some(contentId), backstage, ariaAttrs);\n };\n var renderModalBody = function (spec, backstage) {\n var bodySpec = renderBody(spec, Optional.none(), backstage, false);\n return ModalDialog.parts.body(bodySpec);\n };\n var renderIframeBody = function (spec) {\n var 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({\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 function _typeof(obj) {\n '@babel/helpers - typeof';\n return _typeof = 'function' == typeof Symbol && 'symbol' == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && 'function' == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n }, _typeof(obj);\n }\n function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n }\n function _isNativeReflectConstruct() {\n if (typeof Reflect === 'undefined' || !Reflect.construct)\n return false;\n if (Reflect.construct.sham)\n return false;\n if (typeof Proxy === 'function')\n return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {\n }));\n return true;\n } catch (e) {\n return false;\n }\n }\n function _construct(Parent, args, Class) {\n if (_isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class)\n _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n return _construct.apply(null, arguments);\n }\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr))\n return _arrayLikeToArray(arr);\n }\n function _iterableToArray(iter) {\n if (typeof Symbol !== 'undefined' && iter[Symbol.iterator] != null || iter['@@iterator'] != null)\n return Array.from(iter);\n }\n function _unsupportedIterableToArray(o, minLen) {\n if (!o)\n return;\n if (typeof o === 'string')\n return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === 'Object' && o.constructor)\n n = o.constructor.name;\n if (n === 'Map' || n === 'Set')\n return Array.from(o);\n if (n === 'Arguments' || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))\n return _arrayLikeToArray(o, minLen);\n }\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length)\n len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++)\n arr2[i] = arr[i];\n return arr2;\n }\n function _nonIterableSpread() {\n throw new TypeError('Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.');\n }\n var hasOwnProperty = Object.hasOwnProperty, setPrototypeOf = Object.setPrototypeOf, isFrozen = Object.isFrozen, getPrototypeOf = Object.getPrototypeOf, getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n var freeze = Object.freeze, seal = Object.seal, create = Object.create;\n var _ref = typeof Reflect !== 'undefined' && Reflect, apply = _ref.apply, construct = _ref.construct;\n if (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n }\n if (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n }\n if (!seal) {\n seal = function seal(x) {\n return x;\n };\n }\n if (!construct) {\n construct = function construct(Func, args) {\n return _construct(Func, _toConsumableArray(args));\n };\n }\n var arrayForEach = unapply(Array.prototype.forEach);\n var arrayPop = unapply(Array.prototype.pop);\n var arrayPush = unapply(Array.prototype.push);\n var stringToLowerCase = unapply(String.prototype.toLowerCase);\n var stringMatch = unapply(String.prototype.match);\n var stringReplace = unapply(String.prototype.replace);\n var stringIndexOf = unapply(String.prototype.indexOf);\n var stringTrim = unapply(String.prototype.trim);\n var regExpTest = unapply(RegExp.prototype.test);\n var typeErrorCreate = unconstruct(TypeError);\n function unapply(func) {\n return function (thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return apply(func, thisArg, args);\n };\n }\n function unconstruct(func) {\n return function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return construct(func, args);\n };\n }\n function addToSet(set, array) {\n if (setPrototypeOf) {\n setPrototypeOf(set, null);\n }\n var l = array.length;\n while (l--) {\n var element = array[l];\n if (typeof element === 'string') {\n var lcElement = stringToLowerCase(element);\n if (lcElement !== element) {\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n }\n function clone(object) {\n var newObject = create(null);\n var property;\n for (property in object) {\n if (apply(hasOwnProperty, object, [property])) {\n newObject[property] = object[property];\n }\n }\n return newObject;\n }\n function lookupGetter(object, prop) {\n while (object !== null) {\n var desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue(element) {\n console.warn('fallback value for', element);\n return null;\n }\n return fallbackValue;\n }\n var html$1 = freeze([\n 'a',\n 'abbr',\n 'acronym',\n 'address',\n 'area',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'bdi',\n 'bdo',\n 'big',\n 'blink',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'center',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'content',\n 'data',\n 'datalist',\n 'dd',\n 'decorator',\n 'del',\n 'details',\n 'dfn',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'element',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'font',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'i',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'map',\n 'mark',\n 'marquee',\n 'menu',\n 'menuitem',\n 'meter',\n 'nav',\n 'nobr',\n 'ol',\n 'optgroup',\n 'option',\n 'output',\n 'p',\n 'picture',\n 'pre',\n 'progress',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'section',\n 'select',\n 'shadow',\n 'small',\n 'source',\n 'spacer',\n 'span',\n 'strike',\n 'strong',\n 'style',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'template',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'track',\n 'tt',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr'\n ]);\n var svg$1 = freeze([\n 'svg',\n 'a',\n 'altglyph',\n 'altglyphdef',\n 'altglyphitem',\n 'animatecolor',\n 'animatemotion',\n 'animatetransform',\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'filter',\n 'font',\n 'g',\n 'glyph',\n 'glyphref',\n 'hkern',\n 'image',\n 'line',\n 'lineargradient',\n 'marker',\n 'mask',\n 'metadata',\n 'mpath',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'style',\n 'switch',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tref',\n 'tspan',\n 'view',\n 'vkern'\n ]);\n var svgFilters = freeze([\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence'\n ]);\n var svgDisallowed = freeze([\n 'animate',\n 'color-profile',\n 'cursor',\n 'discard',\n 'fedropshadow',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'foreignobject',\n 'hatch',\n 'hatchpath',\n 'mesh',\n 'meshgradient',\n 'meshpatch',\n 'meshrow',\n 'missing-glyph',\n 'script',\n 'set',\n 'solidcolor',\n 'unknown',\n 'use'\n ]);\n var mathMl$1 = freeze([\n 'math',\n 'menclose',\n 'merror',\n 'mfenced',\n 'mfrac',\n 'mglyph',\n 'mi',\n 'mlabeledtr',\n 'mmultiscripts',\n 'mn',\n 'mo',\n 'mover',\n 'mpadded',\n 'mphantom',\n 'mroot',\n 'mrow',\n 'ms',\n 'mspace',\n 'msqrt',\n 'mstyle',\n 'msub',\n 'msup',\n 'msubsup',\n 'mtable',\n 'mtd',\n 'mtext',\n 'mtr',\n 'munder',\n 'munderover'\n ]);\n var mathMlDisallowed = freeze([\n 'maction',\n 'maligngroup',\n 'malignmark',\n 'mlongdiv',\n 'mscarries',\n 'mscarry',\n 'msgroup',\n 'mstack',\n 'msline',\n 'msrow',\n 'semantics',\n 'annotation',\n 'annotation-xml',\n 'mprescripts',\n 'none'\n ]);\n var text = freeze(['#text']);\n var html = freeze([\n 'accept',\n 'action',\n 'align',\n 'alt',\n 'autocapitalize',\n 'autocomplete',\n 'autopictureinpicture',\n 'autoplay',\n 'background',\n 'bgcolor',\n 'border',\n 'capture',\n 'cellpadding',\n 'cellspacing',\n 'checked',\n 'cite',\n 'class',\n 'clear',\n 'color',\n 'cols',\n 'colspan',\n 'controls',\n 'controlslist',\n 'coords',\n 'crossorigin',\n 'datetime',\n 'decoding',\n 'default',\n 'dir',\n 'disabled',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'download',\n 'draggable',\n 'enctype',\n 'enterkeyhint',\n 'face',\n 'for',\n 'headers',\n 'height',\n 'hidden',\n 'high',\n 'href',\n 'hreflang',\n 'id',\n 'inputmode',\n 'integrity',\n 'ismap',\n 'kind',\n 'label',\n 'lang',\n 'list',\n 'loading',\n 'loop',\n 'low',\n 'max',\n 'maxlength',\n 'media',\n 'method',\n 'min',\n 'minlength',\n 'multiple',\n 'muted',\n 'name',\n 'nonce',\n 'noshade',\n 'novalidate',\n 'nowrap',\n 'open',\n 'optimum',\n 'pattern',\n 'placeholder',\n 'playsinline',\n 'poster',\n 'preload',\n 'pubdate',\n 'radiogroup',\n 'readonly',\n 'rel',\n 'required',\n 'rev',\n 'reversed',\n 'role',\n 'rows',\n 'rowspan',\n 'spellcheck',\n 'scope',\n 'selected',\n 'shape',\n 'size',\n 'sizes',\n 'span',\n 'srclang',\n 'start',\n 'src',\n 'srcset',\n 'step',\n 'style',\n 'summary',\n 'tabindex',\n 'title',\n 'translate',\n 'type',\n 'usemap',\n 'valign',\n 'value',\n 'width',\n 'xmlns',\n 'slot'\n ]);\n var svg = freeze([\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'ascent',\n 'attributename',\n 'attributetype',\n 'azimuth',\n 'basefrequency',\n 'baseline-shift',\n 'begin',\n 'bias',\n 'by',\n 'class',\n 'clip',\n 'clippathunits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'diffuseconstant',\n 'direction',\n 'display',\n 'divisor',\n 'dur',\n 'edgemode',\n 'elevation',\n 'end',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyphref',\n 'gradientunits',\n 'gradienttransform',\n 'height',\n 'href',\n 'id',\n 'image-rendering',\n 'in',\n 'in2',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kerning',\n 'keypoints',\n 'keysplines',\n 'keytimes',\n 'lang',\n 'lengthadjust',\n 'letter-spacing',\n 'kernelmatrix',\n 'kernelunitlength',\n 'lighting-color',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerunits',\n 'markerwidth',\n 'maskcontentunits',\n 'maskunits',\n 'max',\n 'mask',\n 'media',\n 'method',\n 'mode',\n 'min',\n 'name',\n 'numoctaves',\n 'offset',\n 'operator',\n 'opacity',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'paint-order',\n 'path',\n 'pathlength',\n 'patterncontentunits',\n 'patterntransform',\n 'patternunits',\n 'points',\n 'preservealpha',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'rx',\n 'ry',\n 'radius',\n 'refx',\n 'refy',\n 'repeatcount',\n 'repeatdur',\n 'restart',\n 'result',\n 'rotate',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'specularconstant',\n 'specularexponent',\n 'spreadmethod',\n 'startoffset',\n 'stddeviation',\n 'stitchtiles',\n 'stop-color',\n 'stop-opacity',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke',\n 'stroke-width',\n 'style',\n 'surfacescale',\n 'systemlanguage',\n 'tabindex',\n 'targetx',\n 'targety',\n 'transform',\n 'transform-origin',\n 'text-anchor',\n 'text-decoration',\n 'text-rendering',\n 'textlength',\n 'type',\n 'u1',\n 'u2',\n 'unicode',\n 'values',\n 'viewbox',\n 'visibility',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'width',\n 'word-spacing',\n 'wrap',\n 'writing-mode',\n 'xchannelselector',\n 'ychannelselector',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'y',\n 'y1',\n 'y2',\n 'z',\n 'zoomandpan'\n ]);\n var mathMl = freeze([\n 'accent',\n 'accentunder',\n 'align',\n 'bevelled',\n 'close',\n 'columnsalign',\n 'columnlines',\n 'columnspan',\n 'denomalign',\n 'depth',\n 'dir',\n 'display',\n 'displaystyle',\n 'encoding',\n 'fence',\n 'frame',\n 'height',\n 'href',\n 'id',\n 'largeop',\n 'length',\n 'linethickness',\n 'lspace',\n 'lquote',\n 'mathbackground',\n 'mathcolor',\n 'mathsize',\n 'mathvariant',\n 'maxsize',\n 'minsize',\n 'movablelimits',\n 'notation',\n 'numalign',\n 'open',\n 'rowalign',\n 'rowlines',\n 'rowspacing',\n 'rowspan',\n 'rspace',\n 'rquote',\n 'scriptlevel',\n 'scriptminsize',\n 'scriptsizemultiplier',\n 'selection',\n 'separator',\n 'separators',\n 'stretchy',\n 'subscriptshift',\n 'supscriptshift',\n 'symmetric',\n 'voffset',\n 'width',\n 'xmlns'\n ]);\n var xml = freeze([\n 'xlink:href',\n 'xml:id',\n 'xlink:title',\n 'xml:space',\n 'xmlns:xlink'\n ]);\n var MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm);\n var ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\n var DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/);\n var ARIA_ATTR = seal(/^aria-[\\-\\w]+$/);\n var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i);\n var IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n var ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g);\n var DOCTYPE_NAME = seal(/^html$/i);\n var getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n };\n var _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, document) {\n if (_typeof(trustedTypes) !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n var suffix = null;\n var ATTR_NAME = 'data-tt-policy-suffix';\n if (document.currentScript && document.currentScript.hasAttribute(ATTR_NAME)) {\n suffix = document.currentScript.getAttribute(ATTR_NAME);\n }\n var policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML: function createHTML(html) {\n return html;\n }\n });\n } catch (_) {\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n };\n function createDOMPurify() {\n var window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n var DOMPurify = function DOMPurify(root) {\n return createDOMPurify(root);\n };\n DOMPurify.version = '2.3.8';\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== 9) {\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n var originalDocument = window.document;\n var document = window.document;\n var DocumentFragment = window.DocumentFragment, HTMLTemplateElement = window.HTMLTemplateElement, Node = window.Node, Element = window.Element, NodeFilter = window.NodeFilter, _window$NamedNodeMap = window.NamedNodeMap, NamedNodeMap = _window$NamedNodeMap === void 0 ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap, HTMLFormElement = window.HTMLFormElement, DOMParser = window.DOMParser, trustedTypes = window.trustedTypes;\n var ElementPrototype = Element.prototype;\n var cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n var getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n var getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n var getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n if (typeof HTMLTemplateElement === 'function') {\n var template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n var trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, originalDocument);\n var emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : '';\n var _document = document, implementation = _document.implementation, createNodeIterator = _document.createNodeIterator, createDocumentFragment = _document.createDocumentFragment, getElementsByTagName = _document.getElementsByTagName;\n var importNode = originalDocument.importNode;\n var documentMode = {};\n try {\n documentMode = clone(document).documentMode ? document.documentMode : {};\n } catch (_) {\n }\n var hooks = {};\n DOMPurify.isSupported = typeof getParentNode === 'function' && implementation && typeof implementation.createHTMLDocument !== 'undefined' && documentMode !== 9;\n var MUSTACHE_EXPR$1 = MUSTACHE_EXPR, ERB_EXPR$1 = ERB_EXPR, DATA_ATTR$1 = DATA_ATTR, ARIA_ATTR$1 = ARIA_ATTR, IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA, ATTR_WHITESPACE$1 = ATTR_WHITESPACE;\n var IS_ALLOWED_URI$1 = IS_ALLOWED_URI;\n var ALLOWED_TAGS = null;\n var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(html$1), _toConsumableArray(svg$1), _toConsumableArray(svgFilters), _toConsumableArray(mathMl$1), _toConsumableArray(text)));\n var ALLOWED_ATTR = null;\n var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray(html), _toConsumableArray(svg), _toConsumableArray(mathMl), _toConsumableArray(xml)));\n var CUSTOM_ELEMENT_HANDLING = Object.seal(Object.create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n var FORBID_TAGS = null;\n var FORBID_ATTR = null;\n var ALLOW_ARIA_ATTR = true;\n var ALLOW_DATA_ATTR = true;\n var ALLOW_UNKNOWN_PROTOCOLS = false;\n var SAFE_FOR_TEMPLATES = false;\n var WHOLE_DOCUMENT = false;\n var SET_CONFIG = false;\n var FORCE_BODY = false;\n var RETURN_DOM = false;\n var RETURN_DOM_FRAGMENT = false;\n var RETURN_TRUSTED_TYPE = false;\n var SANITIZE_DOM = true;\n var KEEP_CONTENT = true;\n var IN_PLACE = false;\n var USE_PROFILES = {};\n var FORBID_CONTENTS = null;\n var DEFAULT_FORBID_CONTENTS = addToSet({}, [\n 'annotation-xml',\n 'audio',\n 'colgroup',\n 'desc',\n 'foreignobject',\n 'head',\n 'iframe',\n 'math',\n 'mi',\n 'mn',\n 'mo',\n 'ms',\n 'mtext',\n 'noembed',\n 'noframes',\n 'noscript',\n 'plaintext',\n 'script',\n 'style',\n 'svg',\n 'template',\n 'thead',\n 'title',\n 'video',\n 'xmp'\n ]);\n var DATA_URI_TAGS = null;\n var DEFAULT_DATA_URI_TAGS = addToSet({}, [\n 'audio',\n 'video',\n 'img',\n 'source',\n 'image',\n 'track'\n ]);\n var URI_SAFE_ATTRIBUTES = null;\n var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n 'alt',\n 'class',\n 'for',\n 'id',\n 'label',\n 'name',\n 'pattern',\n 'placeholder',\n 'role',\n 'summary',\n 'title',\n 'value',\n 'style',\n 'xmlns'\n ]);\n var MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n var NAMESPACE = HTML_NAMESPACE;\n var IS_EMPTY_INPUT = false;\n var PARSER_MEDIA_TYPE;\n var SUPPORTED_PARSER_MEDIA_TYPES = [\n 'application/xhtml+xml',\n 'text/html'\n ];\n var DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n var transformCaseFunc;\n var CONFIG = null;\n var formElement = document.createElement('form');\n var isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n var _parseConfig = function _parseConfig(cfg) {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n if (!cfg || _typeof(cfg) !== 'object') {\n cfg = {};\n }\n cfg = clone(cfg);\n ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR) : DEFAULT_ALLOWED_ATTR;\n URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR) : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = 'ADD_DATA_URI_TAGS' in cfg ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS) : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = 'FORBID_CONTENTS' in cfg ? addToSet({}, cfg.FORBID_CONTENTS) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS) : {};\n FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR) : {};\n USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false;\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false;\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false;\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false;\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false;\n RETURN_DOM = cfg.RETURN_DOM || false;\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false;\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false;\n FORCE_BODY = cfg.FORCE_BODY || false;\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false;\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false;\n IN_PLACE = cfg.IN_PLACE || false;\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$1;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n PARSER_MEDIA_TYPE = SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE : PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE;\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? function (x) {\n return x;\n } : stringToLowerCase;\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, _toConsumableArray(text));\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS);\n }\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR);\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS);\n }\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, [\n 'html',\n 'head',\n 'body'\n ]);\n }\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n var MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n 'mi',\n 'mo',\n 'mn',\n 'ms',\n 'mtext'\n ]);\n var HTML_INTEGRATION_POINTS = addToSet({}, [\n 'foreignobject',\n 'desc',\n 'title',\n 'annotation-xml'\n ]);\n var COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n 'title',\n 'style',\n 'font',\n 'a',\n 'script'\n ]);\n var ALL_SVG_TAGS = addToSet({}, svg$1);\n addToSet(ALL_SVG_TAGS, svgFilters);\n addToSet(ALL_SVG_TAGS, svgDisallowed);\n var ALL_MATHML_TAGS = addToSet({}, mathMl$1);\n addToSet(ALL_MATHML_TAGS, mathMlDisallowed);\n var _checkValidNamespace = function _checkValidNamespace(element) {\n var parent = getParentNode(element);\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: HTML_NAMESPACE,\n tagName: 'template'\n };\n }\n var tagName = stringToLowerCase(element.tagName);\n var parentTagName = stringToLowerCase(parent.tagName);\n if (element.namespaceURI === SVG_NAMESPACE) {\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n return false;\n };\n var _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, { element: node });\n try {\n node.parentNode.removeChild(node);\n } catch (_) {\n try {\n node.outerHTML = emptyHTML;\n } catch (_) {\n node.remove();\n }\n }\n };\n var _removeAttribute = function _removeAttribute(name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node\n });\n }\n node.removeAttribute(name);\n if (name === 'is' && !ALLOWED_ATTR[name]) {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(node);\n } catch (_) {\n }\n } else {\n try {\n node.setAttribute(name, '');\n } catch (_) {\n }\n }\n }\n };\n var _initDocument = function _initDocument(dirty) {\n var doc;\n var leadingWhitespace;\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n var matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml') {\n dirty = '' + dirty + '';\n }\n var dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {\n }\n }\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? '' : dirtyPayload;\n } catch (_) {\n }\n }\n var body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n var _createIterator = function _createIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, null, false);\n };\n var _isClobbered = function _isClobbered(elm) {\n return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function');\n };\n var _isNode = function _isNode(object) {\n return _typeof(Node) === 'object' ? object instanceof Node : object && _typeof(object) === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string';\n };\n var _executeHook = function _executeHook(entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n arrayForEach(hooks[entryPoint], function (hook) {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n var _sanitizeElements = function _sanitizeElements(currentNode) {\n var content;\n _executeHook('beforeSanitizeElements', currentNode, null);\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n if (regExpTest(/[\\u0080-\\uFFFF]/, currentNode.nodeName)) {\n _forceRemove(currentNode);\n return true;\n }\n var tagName = transformCaseFunc(currentNode.nodeName);\n _executeHook('uponSanitizeElement', currentNode, {\n tagName: tagName,\n allowedTags: ALLOWED_TAGS\n });\n if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && (!_isNode(currentNode.content) || !_isNode(currentNode.content.firstElementChild)) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n if (tagName === 'select' && regExpTest(/