@lotte-innovate/ui-component-test 0.1.102 → 0.1.104
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/lib/_virtual/_commonjsHelpers.mjs +2 -0
- package/dist/lib/_virtual/_commonjsHelpers.mjs.map +1 -0
- package/dist/lib/_virtual/icons.mjs +2 -0
- package/dist/lib/_virtual/icons.mjs.map +1 -0
- package/dist/lib/_virtual/index.mjs +1 -1
- package/dist/lib/_virtual/index10.mjs +2 -0
- package/dist/lib/_virtual/index10.mjs.map +1 -0
- package/dist/lib/_virtual/index11.mjs +2 -0
- package/dist/lib/_virtual/index11.mjs.map +1 -0
- package/dist/lib/_virtual/index12.mjs +2 -0
- package/dist/lib/_virtual/index12.mjs.map +1 -0
- package/dist/lib/_virtual/index13.mjs +2 -0
- package/dist/lib/_virtual/index13.mjs.map +1 -0
- package/dist/lib/_virtual/index14.mjs +2 -0
- package/dist/lib/_virtual/index14.mjs.map +1 -0
- package/dist/lib/_virtual/index15.mjs +2 -0
- package/dist/lib/_virtual/index15.mjs.map +1 -0
- package/dist/lib/_virtual/index16.mjs +2 -0
- package/dist/lib/_virtual/index16.mjs.map +1 -0
- package/dist/lib/_virtual/index17.mjs +2 -0
- package/dist/lib/_virtual/index17.mjs.map +1 -0
- package/dist/lib/_virtual/index18.mjs +2 -0
- package/dist/lib/_virtual/index18.mjs.map +1 -0
- package/dist/lib/_virtual/index2.mjs +1 -1
- package/dist/lib/_virtual/index3.mjs +1 -1
- package/dist/lib/_virtual/index4.mjs +2 -0
- package/dist/lib/_virtual/index4.mjs.map +1 -0
- package/dist/lib/_virtual/index5.mjs +2 -0
- package/dist/lib/_virtual/index5.mjs.map +1 -0
- package/dist/lib/_virtual/index6.mjs +2 -0
- package/dist/lib/_virtual/index6.mjs.map +1 -0
- package/dist/lib/_virtual/index7.mjs +2 -0
- package/dist/lib/_virtual/index7.mjs.map +1 -0
- package/dist/lib/_virtual/index8.mjs +2 -0
- package/dist/lib/_virtual/index8.mjs.map +1 -0
- package/dist/lib/_virtual/index9.mjs +2 -0
- package/dist/lib/_virtual/index9.mjs.map +1 -0
- package/dist/lib/_virtual/model.mjs +2 -0
- package/dist/lib/_virtual/model.mjs.map +1 -0
- package/dist/lib/_virtual/plugin.mjs +2 -0
- package/dist/lib/_virtual/plugin.mjs.map +1 -0
- package/dist/lib/_virtual/plugin2.mjs +2 -0
- package/dist/lib/_virtual/plugin2.mjs.map +1 -0
- package/dist/lib/_virtual/plugin3.mjs +2 -0
- package/dist/lib/_virtual/plugin3.mjs.map +1 -0
- package/dist/lib/_virtual/plugin4.mjs +2 -0
- package/dist/lib/_virtual/plugin4.mjs.map +1 -0
- package/dist/lib/_virtual/plugin5.mjs +2 -0
- package/dist/lib/_virtual/plugin5.mjs.map +1 -0
- package/dist/lib/_virtual/plugin6.mjs +2 -0
- package/dist/lib/_virtual/plugin6.mjs.map +1 -0
- package/dist/lib/_virtual/theme.mjs +2 -0
- package/dist/lib/_virtual/theme.mjs.map +1 -0
- package/dist/lib/_virtual/tinymce.mjs +1 -1
- package/dist/lib/components/Editor/index copy.d.ts +12 -0
- package/dist/lib/components/Editor/index copy.js +77 -0
- package/dist/lib/components/Editor/index.d.ts +14 -1
- package/dist/lib/components/Editor/index.js +33 -39
- package/dist/lib/dist/lib/components/Editor/index.mjs +1 -1
- package/dist/lib/index.css +3749 -0
- package/dist/lib/node_modules/tinymce/icons/default/icons.mjs +2 -0
- package/dist/lib/node_modules/tinymce/icons/default/icons.mjs.map +1 -0
- package/dist/lib/node_modules/tinymce/icons/default/index.mjs +2 -0
- package/dist/lib/node_modules/tinymce/icons/default/index.mjs.map +1 -0
- package/dist/lib/node_modules/tinymce/models/dom/index.mjs +2 -0
- package/dist/lib/node_modules/tinymce/models/dom/index.mjs.map +1 -0
- package/dist/lib/node_modules/tinymce/models/dom/model.mjs +2 -0
- package/dist/lib/node_modules/tinymce/models/dom/model.mjs.map +1 -0
- package/dist/lib/node_modules/tinymce/plugins/advlist/index.mjs +2 -0
- package/dist/lib/node_modules/tinymce/plugins/advlist/index.mjs.map +1 -0
- package/dist/lib/node_modules/tinymce/plugins/advlist/plugin.mjs +2 -0
- package/dist/lib/node_modules/tinymce/plugins/advlist/plugin.mjs.map +1 -0
- package/dist/lib/node_modules/tinymce/plugins/code/index.mjs +2 -0
- package/dist/lib/node_modules/tinymce/plugins/code/index.mjs.map +1 -0
- package/dist/lib/node_modules/tinymce/plugins/code/plugin.mjs +2 -0
- package/dist/lib/node_modules/tinymce/plugins/code/plugin.mjs.map +1 -0
- package/dist/lib/node_modules/tinymce/plugins/emoticons/index.mjs +2 -0
- package/dist/lib/node_modules/tinymce/plugins/emoticons/index.mjs.map +1 -0
- package/dist/lib/node_modules/tinymce/plugins/emoticons/js/emojis.mjs +2 -0
- package/dist/lib/node_modules/tinymce/plugins/emoticons/js/emojis.mjs.map +1 -0
- package/dist/lib/node_modules/tinymce/plugins/emoticons/plugin.mjs +2 -0
- package/dist/lib/node_modules/tinymce/plugins/emoticons/plugin.mjs.map +1 -0
- package/dist/lib/node_modules/tinymce/plugins/link/index.mjs +2 -0
- package/dist/lib/node_modules/tinymce/plugins/link/index.mjs.map +1 -0
- package/dist/lib/node_modules/tinymce/plugins/link/plugin.mjs +2 -0
- package/dist/lib/node_modules/tinymce/plugins/link/plugin.mjs.map +1 -0
- package/dist/lib/node_modules/tinymce/plugins/lists/index.mjs +2 -0
- package/dist/lib/node_modules/tinymce/plugins/lists/index.mjs.map +1 -0
- package/dist/lib/node_modules/tinymce/plugins/lists/plugin.mjs +2 -0
- package/dist/lib/node_modules/tinymce/plugins/lists/plugin.mjs.map +1 -0
- package/dist/lib/node_modules/tinymce/plugins/table/index.mjs +2 -0
- package/dist/lib/node_modules/tinymce/plugins/table/index.mjs.map +1 -0
- package/dist/lib/node_modules/tinymce/plugins/table/plugin.mjs +2 -0
- package/dist/lib/node_modules/tinymce/plugins/table/plugin.mjs.map +1 -0
- package/dist/lib/node_modules/tinymce/themes/silver/index.mjs +2 -0
- package/dist/lib/node_modules/tinymce/themes/silver/index.mjs.map +1 -0
- package/dist/lib/node_modules/tinymce/themes/silver/theme.mjs +2 -0
- package/dist/lib/node_modules/tinymce/themes/silver/theme.mjs.map +1 -0
- package/dist/lib/tsconfig.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/lib/_virtual/react-is.development.mjs +0 -2
- package/dist/lib/_virtual/react-is.development.mjs.map +0 -1
- package/dist/lib/_virtual/react-is.production.min.mjs +0 -2
- package/dist/lib/_virtual/react-is.production.min.mjs.map +0 -1
- package/dist/lib/node_modules/@tinymce/tinymce-react/lib/es2015/main/ts/ScriptLoader2.mjs +0 -2
- package/dist/lib/node_modules/@tinymce/tinymce-react/lib/es2015/main/ts/ScriptLoader2.mjs.map +0 -1
- package/dist/lib/node_modules/@tinymce/tinymce-react/lib/es2015/main/ts/TinyMCE.mjs +0 -2
- package/dist/lib/node_modules/@tinymce/tinymce-react/lib/es2015/main/ts/TinyMCE.mjs.map +0 -1
- package/dist/lib/node_modules/@tinymce/tinymce-react/lib/es2015/main/ts/Utils.mjs +0 -2
- package/dist/lib/node_modules/@tinymce/tinymce-react/lib/es2015/main/ts/Utils.mjs.map +0 -1
- package/dist/lib/node_modules/@tinymce/tinymce-react/lib/es2015/main/ts/components/Editor.mjs +0 -2
- package/dist/lib/node_modules/@tinymce/tinymce-react/lib/es2015/main/ts/components/Editor.mjs.map +0 -1
- package/dist/lib/node_modules/@tinymce/tinymce-react/lib/es2015/main/ts/components/EditorPropTypes.mjs +0 -2
- package/dist/lib/node_modules/@tinymce/tinymce-react/lib/es2015/main/ts/components/EditorPropTypes.mjs.map +0 -1
- package/dist/lib/node_modules/marked/lib/marked.esm.mjs +0 -2
- package/dist/lib/node_modules/marked/lib/marked.esm.mjs.map +0 -1
- package/dist/lib/node_modules/object-assign/index.mjs +0 -7
- package/dist/lib/node_modules/object-assign/index.mjs.map +0 -1
- package/dist/lib/node_modules/prop-types/checkPropTypes.mjs +0 -2
- package/dist/lib/node_modules/prop-types/checkPropTypes.mjs.map +0 -1
- package/dist/lib/node_modules/prop-types/factoryWithThrowingShims.mjs +0 -2
- package/dist/lib/node_modules/prop-types/factoryWithThrowingShims.mjs.map +0 -1
- package/dist/lib/node_modules/prop-types/factoryWithTypeCheckers.mjs +0 -2
- package/dist/lib/node_modules/prop-types/factoryWithTypeCheckers.mjs.map +0 -1
- package/dist/lib/node_modules/prop-types/index.mjs +0 -2
- package/dist/lib/node_modules/prop-types/index.mjs.map +0 -1
- package/dist/lib/node_modules/prop-types/lib/ReactPropTypesSecret.mjs +0 -2
- package/dist/lib/node_modules/prop-types/lib/ReactPropTypesSecret.mjs.map +0 -1
- package/dist/lib/node_modules/prop-types/lib/has.mjs +0 -2
- package/dist/lib/node_modules/prop-types/lib/has.mjs.map +0 -1
- package/dist/lib/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.mjs +0 -10
- package/dist/lib/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.mjs.map +0 -1
- package/dist/lib/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.mjs +0 -10
- package/dist/lib/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.mjs.map +0 -1
- package/dist/lib/node_modules/prop-types/node_modules/react-is/index.mjs +0 -2
- package/dist/lib/node_modules/prop-types/node_modules/react-is/index.mjs.map +0 -1
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"model.mjs","sources":["../../../../../../node_modules/tinymce/models/dom/model.js"],"sourcesContent":["/**\n * TinyMCE version 6.8.5 (TBD)\n */\n\n(function () {\n 'use strict';\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.ModelManager');\n\n const hasProto = (v, constructor, predicate) => {\n var _a;\n if (predicate(v, constructor.prototype)) {\n return true;\n } else {\n return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;\n }\n };\n const typeOf = x => {\n const t = typeof x;\n if (x === null) {\n return 'null';\n } else if (t === 'object' && Array.isArray(x)) {\n return 'array';\n } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {\n return 'string';\n } else {\n return t;\n }\n };\n const isType$1 = type => value => typeOf(value) === type;\n const isSimpleType = type => value => typeof value === type;\n const eq$2 = t => a => t === a;\n const isString = isType$1('string');\n const isObject = isType$1('object');\n const isArray = isType$1('array');\n const isNull = eq$2(null);\n const isBoolean = isSimpleType('boolean');\n const isUndefined = eq$2(undefined);\n const isNullable = a => a === null || a === undefined;\n const isNonNullable = a => !isNullable(a);\n const isFunction = isSimpleType('function');\n const isNumber = isSimpleType('number');\n\n const noop = () => {\n };\n const compose = (fa, fb) => {\n return (...args) => {\n return fa(fb.apply(null, args));\n };\n };\n const compose1 = (fbc, fab) => a => fbc(fab(a));\n const constant = value => {\n return () => {\n return value;\n };\n };\n const identity = x => {\n return x;\n };\n const tripleEquals = (a, b) => {\n return a === b;\n };\n function curry(fn, ...initialArgs) {\n return (...restArgs) => {\n const all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n const not = f => t => !f(t);\n const die = msg => {\n return () => {\n throw new Error(msg);\n };\n };\n const apply = f => {\n return f();\n };\n const never = constant(false);\n const always = constant(true);\n\n class Optional {\n constructor(tag, value) {\n this.tag = tag;\n this.value = value;\n }\n static some(value) {\n return new Optional(true, value);\n }\n static none() {\n return Optional.singletonNone;\n }\n fold(onNone, onSome) {\n if (this.tag) {\n return onSome(this.value);\n } else {\n return onNone();\n }\n }\n isSome() {\n return this.tag;\n }\n isNone() {\n return !this.tag;\n }\n map(mapper) {\n if (this.tag) {\n return Optional.some(mapper(this.value));\n } else {\n return Optional.none();\n }\n }\n bind(binder) {\n if (this.tag) {\n return binder(this.value);\n } else {\n return Optional.none();\n }\n }\n exists(predicate) {\n return this.tag && predicate(this.value);\n }\n forall(predicate) {\n return !this.tag || predicate(this.value);\n }\n filter(predicate) {\n if (!this.tag || predicate(this.value)) {\n return this;\n } else {\n return Optional.none();\n }\n }\n getOr(replacement) {\n return this.tag ? this.value : replacement;\n }\n or(replacement) {\n return this.tag ? this : replacement;\n }\n getOrThunk(thunk) {\n return this.tag ? this.value : thunk();\n }\n orThunk(thunk) {\n return this.tag ? this : thunk();\n }\n getOrDie(message) {\n if (!this.tag) {\n throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');\n } else {\n return this.value;\n }\n }\n static from(value) {\n return isNonNullable(value) ? Optional.some(value) : Optional.none();\n }\n getOrNull() {\n return this.tag ? this.value : null;\n }\n getOrUndefined() {\n return this.value;\n }\n each(worker) {\n if (this.tag) {\n worker(this.value);\n }\n }\n toArray() {\n return this.tag ? [this.value] : [];\n }\n toString() {\n return this.tag ? `some(${ this.value })` : 'none()';\n }\n }\n Optional.singletonNone = new Optional(false);\n\n const nativeSlice = Array.prototype.slice;\n const nativeIndexOf = Array.prototype.indexOf;\n const nativePush = Array.prototype.push;\n const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t);\n const contains$2 = (xs, x) => rawIndexOf(xs, x) > -1;\n const exists = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n const range$1 = (num, f) => {\n const r = [];\n for (let i = 0; i < num; i++) {\n r.push(f(i));\n }\n return r;\n };\n const map$1 = (xs, f) => {\n const len = xs.length;\n const r = new Array(len);\n for (let i = 0; i < len; i++) {\n const x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n const each$2 = (xs, f) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n f(x, i);\n }\n };\n const eachr = (xs, f) => {\n for (let i = xs.length - 1; i >= 0; i--) {\n const x = xs[i];\n f(x, i);\n }\n };\n const partition = (xs, pred) => {\n const pass = [];\n const fail = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n const arr = pred(x, i) ? pass : fail;\n arr.push(x);\n }\n return {\n pass,\n fail\n };\n };\n const filter$2 = (xs, pred) => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n const foldr = (xs, f, acc) => {\n eachr(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const foldl = (xs, f, acc) => {\n each$2(xs, (x, i) => {\n acc = f(acc, x, i);\n });\n return acc;\n };\n const findUntil = (xs, pred, until) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(x);\n } else if (until(x, i)) {\n break;\n }\n }\n return Optional.none();\n };\n const find$1 = (xs, pred) => {\n return findUntil(xs, pred, never);\n };\n const findIndex = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n if (pred(x, i)) {\n return Optional.some(i);\n }\n }\n return Optional.none();\n };\n const flatten = xs => {\n const r = [];\n for (let i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n const bind$2 = (xs, f) => flatten(map$1(xs, f));\n const forall = (xs, pred) => {\n for (let i = 0, len = xs.length; i < len; ++i) {\n const x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n const reverse = xs => {\n const r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n const mapToObject = (xs, f) => {\n const r = {};\n for (let i = 0, len = xs.length; i < len; i++) {\n const x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n const sort$1 = (xs, comparator) => {\n const copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n const get$d = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();\n const head = xs => get$d(xs, 0);\n const last$2 = xs => get$d(xs, xs.length - 1);\n const findMap = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n const r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Optional.none();\n };\n\n const keys = Object.keys;\n const hasOwnProperty = Object.hasOwnProperty;\n const each$1 = (obj, f) => {\n const props = keys(obj);\n for (let k = 0, len = props.length; k < len; k++) {\n const i = props[k];\n const x = obj[i];\n f(x, i);\n }\n };\n const map = (obj, f) => {\n return tupleMap(obj, (x, i) => ({\n k: i,\n v: f(x, i)\n }));\n };\n const tupleMap = (obj, f) => {\n const r = {};\n each$1(obj, (x, i) => {\n const tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n const objAcc = r => (x, i) => {\n r[i] = x;\n };\n const internalFilter = (obj, pred, onTrue, onFalse) => {\n each$1(obj, (x, i) => {\n (pred(x, i) ? onTrue : onFalse)(x, i);\n });\n };\n const filter$1 = (obj, pred) => {\n const t = {};\n internalFilter(obj, pred, objAcc(t), noop);\n return t;\n };\n const mapToArray = (obj, f) => {\n const r = [];\n each$1(obj, (value, name) => {\n r.push(f(value, name));\n });\n return r;\n };\n const values = obj => {\n return mapToArray(obj, identity);\n };\n const get$c = (obj, key) => {\n return has$1(obj, key) ? Optional.from(obj[key]) : Optional.none();\n };\n const has$1 = (obj, key) => hasOwnProperty.call(obj, key);\n const hasNonNullableKey = (obj, key) => has$1(obj, key) && obj[key] !== undefined && obj[key] !== null;\n const isEmpty = r => {\n for (const x in r) {\n if (hasOwnProperty.call(r, x)) {\n return false;\n }\n }\n return true;\n };\n\n const Global = typeof window !== 'undefined' ? window : Function('return this;')();\n\n const path = (parts, scope) => {\n let o = scope !== undefined && scope !== null ? scope : Global;\n for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n const resolve$2 = (p, scope) => {\n const parts = p.split('.');\n return path(parts, scope);\n };\n\n const unsafe = (name, scope) => {\n return resolve$2(name, scope);\n };\n const getOrDie = (name, scope) => {\n const actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n\n const getPrototypeOf = Object.getPrototypeOf;\n const sandHTMLElement = scope => {\n return getOrDie('HTMLElement', scope);\n };\n const isPrototypeOf = x => {\n const scope = resolve$2('ownerDocument.defaultView', x);\n return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\\w*Element$/.test(getPrototypeOf(x).constructor.name));\n };\n\n const COMMENT = 8;\n const DOCUMENT = 9;\n const DOCUMENT_FRAGMENT = 11;\n const ELEMENT = 1;\n const TEXT = 3;\n\n const name = element => {\n const r = element.dom.nodeName;\n return r.toLowerCase();\n };\n const type = element => element.dom.nodeType;\n const isType = t => element => type(element) === t;\n const isComment = element => type(element) === COMMENT || name(element) === '#comment';\n const isHTMLElement = element => isElement(element) && isPrototypeOf(element.dom);\n const isElement = isType(ELEMENT);\n const isText = isType(TEXT);\n const isDocument = isType(DOCUMENT);\n const isDocumentFragment = isType(DOCUMENT_FRAGMENT);\n const isTag = tag => e => isElement(e) && name(e) === tag;\n\n const rawSet = (dom, key, value) => {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n const set$2 = (element, key, value) => {\n rawSet(element.dom, key, value);\n };\n const setAll$1 = (element, attrs) => {\n const dom = element.dom;\n each$1(attrs, (v, k) => {\n rawSet(dom, k, v);\n });\n };\n const setOptions = (element, attrs) => {\n each$1(attrs, (v, k) => {\n v.fold(() => {\n remove$7(element, k);\n }, value => {\n rawSet(element.dom, k, value);\n });\n });\n };\n const get$b = (element, key) => {\n const v = element.dom.getAttribute(key);\n return v === null ? undefined : v;\n };\n const getOpt = (element, key) => Optional.from(get$b(element, key));\n const remove$7 = (element, key) => {\n element.dom.removeAttribute(key);\n };\n const clone$2 = element => foldl(element.dom.attributes, (acc, attr) => {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n\n const fromHtml$1 = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n const message = 'HTML does not have a single root node';\n console.error(message, html);\n throw new Error(message);\n }\n return fromDom$1(div.childNodes[0]);\n };\n const fromTag = (tag, scope) => {\n const doc = scope || document;\n const node = doc.createElement(tag);\n return fromDom$1(node);\n };\n const fromText = (text, scope) => {\n const doc = scope || document;\n const node = doc.createTextNode(text);\n return fromDom$1(node);\n };\n const fromDom$1 = node => {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: node };\n };\n const fromPoint$1 = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$1);\n const SugarElement = {\n fromHtml: fromHtml$1,\n fromTag,\n fromText,\n fromDom: fromDom$1,\n fromPoint: fromPoint$1\n };\n\n const is$2 = (element, selector) => {\n const dom = element.dom;\n if (dom.nodeType !== ELEMENT) {\n return false;\n } else {\n const elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;\n const all$1 = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? [] : map$1(base.querySelectorAll(selector), SugarElement.fromDom);\n };\n const one = (selector, scope) => {\n const base = scope === undefined ? document : scope.dom;\n return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom);\n };\n\n const eq$1 = (e1, e2) => e1.dom === e2.dom;\n const contains$1 = (e1, e2) => {\n const d1 = e1.dom;\n const d2 = e2.dom;\n return d1 === d2 ? false : d1.contains(d2);\n };\n const is$1 = is$2;\n\n const owner = element => SugarElement.fromDom(element.dom.ownerDocument);\n const documentOrOwner = dos => isDocument(dos) ? dos : owner(dos);\n const documentElement = element => SugarElement.fromDom(documentOrOwner(element).dom.documentElement);\n const defaultView = element => SugarElement.fromDom(documentOrOwner(element).dom.defaultView);\n const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);\n const parentElement = element => Optional.from(element.dom.parentElement).map(SugarElement.fromDom);\n const parents = (element, isRoot) => {\n const stop = isFunction(isRoot) ? isRoot : never;\n let dom = element.dom;\n const ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n const rawParent = dom.parentNode;\n const p = SugarElement.fromDom(rawParent);\n ret.push(p);\n if (stop(p) === true) {\n break;\n } else {\n dom = rawParent;\n }\n }\n return ret;\n };\n const prevSibling = element => Optional.from(element.dom.previousSibling).map(SugarElement.fromDom);\n const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);\n const children$2 = element => map$1(element.dom.childNodes, SugarElement.fromDom);\n const child$2 = (element, index) => {\n const cs = element.dom.childNodes;\n return Optional.from(cs[index]).map(SugarElement.fromDom);\n };\n const firstChild = element => child$2(element, 0);\n\n const before$3 = (marker, element) => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n v.dom.insertBefore(element.dom, marker.dom);\n });\n };\n const after$5 = (marker, element) => {\n const sibling = nextSibling(marker);\n sibling.fold(() => {\n const parent$1 = parent(marker);\n parent$1.each(v => {\n append$1(v, element);\n });\n }, v => {\n before$3(v, element);\n });\n };\n const prepend = (parent, element) => {\n const firstChild$1 = firstChild(parent);\n firstChild$1.fold(() => {\n append$1(parent, element);\n }, v => {\n parent.dom.insertBefore(element.dom, v.dom);\n });\n };\n const append$1 = (parent, element) => {\n parent.dom.appendChild(element.dom);\n };\n const appendAt = (parent, element, index) => {\n child$2(parent, index).fold(() => {\n append$1(parent, element);\n }, v => {\n before$3(v, element);\n });\n };\n const wrap = (element, wrapper) => {\n before$3(element, wrapper);\n append$1(wrapper, element);\n };\n\n const after$4 = (marker, elements) => {\n each$2(elements, (x, i) => {\n const e = i === 0 ? marker : elements[i - 1];\n after$5(e, x);\n });\n };\n const append = (parent, elements) => {\n each$2(elements, x => {\n append$1(parent, x);\n });\n };\n\n const empty = element => {\n element.dom.textContent = '';\n each$2(children$2(element), rogue => {\n remove$6(rogue);\n });\n };\n const remove$6 = element => {\n const dom = element.dom;\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n const unwrap = wrapper => {\n const children = children$2(wrapper);\n if (children.length > 0) {\n after$4(wrapper, children);\n }\n remove$6(wrapper);\n };\n\n const clone$1 = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep));\n const shallow = original => clone$1(original, false);\n const deep = original => clone$1(original, true);\n const shallowAs = (original, tag) => {\n const nu = SugarElement.fromTag(tag);\n const attributes = clone$2(original);\n setAll$1(nu, attributes);\n return nu;\n };\n const copy$2 = (original, tag) => {\n const nu = shallowAs(original, tag);\n const cloneChildren = children$2(deep(original));\n append(nu, cloneChildren);\n return nu;\n };\n const mutate$1 = (original, tag) => {\n const nu = shallowAs(original, tag);\n after$5(original, nu);\n const children = children$2(original);\n append(nu, children);\n remove$6(original);\n return nu;\n };\n\n const validSectionList = [\n 'tfoot',\n 'thead',\n 'tbody',\n 'colgroup'\n ];\n const isValidSection = parentName => contains$2(validSectionList, parentName);\n const grid = (rows, columns) => ({\n rows,\n columns\n });\n const address = (row, column) => ({\n row,\n column\n });\n const detail = (element, rowspan, colspan) => ({\n element,\n rowspan,\n colspan\n });\n const detailnew = (element, rowspan, colspan, isNew) => ({\n element,\n rowspan,\n colspan,\n isNew\n });\n const extended = (element, rowspan, colspan, row, column, isLocked) => ({\n element,\n rowspan,\n colspan,\n row,\n column,\n isLocked\n });\n const rowdetail = (element, cells, section) => ({\n element,\n cells,\n section\n });\n const rowdetailnew = (element, cells, section, isNew) => ({\n element,\n cells,\n section,\n isNew\n });\n const elementnew = (element, isNew, isLocked) => ({\n element,\n isNew,\n isLocked\n });\n const rowcells = (element, cells, section, isNew) => ({\n element,\n cells,\n section,\n isNew\n });\n const bounds = (startRow, startCol, finishRow, finishCol) => ({\n startRow,\n startCol,\n finishRow,\n finishCol\n });\n const columnext = (element, colspan, column) => ({\n element,\n colspan,\n column\n });\n const colgroup = (element, columns) => ({\n element,\n columns\n });\n\n const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);\n const supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);\n const isSupported$1 = constant(supported);\n const getRootNode = supported ? e => SugarElement.fromDom(e.dom.getRootNode()) : documentOrOwner;\n const getShadowRoot = e => {\n const r = getRootNode(e);\n return isShadowRoot(r) ? Optional.some(r) : Optional.none();\n };\n const getShadowHost = e => SugarElement.fromDom(e.dom.host);\n const getOriginalEventTarget = event => {\n if (isSupported$1() && isNonNullable(event.target)) {\n const el = SugarElement.fromDom(event.target);\n if (isElement(el) && isOpenShadowHost(el)) {\n if (event.composed && event.composedPath) {\n const composedPath = event.composedPath();\n if (composedPath) {\n return head(composedPath);\n }\n }\n }\n }\n return Optional.from(event.target);\n };\n const isOpenShadowHost = element => isNonNullable(element.dom.shadowRoot);\n\n const inBody = element => {\n const dom = isText(element) ? element.dom.parentNode : element.dom;\n if (dom === undefined || dom === null || dom.ownerDocument === null) {\n return false;\n }\n const doc = dom.ownerDocument;\n return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));\n };\n const body$1 = () => getBody$1(SugarElement.fromDom(document));\n const getBody$1 = doc => {\n const b = doc.dom.body;\n if (b === null || b === undefined) {\n throw new Error('Body is not available yet');\n }\n return SugarElement.fromDom(b);\n };\n\n const ancestors$4 = (scope, predicate, isRoot) => filter$2(parents(scope, isRoot), predicate);\n const children$1 = (scope, predicate) => filter$2(children$2(scope), predicate);\n const descendants$1 = (scope, predicate) => {\n let result = [];\n each$2(children$2(scope), x => {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(descendants$1(x, predicate));\n });\n return result;\n };\n\n const ancestors$3 = (scope, selector, isRoot) => ancestors$4(scope, e => is$2(e, selector), isRoot);\n const children = (scope, selector) => children$1(scope, e => is$2(e, selector));\n const descendants = (scope, selector) => all$1(selector, scope);\n\n var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {\n if (is(scope, a)) {\n return Optional.some(scope);\n } else if (isFunction(isRoot) && isRoot(scope)) {\n return Optional.none();\n } else {\n return ancestor(scope, a, isRoot);\n }\n };\n\n const ancestor$2 = (scope, predicate, isRoot) => {\n let element = scope.dom;\n const stop = isFunction(isRoot) ? isRoot : never;\n while (element.parentNode) {\n element = element.parentNode;\n const el = SugarElement.fromDom(element);\n if (predicate(el)) {\n return Optional.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Optional.none();\n };\n const closest$2 = (scope, predicate, isRoot) => {\n const is = (s, test) => test(s);\n return ClosestOrAncestor(is, ancestor$2, scope, predicate, isRoot);\n };\n const child$1 = (scope, predicate) => {\n const pred = node => predicate(SugarElement.fromDom(node));\n const result = find$1(scope.dom.childNodes, pred);\n return result.map(SugarElement.fromDom);\n };\n const descendant$1 = (scope, predicate) => {\n const descend = node => {\n for (let i = 0; i < node.childNodes.length; i++) {\n const child = SugarElement.fromDom(node.childNodes[i]);\n if (predicate(child)) {\n return Optional.some(child);\n }\n const res = descend(node.childNodes[i]);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope.dom);\n };\n\n const ancestor$1 = (scope, selector, isRoot) => ancestor$2(scope, e => is$2(e, selector), isRoot);\n const child = (scope, selector) => child$1(scope, e => is$2(e, selector));\n const descendant = (scope, selector) => one(selector, scope);\n const closest$1 = (scope, selector, isRoot) => {\n const is = (element, selector) => is$2(element, selector);\n return ClosestOrAncestor(is, ancestor$1, scope, selector, isRoot);\n };\n\n const is = (lhs, rhs, comparator = tripleEquals) => lhs.exists(left => comparator(left, rhs));\n const cat = arr => {\n const r = [];\n const push = x => {\n r.push(x);\n };\n for (let i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n const bindFrom = (a, f) => a !== undefined && a !== null ? f(a) : Optional.none();\n const someIf = (b, a) => b ? Optional.some(a) : Optional.none();\n\n const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;\n const contains = (str, substr, start = 0, end) => {\n const idx = str.indexOf(substr, start);\n if (idx !== -1) {\n return isUndefined(end) ? true : idx + substr.length <= end;\n } else {\n return false;\n }\n };\n const startsWith = (str, prefix) => {\n return checkRange(str, prefix, 0);\n };\n const endsWith = (str, suffix) => {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n const blank = r => s => s.replace(r, '');\n const trim = blank(/^\\s+|\\s+$/g);\n const isNotEmpty = s => s.length > 0;\n const toFloat = value => {\n const num = parseFloat(value);\n return isNaN(num) ? Optional.none() : Optional.some(num);\n };\n\n const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n\n const internalSet = (dom, property, value) => {\n if (!isString(value)) {\n console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n const internalRemove = (dom, property) => {\n if (isSupported(dom)) {\n dom.style.removeProperty(property);\n }\n };\n const set$1 = (element, property, value) => {\n const dom = element.dom;\n internalSet(dom, property, value);\n };\n const setAll = (element, css) => {\n const dom = element.dom;\n each$1(css, (v, k) => {\n internalSet(dom, k, v);\n });\n };\n const get$a = (element, property) => {\n const dom = element.dom;\n const styles = window.getComputedStyle(dom);\n const r = styles.getPropertyValue(property);\n return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n };\n const getUnsafeProperty = (dom, property) => isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n const getRaw$2 = (element, property) => {\n const dom = element.dom;\n const raw = getUnsafeProperty(dom, property);\n return Optional.from(raw).filter(r => r.length > 0);\n };\n const remove$5 = (element, property) => {\n const dom = element.dom;\n internalRemove(dom, property);\n if (is(getOpt(element, 'style').map(trim), '')) {\n remove$7(element, 'style');\n }\n };\n const copy$1 = (source, target) => {\n const sourceDom = source.dom;\n const targetDom = target.dom;\n if (isSupported(sourceDom) && isSupported(targetDom)) {\n targetDom.style.cssText = sourceDom.style.cssText;\n }\n };\n\n const getAttrValue = (cell, name, fallback = 0) => getOpt(cell, name).map(value => parseInt(value, 10)).getOr(fallback);\n const getSpan = (cell, type) => getAttrValue(cell, type, 1);\n const hasColspan = cellOrCol => {\n if (isTag('col')(cellOrCol)) {\n return getAttrValue(cellOrCol, 'span', 1) > 1;\n } else {\n return getSpan(cellOrCol, 'colspan') > 1;\n }\n };\n const hasRowspan = cell => getSpan(cell, 'rowspan') > 1;\n const getCssValue = (element, property) => parseInt(get$a(element, property), 10);\n const minWidth = constant(10);\n const minHeight = constant(10);\n\n const firstLayer = (scope, selector) => {\n return filterFirstLayer(scope, selector, always);\n };\n const filterFirstLayer = (scope, selector, predicate) => {\n return bind$2(children$2(scope), x => {\n if (is$2(x, selector)) {\n return predicate(x) ? [x] : [];\n } else {\n return filterFirstLayer(x, selector, predicate);\n }\n });\n };\n\n const lookup = (tags, element, isRoot = never) => {\n if (isRoot(element)) {\n return Optional.none();\n }\n if (contains$2(tags, name(element))) {\n return Optional.some(element);\n }\n const isRootOrUpperTable = elm => is$2(elm, 'table') || isRoot(elm);\n return ancestor$1(element, tags.join(','), isRootOrUpperTable);\n };\n const cell = (element, isRoot) => lookup([\n 'td',\n 'th'\n ], element, isRoot);\n const cells$1 = ancestor => firstLayer(ancestor, 'th,td');\n const columns$1 = ancestor => {\n if (is$2(ancestor, 'colgroup')) {\n return children(ancestor, 'col');\n } else {\n return bind$2(columnGroups(ancestor), columnGroup => children(columnGroup, 'col'));\n }\n };\n const table = (element, isRoot) => closest$1(element, 'table', isRoot);\n const rows$1 = ancestor => firstLayer(ancestor, 'tr');\n const columnGroups = ancestor => table(ancestor).fold(constant([]), table => children(table, 'colgroup'));\n\n const fromRowsOrColGroups = (elems, getSection) => map$1(elems, row => {\n if (name(row) === 'colgroup') {\n const cells = map$1(columns$1(row), column => {\n const colspan = getAttrValue(column, 'span', 1);\n return detail(column, 1, colspan);\n });\n return rowdetail(row, cells, 'colgroup');\n } else {\n const cells = map$1(cells$1(row), cell => {\n const rowspan = getAttrValue(cell, 'rowspan', 1);\n const colspan = getAttrValue(cell, 'colspan', 1);\n return detail(cell, rowspan, colspan);\n });\n return rowdetail(row, cells, getSection(row));\n }\n });\n const getParentSection = group => parent(group).map(parent => {\n const parentName = name(parent);\n return isValidSection(parentName) ? parentName : 'tbody';\n }).getOr('tbody');\n const fromTable$1 = table => {\n const rows = rows$1(table);\n const columnGroups$1 = columnGroups(table);\n const elems = [\n ...columnGroups$1,\n ...rows\n ];\n return fromRowsOrColGroups(elems, getParentSection);\n };\n const fromPastedRows = (elems, section) => fromRowsOrColGroups(elems, () => section);\n\n const cached = f => {\n let called = false;\n let r;\n return (...args) => {\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n const DeviceType = (os, browser, userAgent, mediaMatch) => {\n const isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n const isiPhone = os.isiOS() && !isiPad;\n const isMobile = os.isiOS() || os.isAndroid();\n const isTouch = isMobile || mediaMatch('(pointer:coarse)');\n const isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');\n const isPhone = isiPhone || isMobile && !isTablet;\n const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n const isDesktop = !isPhone && !isTablet && !iOSwebview;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview),\n isDesktop: constant(isDesktop)\n };\n };\n\n const firstMatch = (regexes, s) => {\n for (let i = 0; i < regexes.length; i++) {\n const x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n const find = (regexes, agent) => {\n const r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n const group = i => {\n return Number(agent.replace(r, '$' + i));\n };\n return nu$2(group(1), group(2));\n };\n const detect$5 = (versionRegexes, agent) => {\n const cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown$2();\n }\n return find(versionRegexes, cleanedAgent);\n };\n const unknown$2 = () => {\n return nu$2(0, 0);\n };\n const nu$2 = (major, minor) => {\n return {\n major,\n minor\n };\n };\n const Version = {\n nu: nu$2,\n detect: detect$5,\n unknown: unknown$2\n };\n\n const detectBrowser$1 = (browsers, userAgentData) => {\n return findMap(userAgentData.brands, uaBrand => {\n const lcBrand = uaBrand.brand.toLowerCase();\n return find$1(browsers, browser => {\n var _a;\n return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());\n }).map(info => ({\n current: info.name,\n version: Version.nu(parseInt(uaBrand.version, 10), 0)\n }));\n });\n };\n\n const detect$4 = (candidates, userAgent) => {\n const agent = String(userAgent).toLowerCase();\n return find$1(candidates, candidate => {\n return candidate.search(agent);\n });\n };\n const detectBrowser = (browsers, userAgent) => {\n return detect$4(browsers, userAgent).map(browser => {\n const version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version\n };\n });\n };\n const detectOs = (oses, userAgent) => {\n return detect$4(oses, userAgent).map(os => {\n const version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version\n };\n });\n };\n\n const normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n const checkContains = target => {\n return uastring => {\n return contains(uastring, target);\n };\n };\n const browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: uastring => {\n return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chromium',\n brand: 'Chromium',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: uastring => {\n return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: uastring => {\n return contains(uastring, 'msie') || contains(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: uastring => {\n return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');\n }\n }\n ];\n const oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: uastring => {\n return contains(uastring, 'iphone') || contains(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'macOS',\n search: checkContains('mac os x'),\n versionRegexes: [/.*?mac\\ os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n },\n {\n name: 'ChromeOS',\n search: checkContains('cros'),\n versionRegexes: [/.*?chrome\\/([0-9]+)\\.([0-9]+).*/]\n }\n ];\n const PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n const edge = 'Edge';\n const chromium = 'Chromium';\n const ie = 'IE';\n const opera = 'Opera';\n const firefox = 'Firefox';\n const safari = 'Safari';\n const unknown$1 = () => {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu$1 = info => {\n const current = info.current;\n const version = info.version;\n const isBrowser = name => () => current === name;\n return {\n current,\n version,\n isEdge: isBrowser(edge),\n isChromium: isBrowser(chromium),\n isIE: isBrowser(ie),\n isOpera: isBrowser(opera),\n isFirefox: isBrowser(firefox),\n isSafari: isBrowser(safari)\n };\n };\n const Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chromium: constant(chromium),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n const windows = 'Windows';\n const ios = 'iOS';\n const android = 'Android';\n const linux = 'Linux';\n const macos = 'macOS';\n const solaris = 'Solaris';\n const freebsd = 'FreeBSD';\n const chromeos = 'ChromeOS';\n const unknown = () => {\n return nu({\n current: undefined,\n version: Version.unknown()\n });\n };\n const nu = info => {\n const current = info.current;\n const version = info.version;\n const isOS = name => () => current === name;\n return {\n current,\n version,\n isWindows: isOS(windows),\n isiOS: isOS(ios),\n isAndroid: isOS(android),\n isMacOS: isOS(macos),\n isLinux: isOS(linux),\n isSolaris: isOS(solaris),\n isFreeBSD: isOS(freebsd),\n isChromeOS: isOS(chromeos)\n };\n };\n const OperatingSystem = {\n unknown,\n nu,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n macos: constant(macos),\n solaris: constant(solaris),\n freebsd: constant(freebsd),\n chromeos: constant(chromeos)\n };\n\n const detect$3 = (userAgent, userAgentDataOpt, mediaMatch) => {\n const browsers = PlatformInfo.browsers();\n const oses = PlatformInfo.oses();\n const browser = userAgentDataOpt.bind(userAgentData => detectBrowser$1(browsers, userAgentData)).orThunk(() => detectBrowser(browsers, userAgent)).fold(Browser.unknown, Browser.nu);\n const os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n const deviceType = DeviceType(os, browser, userAgent, mediaMatch);\n return {\n browser,\n os,\n deviceType\n };\n };\n const PlatformDetection = { detect: detect$3 };\n\n const mediaMatch = query => window.matchMedia(query).matches;\n let platform = cached(() => PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch));\n const detect$2 = () => platform();\n\n const Dimension = (name, getOffset) => {\n const set = (element, h) => {\n if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n }\n const dom = element.dom;\n if (isSupported(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n const get = element => {\n const r = getOffset(element);\n if (r <= 0 || r === null) {\n const css = get$a(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n const getOuter = get;\n const aggregate = (element, properties) => foldl(properties, (acc, property) => {\n const val = get$a(element, property);\n const value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n const max = (element, value, properties) => {\n const cumulativeInclusions = aggregate(element, properties);\n const absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set,\n get,\n getOuter,\n aggregate,\n max\n };\n };\n\n const toNumber = (px, fallback) => toFloat(px).getOr(fallback);\n const getProp = (element, name, fallback) => toNumber(get$a(element, name), fallback);\n const calcContentBoxSize = (element, size, upper, lower) => {\n const paddingUpper = getProp(element, `padding-${ upper }`, 0);\n const paddingLower = getProp(element, `padding-${ lower }`, 0);\n const borderUpper = getProp(element, `border-${ upper }-width`, 0);\n const borderLower = getProp(element, `border-${ lower }-width`, 0);\n return size - paddingUpper - paddingLower - borderUpper - borderLower;\n };\n const getCalculatedWidth = (element, boxSizing) => {\n const dom = element.dom;\n const width = dom.getBoundingClientRect().width || dom.offsetWidth;\n return boxSizing === 'border-box' ? width : calcContentBoxSize(element, width, 'left', 'right');\n };\n const getHeight$1 = element => getProp(element, 'height', element.dom.offsetHeight);\n const getWidth = element => getProp(element, 'width', element.dom.offsetWidth);\n const getInnerWidth = element => getCalculatedWidth(element, 'content-box');\n\n const api$2 = Dimension('width', element => element.dom.offsetWidth);\n const get$9 = element => api$2.get(element);\n const getOuter$2 = element => api$2.getOuter(element);\n const getInner = getInnerWidth;\n const getRuntime$1 = getWidth;\n\n const addCells = (gridRow, index, cells) => {\n const existingCells = gridRow.cells;\n const before = existingCells.slice(0, index);\n const after = existingCells.slice(index);\n const newCells = before.concat(cells).concat(after);\n return setCells(gridRow, newCells);\n };\n const addCell = (gridRow, index, cell) => addCells(gridRow, index, [cell]);\n const mutateCell = (gridRow, index, cell) => {\n const cells = gridRow.cells;\n cells[index] = cell;\n };\n const setCells = (gridRow, cells) => rowcells(gridRow.element, cells, gridRow.section, gridRow.isNew);\n const mapCells = (gridRow, f) => {\n const cells = gridRow.cells;\n const r = map$1(cells, f);\n return rowcells(gridRow.element, r, gridRow.section, gridRow.isNew);\n };\n const getCell = (gridRow, index) => gridRow.cells[index];\n const getCellElement = (gridRow, index) => getCell(gridRow, index).element;\n const cellLength = gridRow => gridRow.cells.length;\n const extractGridDetails = grid => {\n const result = partition(grid, row => row.section === 'colgroup');\n return {\n rows: result.fail,\n cols: result.pass\n };\n };\n const clone = (gridRow, cloneRow, cloneCell) => {\n const newCells = map$1(gridRow.cells, cloneCell);\n return rowcells(cloneRow(gridRow.element), newCells, gridRow.section, true);\n };\n\n const LOCKED_COL_ATTR = 'data-snooker-locked-cols';\n const getLockedColumnsFromTable = table => getOpt(table, LOCKED_COL_ATTR).bind(lockedColStr => Optional.from(lockedColStr.match(/\\d+/g))).map(lockedCols => mapToObject(lockedCols, always));\n const getLockedColumnsFromGrid = grid => {\n const locked = foldl(extractGridDetails(grid).rows, (acc, row) => {\n each$2(row.cells, (cell, idx) => {\n if (cell.isLocked) {\n acc[idx] = true;\n }\n });\n return acc;\n }, {});\n const lockedArr = mapToArray(locked, (_val, key) => parseInt(key, 10));\n return sort$1(lockedArr);\n };\n\n const key = (row, column) => {\n return row + ',' + column;\n };\n const getAt = (warehouse, row, column) => Optional.from(warehouse.access[key(row, column)]);\n const findItem = (warehouse, item, comparator) => {\n const filtered = filterItems(warehouse, detail => {\n return comparator(item, detail.element);\n });\n return filtered.length > 0 ? Optional.some(filtered[0]) : Optional.none();\n };\n const filterItems = (warehouse, predicate) => {\n const all = bind$2(warehouse.all, r => {\n return r.cells;\n });\n return filter$2(all, predicate);\n };\n const generateColumns = rowData => {\n const columnsGroup = {};\n let index = 0;\n each$2(rowData.cells, column => {\n const colspan = column.colspan;\n range$1(colspan, columnIndex => {\n const colIndex = index + columnIndex;\n columnsGroup[colIndex] = columnext(column.element, colspan, colIndex);\n });\n index += colspan;\n });\n return columnsGroup;\n };\n const generate$1 = list => {\n const access = {};\n const cells = [];\n const tableOpt = head(list).map(rowData => rowData.element).bind(table);\n const lockedColumns = tableOpt.bind(getLockedColumnsFromTable).getOr({});\n let maxRows = 0;\n let maxColumns = 0;\n let rowCount = 0;\n const {\n pass: colgroupRows,\n fail: rows\n } = partition(list, rowData => rowData.section === 'colgroup');\n each$2(rows, rowData => {\n const currentRow = [];\n each$2(rowData.cells, rowCell => {\n let start = 0;\n while (access[key(rowCount, start)] !== undefined) {\n start++;\n }\n const isLocked = hasNonNullableKey(lockedColumns, start.toString());\n const current = extended(rowCell.element, rowCell.rowspan, rowCell.colspan, rowCount, start, isLocked);\n for (let occupiedColumnPosition = 0; occupiedColumnPosition < rowCell.colspan; occupiedColumnPosition++) {\n for (let occupiedRowPosition = 0; occupiedRowPosition < rowCell.rowspan; occupiedRowPosition++) {\n const rowPosition = rowCount + occupiedRowPosition;\n const columnPosition = start + occupiedColumnPosition;\n const newpos = key(rowPosition, columnPosition);\n access[newpos] = current;\n maxColumns = Math.max(maxColumns, columnPosition + 1);\n }\n }\n currentRow.push(current);\n });\n maxRows++;\n cells.push(rowdetail(rowData.element, currentRow, rowData.section));\n rowCount++;\n });\n const {columns, colgroups} = last$2(colgroupRows).map(rowData => {\n const columns = generateColumns(rowData);\n const colgroup$1 = colgroup(rowData.element, values(columns));\n return {\n colgroups: [colgroup$1],\n columns\n };\n }).getOrThunk(() => ({\n colgroups: [],\n columns: {}\n }));\n const grid$1 = grid(maxRows, maxColumns);\n return {\n grid: grid$1,\n access,\n all: cells,\n columns,\n colgroups\n };\n };\n const fromTable = table => {\n const list = fromTable$1(table);\n return generate$1(list);\n };\n const justCells = warehouse => bind$2(warehouse.all, w => w.cells);\n const justColumns = warehouse => values(warehouse.columns);\n const hasColumns = warehouse => keys(warehouse.columns).length > 0;\n const getColumnAt = (warehouse, columnIndex) => Optional.from(warehouse.columns[columnIndex]);\n const Warehouse = {\n fromTable,\n generate: generate$1,\n getAt,\n findItem,\n filterItems,\n justCells,\n justColumns,\n hasColumns,\n getColumnAt\n };\n\n const columns = (warehouse, isValidCell = always) => {\n const grid = warehouse.grid;\n const cols = range$1(grid.columns, identity);\n const rowsArr = range$1(grid.rows, identity);\n return map$1(cols, col => {\n const getBlock = () => bind$2(rowsArr, r => Warehouse.getAt(warehouse, r, col).filter(detail => detail.column === col).toArray());\n const isValid = detail => detail.colspan === 1 && isValidCell(detail.element);\n const getFallback = () => Warehouse.getAt(warehouse, 0, col);\n return decide(getBlock, isValid, getFallback);\n });\n };\n const decide = (getBlock, isValid, getFallback) => {\n const inBlock = getBlock();\n const validInBlock = find$1(inBlock, isValid);\n const detailOption = validInBlock.orThunk(() => Optional.from(inBlock[0]).orThunk(getFallback));\n return detailOption.map(detail => detail.element);\n };\n const rows = warehouse => {\n const grid = warehouse.grid;\n const rowsArr = range$1(grid.rows, identity);\n const cols = range$1(grid.columns, identity);\n return map$1(rowsArr, row => {\n const getBlock = () => bind$2(cols, c => Warehouse.getAt(warehouse, row, c).filter(detail => detail.row === row).fold(constant([]), detail => [detail]));\n const isSingle = detail => detail.rowspan === 1;\n const getFallback = () => Warehouse.getAt(warehouse, row, 0);\n return decide(getBlock, isSingle, getFallback);\n });\n };\n\n const deduce = (xs, index) => {\n if (index < 0 || index >= xs.length - 1) {\n return Optional.none();\n }\n const current = xs[index].fold(() => {\n const rest = reverse(xs.slice(0, index));\n return findMap(rest, (a, i) => a.map(aa => ({\n value: aa,\n delta: i + 1\n })));\n }, c => Optional.some({\n value: c,\n delta: 0\n }));\n const next = xs[index + 1].fold(() => {\n const rest = xs.slice(index + 1);\n return findMap(rest, (a, i) => a.map(aa => ({\n value: aa,\n delta: i + 1\n })));\n }, n => Optional.some({\n value: n,\n delta: 1\n }));\n return current.bind(c => next.map(n => {\n const extras = n.delta + c.delta;\n return Math.abs(n.value - c.value) / extras;\n }));\n };\n\n const onDirection = (isLtr, isRtl) => element => getDirection(element) === 'rtl' ? isRtl : isLtr;\n const getDirection = element => get$a(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n\n const api$1 = Dimension('height', element => {\n const dom = element.dom;\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n const get$8 = element => api$1.get(element);\n const getOuter$1 = element => api$1.getOuter(element);\n const getRuntime = getHeight$1;\n\n const r = (left, top) => {\n const translate = (x, y) => r(left + x, top + y);\n return {\n left,\n top,\n translate\n };\n };\n const SugarPosition = r;\n\n const boxPosition = dom => {\n const box = dom.getBoundingClientRect();\n return SugarPosition(box.left, box.top);\n };\n const firstDefinedOrZero = (a, b) => {\n if (a !== undefined) {\n return a;\n } else {\n return b !== undefined ? b : 0;\n }\n };\n const absolute = element => {\n const doc = element.dom.ownerDocument;\n const body = doc.body;\n const win = doc.defaultView;\n const html = doc.documentElement;\n if (body === element.dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n const scrollTop = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageYOffset, html.scrollTop);\n const scrollLeft = firstDefinedOrZero(win === null || win === void 0 ? void 0 : win.pageXOffset, html.scrollLeft);\n const clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n const clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n const viewport = element => {\n const dom = element.dom;\n const doc = dom.ownerDocument;\n const body = doc.body;\n if (body === dom) {\n return SugarPosition(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return SugarPosition(0, 0);\n }\n return boxPosition(dom);\n };\n\n const rowInfo = (row, y) => ({\n row,\n y\n });\n const colInfo = (col, x) => ({\n col,\n x\n });\n const rtlEdge = cell => {\n const pos = absolute(cell);\n return pos.left + getOuter$2(cell);\n };\n const ltrEdge = cell => {\n return absolute(cell).left;\n };\n const getLeftEdge = (index, cell) => {\n return colInfo(index, ltrEdge(cell));\n };\n const getRightEdge = (index, cell) => {\n return colInfo(index, rtlEdge(cell));\n };\n const getTop$1 = cell => {\n return absolute(cell).top;\n };\n const getTopEdge = (index, cell) => {\n return rowInfo(index, getTop$1(cell));\n };\n const getBottomEdge = (index, cell) => {\n return rowInfo(index, getTop$1(cell) + getOuter$1(cell));\n };\n const findPositions = (getInnerEdge, getOuterEdge, array) => {\n if (array.length === 0) {\n return [];\n }\n const lines = map$1(array.slice(1), (cellOption, index) => {\n return cellOption.map(cell => {\n return getInnerEdge(index, cell);\n });\n });\n const lastLine = array[array.length - 1].map(cell => {\n return getOuterEdge(array.length - 1, cell);\n });\n return lines.concat([lastLine]);\n };\n const negate = step => {\n return -step;\n };\n const height = {\n delta: identity,\n positions: optElements => findPositions(getTopEdge, getBottomEdge, optElements),\n edge: getTop$1\n };\n const ltr$1 = {\n delta: identity,\n edge: ltrEdge,\n positions: optElements => findPositions(getLeftEdge, getRightEdge, optElements)\n };\n const rtl$1 = {\n delta: negate,\n edge: rtlEdge,\n positions: optElements => findPositions(getRightEdge, getLeftEdge, optElements)\n };\n const detect$1 = onDirection(ltr$1, rtl$1);\n const width = {\n delta: (amount, table) => detect$1(table).delta(amount, table),\n positions: (cols, table) => detect$1(table).positions(cols, table),\n edge: cell => detect$1(cell).edge(cell)\n };\n\n const units = {\n unsupportedLength: [\n 'em',\n 'ex',\n 'cap',\n 'ch',\n 'ic',\n 'rem',\n 'lh',\n 'rlh',\n 'vw',\n 'vh',\n 'vi',\n 'vb',\n 'vmin',\n 'vmax',\n 'cm',\n 'mm',\n 'Q',\n 'in',\n 'pc',\n 'pt',\n 'px'\n ],\n fixed: [\n 'px',\n 'pt'\n ],\n relative: ['%'],\n empty: ['']\n };\n const pattern = (() => {\n const decimalDigits = '[0-9]+';\n const signedInteger = '[+-]?' + decimalDigits;\n const exponentPart = '[eE]' + signedInteger;\n const dot = '\\\\.';\n const opt = input => `(?:${ input })?`;\n const unsignedDecimalLiteral = [\n 'Infinity',\n decimalDigits + dot + opt(decimalDigits) + opt(exponentPart),\n dot + decimalDigits + opt(exponentPart),\n decimalDigits + opt(exponentPart)\n ].join('|');\n const float = `[+-]?(?:${ unsignedDecimalLiteral })`;\n return new RegExp(`^(${ float })(.*)$`);\n })();\n const isUnit = (unit, accepted) => exists(accepted, acc => exists(units[acc], check => unit === check));\n const parse = (input, accepted) => {\n const match = Optional.from(pattern.exec(input));\n return match.bind(array => {\n const value = Number(array[1]);\n const unitRaw = array[2];\n if (isUnit(unitRaw, accepted)) {\n return Optional.some({\n value,\n unit: unitRaw\n });\n } else {\n return Optional.none();\n }\n });\n };\n\n const rPercentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n const rPixelBasedSizeRegex = /(\\d+(\\.\\d+)?)px|em/;\n const isCol$2 = isTag('col');\n const getPercentSize = (elm, outerGetter, innerGetter) => {\n const relativeParent = parentElement(elm).getOrThunk(() => getBody$1(owner(elm)));\n return outerGetter(elm) / innerGetter(relativeParent) * 100;\n };\n const setPixelWidth = (cell, amount) => {\n set$1(cell, 'width', amount + 'px');\n };\n const setPercentageWidth = (cell, amount) => {\n set$1(cell, 'width', amount + '%');\n };\n const setHeight = (cell, amount) => {\n set$1(cell, 'height', amount + 'px');\n };\n const getHeightValue = cell => getRuntime(cell) + 'px';\n const convert = (cell, number, getter, setter) => {\n const newSize = table(cell).map(table => {\n const total = getter(table);\n return Math.floor(number / 100 * total);\n }).getOr(number);\n setter(cell, newSize);\n return newSize;\n };\n const normalizePixelSize = (value, cell, getter, setter) => {\n const number = parseFloat(value);\n return endsWith(value, '%') && name(cell) !== 'table' ? convert(cell, number, getter, setter) : number;\n };\n const getTotalHeight = cell => {\n const value = getHeightValue(cell);\n if (!value) {\n return get$8(cell);\n }\n return normalizePixelSize(value, cell, get$8, setHeight);\n };\n const get$7 = (cell, type, f) => {\n const v = f(cell);\n const span = getSpan(cell, type);\n return v / span;\n };\n const getRaw$1 = (element, prop) => {\n return getRaw$2(element, prop).orThunk(() => {\n return getOpt(element, prop).map(val => val + 'px');\n });\n };\n const getRawWidth$1 = element => getRaw$1(element, 'width');\n const getRawHeight = element => getRaw$1(element, 'height');\n const getPercentageWidth = cell => getPercentSize(cell, get$9, getInner);\n const getPixelWidth$1 = cell => isCol$2(cell) ? get$9(cell) : getRuntime$1(cell);\n const getHeight = cell => {\n return get$7(cell, 'rowspan', getTotalHeight);\n };\n const getGenericWidth = cell => {\n const width = getRawWidth$1(cell);\n return width.bind(w => parse(w, [\n 'fixed',\n 'relative',\n 'empty'\n ]));\n };\n const setGenericWidth = (cell, amount, unit) => {\n set$1(cell, 'width', amount + unit);\n };\n const getPixelTableWidth = table => get$9(table) + 'px';\n const getPercentTableWidth = table => getPercentSize(table, get$9, getInner) + '%';\n const isPercentSizing$1 = table => getRawWidth$1(table).exists(size => rPercentageBasedSizeRegex.test(size));\n const isPixelSizing$1 = table => getRawWidth$1(table).exists(size => rPixelBasedSizeRegex.test(size));\n const isNoneSizing$1 = table => getRawWidth$1(table).isNone();\n const percentageBasedSizeRegex = constant(rPercentageBasedSizeRegex);\n\n const isCol$1 = isTag('col');\n const getRawW = cell => {\n return getRawWidth$1(cell).getOrThunk(() => getPixelWidth$1(cell) + 'px');\n };\n const getRawH = cell => {\n return getRawHeight(cell).getOrThunk(() => getHeight(cell) + 'px');\n };\n const justCols = warehouse => map$1(Warehouse.justColumns(warehouse), column => Optional.from(column.element));\n const isValidColumn = cell => {\n const browser = detect$2().browser;\n const supportsColWidths = browser.isChromium() || browser.isFirefox();\n return isCol$1(cell) ? supportsColWidths : true;\n };\n const getDimension = (cellOpt, index, backups, filter, getter, fallback) => cellOpt.filter(filter).fold(() => fallback(deduce(backups, index)), cell => getter(cell));\n const getWidthFrom = (warehouse, table, getWidth, fallback) => {\n const columnCells = columns(warehouse);\n const columns$1 = Warehouse.hasColumns(warehouse) ? justCols(warehouse) : columnCells;\n const backups = [Optional.some(width.edge(table))].concat(map$1(width.positions(columnCells, table), pos => pos.map(p => p.x)));\n const colFilter = not(hasColspan);\n return map$1(columns$1, (cellOption, c) => {\n return getDimension(cellOption, c, backups, colFilter, column => {\n if (isValidColumn(column)) {\n return getWidth(column);\n } else {\n const cell = bindFrom(columnCells[c], identity);\n return getDimension(cell, c, backups, colFilter, cell => fallback(Optional.some(get$9(cell))), fallback);\n }\n }, fallback);\n });\n };\n const getDeduced = deduced => {\n return deduced.map(d => {\n return d + 'px';\n }).getOr('');\n };\n const getRawWidths = (warehouse, table) => {\n return getWidthFrom(warehouse, table, getRawW, getDeduced);\n };\n const getPercentageWidths = (warehouse, table, tableSize) => {\n return getWidthFrom(warehouse, table, getPercentageWidth, deduced => {\n return deduced.fold(() => {\n return tableSize.minCellWidth();\n }, cellWidth => {\n return cellWidth / tableSize.pixelWidth() * 100;\n });\n });\n };\n const getPixelWidths = (warehouse, table, tableSize) => {\n return getWidthFrom(warehouse, table, getPixelWidth$1, deduced => {\n return deduced.getOrThunk(tableSize.minCellWidth);\n });\n };\n const getHeightFrom = (warehouse, table, direction, getHeight, fallback) => {\n const rows$1 = rows(warehouse);\n const backups = [Optional.some(direction.edge(table))].concat(map$1(direction.positions(rows$1, table), pos => pos.map(p => p.y)));\n return map$1(rows$1, (cellOption, c) => {\n return getDimension(cellOption, c, backups, not(hasRowspan), getHeight, fallback);\n });\n };\n const getPixelHeights = (warehouse, table, direction) => {\n return getHeightFrom(warehouse, table, direction, getHeight, deduced => {\n return deduced.getOrThunk(minHeight);\n });\n };\n const getRawHeights = (warehouse, table, direction) => {\n return getHeightFrom(warehouse, table, direction, getRawH, getDeduced);\n };\n\n const widthLookup = (table, getter) => () => {\n if (inBody(table)) {\n return getter(table);\n } else {\n return parseFloat(getRaw$2(table, 'width').getOr('0'));\n }\n };\n const noneSize = table => {\n const getWidth = widthLookup(table, get$9);\n const zero = constant(0);\n const getWidths = (warehouse, tableSize) => getPixelWidths(warehouse, table, tableSize);\n return {\n width: getWidth,\n pixelWidth: getWidth,\n getWidths,\n getCellDelta: zero,\n singleColumnWidth: constant([0]),\n minCellWidth: zero,\n setElementWidth: noop,\n adjustTableWidth: noop,\n isRelative: true,\n label: 'none'\n };\n };\n const percentageSize = table => {\n const getFloatWidth = widthLookup(table, elem => parseFloat(getPercentTableWidth(elem)));\n const getWidth = widthLookup(table, get$9);\n const getCellDelta = delta => delta / getWidth() * 100;\n const singleColumnWidth = (w, _delta) => [100 - w];\n const minCellWidth = () => minWidth() / getWidth() * 100;\n const adjustTableWidth = delta => {\n const currentWidth = getFloatWidth();\n const change = delta / 100 * currentWidth;\n const newWidth = currentWidth + change;\n setPercentageWidth(table, newWidth);\n };\n const getWidths = (warehouse, tableSize) => getPercentageWidths(warehouse, table, tableSize);\n return {\n width: getFloatWidth,\n pixelWidth: getWidth,\n getWidths,\n getCellDelta,\n singleColumnWidth,\n minCellWidth,\n setElementWidth: setPercentageWidth,\n adjustTableWidth,\n isRelative: true,\n label: 'percent'\n };\n };\n const pixelSize = table => {\n const getWidth = widthLookup(table, get$9);\n const getCellDelta = identity;\n const singleColumnWidth = (w, delta) => {\n const newNext = Math.max(minWidth(), w + delta);\n return [newNext - w];\n };\n const adjustTableWidth = delta => {\n const newWidth = getWidth() + delta;\n setPixelWidth(table, newWidth);\n };\n const getWidths = (warehouse, tableSize) => getPixelWidths(warehouse, table, tableSize);\n return {\n width: getWidth,\n pixelWidth: getWidth,\n getWidths,\n getCellDelta,\n singleColumnWidth,\n minCellWidth: minWidth,\n setElementWidth: setPixelWidth,\n adjustTableWidth,\n isRelative: false,\n label: 'pixel'\n };\n };\n const chooseSize = (element, width) => {\n const percentMatch = percentageBasedSizeRegex().exec(width);\n if (percentMatch !== null) {\n return percentageSize(element);\n } else {\n return pixelSize(element);\n }\n };\n const getTableSize = table => {\n const width = getRawWidth$1(table);\n return width.fold(() => noneSize(table), w => chooseSize(table, w));\n };\n const TableSize = {\n getTableSize,\n pixelSize,\n percentageSize,\n noneSize\n };\n\n const statsStruct = (minRow, minCol, maxRow, maxCol, allCells, selectedCells) => ({\n minRow,\n minCol,\n maxRow,\n maxCol,\n allCells,\n selectedCells\n });\n const findSelectedStats = (house, isSelected) => {\n const totalColumns = house.grid.columns;\n const totalRows = house.grid.rows;\n let minRow = totalRows;\n let minCol = totalColumns;\n let maxRow = 0;\n let maxCol = 0;\n const allCells = [];\n const selectedCells = [];\n each$1(house.access, detail => {\n allCells.push(detail);\n if (isSelected(detail)) {\n selectedCells.push(detail);\n const startRow = detail.row;\n const endRow = startRow + detail.rowspan - 1;\n const startCol = detail.column;\n const endCol = startCol + detail.colspan - 1;\n if (startRow < minRow) {\n minRow = startRow;\n } else if (endRow > maxRow) {\n maxRow = endRow;\n }\n if (startCol < minCol) {\n minCol = startCol;\n } else if (endCol > maxCol) {\n maxCol = endCol;\n }\n }\n });\n return statsStruct(minRow, minCol, maxRow, maxCol, allCells, selectedCells);\n };\n const makeCell = (list, seenSelected, rowIndex) => {\n const row = list[rowIndex].element;\n const td = SugarElement.fromTag('td');\n append$1(td, SugarElement.fromTag('br'));\n const f = seenSelected ? append$1 : prepend;\n f(row, td);\n };\n const fillInGaps = (list, house, stats, isSelected) => {\n const rows = filter$2(list, row => row.section !== 'colgroup');\n const totalColumns = house.grid.columns;\n const totalRows = house.grid.rows;\n for (let i = 0; i < totalRows; i++) {\n let seenSelected = false;\n for (let j = 0; j < totalColumns; j++) {\n if (!(i < stats.minRow || i > stats.maxRow || j < stats.minCol || j > stats.maxCol)) {\n const needCell = Warehouse.getAt(house, i, j).filter(isSelected).isNone();\n if (needCell) {\n makeCell(rows, seenSelected, i);\n } else {\n seenSelected = true;\n }\n }\n }\n }\n };\n const clean = (replica, stats, house, widthDelta) => {\n each$1(house.columns, col => {\n if (col.column < stats.minCol || col.column > stats.maxCol) {\n remove$6(col.element);\n }\n });\n const emptyRows = filter$2(firstLayer(replica, 'tr'), row => row.dom.childElementCount === 0);\n each$2(emptyRows, remove$6);\n if (stats.minCol === stats.maxCol || stats.minRow === stats.maxRow) {\n each$2(firstLayer(replica, 'th,td'), cell => {\n remove$7(cell, 'rowspan');\n remove$7(cell, 'colspan');\n });\n }\n remove$7(replica, LOCKED_COL_ATTR);\n remove$7(replica, 'data-snooker-col-series');\n const tableSize = TableSize.getTableSize(replica);\n tableSize.adjustTableWidth(widthDelta);\n };\n const getTableWidthDelta = (table, warehouse, tableSize, stats) => {\n if (stats.minCol === 0 && warehouse.grid.columns === stats.maxCol + 1) {\n return 0;\n }\n const colWidths = getPixelWidths(warehouse, table, tableSize);\n const allColsWidth = foldl(colWidths, (acc, width) => acc + width, 0);\n const selectedColsWidth = foldl(colWidths.slice(stats.minCol, stats.maxCol + 1), (acc, width) => acc + width, 0);\n const newWidth = selectedColsWidth / allColsWidth * tableSize.pixelWidth();\n const delta = newWidth - tableSize.pixelWidth();\n return tableSize.getCellDelta(delta);\n };\n const extract$1 = (table, selectedSelector) => {\n const isSelected = detail => is$2(detail.element, selectedSelector);\n const replica = deep(table);\n const list = fromTable$1(replica);\n const tableSize = TableSize.getTableSize(table);\n const replicaHouse = Warehouse.generate(list);\n const replicaStats = findSelectedStats(replicaHouse, isSelected);\n const selector = 'th:not(' + selectedSelector + ')' + ',td:not(' + selectedSelector + ')';\n const unselectedCells = filterFirstLayer(replica, 'th,td', cell => is$2(cell, selector));\n each$2(unselectedCells, remove$6);\n fillInGaps(list, replicaHouse, replicaStats, isSelected);\n const house = Warehouse.fromTable(table);\n const widthDelta = getTableWidthDelta(table, house, tableSize, replicaStats);\n clean(replica, replicaStats, replicaHouse, widthDelta);\n return replica;\n };\n\n const nbsp = '\\xA0';\n\n const NodeValue = (is, name) => {\n const get = element => {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();\n const set = (element, value) => {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom.nodeValue = value;\n };\n return {\n get,\n getOption,\n set\n };\n };\n\n const api = NodeValue(isText, 'text');\n const get$6 = element => api.get(element);\n const getOption = element => api.getOption(element);\n const set = (element, value) => api.set(element, value);\n\n const getEnd = element => name(element) === 'img' ? 1 : getOption(element).fold(() => children$2(element).length, v => v.length);\n const isTextNodeWithCursorPosition = el => getOption(el).filter(text => text.trim().length !== 0 || text.indexOf(nbsp) > -1).isSome();\n const isContentEditableFalse = elem => isHTMLElement(elem) && get$b(elem, 'contenteditable') === 'false';\n const elementsWithCursorPosition = [\n 'img',\n 'br'\n ];\n const isCursorPosition = elem => {\n const hasCursorPosition = isTextNodeWithCursorPosition(elem);\n return hasCursorPosition || contains$2(elementsWithCursorPosition, name(elem)) || isContentEditableFalse(elem);\n };\n\n const first = element => descendant$1(element, isCursorPosition);\n const last$1 = element => descendantRtl(element, isCursorPosition);\n const descendantRtl = (scope, predicate) => {\n const descend = element => {\n const children = children$2(element);\n for (let i = children.length - 1; i >= 0; i--) {\n const child = children[i];\n if (predicate(child)) {\n return Optional.some(child);\n }\n const res = descend(child);\n if (res.isSome()) {\n return res;\n }\n }\n return Optional.none();\n };\n return descend(scope);\n };\n\n const transferableAttributes = {\n scope: [\n 'row',\n 'col'\n ]\n };\n const createCell = doc => () => {\n const td = SugarElement.fromTag('td', doc.dom);\n append$1(td, SugarElement.fromTag('br', doc.dom));\n return td;\n };\n const createCol = doc => () => {\n return SugarElement.fromTag('col', doc.dom);\n };\n const createColgroup = doc => () => {\n return SugarElement.fromTag('colgroup', doc.dom);\n };\n const createRow$1 = doc => () => {\n return SugarElement.fromTag('tr', doc.dom);\n };\n const replace$1 = (cell, tag, attrs) => {\n const replica = copy$2(cell, tag);\n each$1(attrs, (v, k) => {\n if (v === null) {\n remove$7(replica, k);\n } else {\n set$2(replica, k, v);\n }\n });\n return replica;\n };\n const pasteReplace = cell => {\n return cell;\n };\n const cloneFormats = (oldCell, newCell, formats) => {\n const first$1 = first(oldCell);\n return first$1.map(firstText => {\n const formatSelector = formats.join(',');\n const parents = ancestors$3(firstText, formatSelector, element => {\n return eq$1(element, oldCell);\n });\n return foldr(parents, (last, parent) => {\n const clonedFormat = shallow(parent);\n append$1(last, clonedFormat);\n return clonedFormat;\n }, newCell);\n }).getOr(newCell);\n };\n const cloneAppropriateAttributes = (original, clone) => {\n each$1(transferableAttributes, (validAttributes, attributeName) => getOpt(original, attributeName).filter(attribute => contains$2(validAttributes, attribute)).each(attribute => set$2(clone, attributeName, attribute)));\n };\n const cellOperations = (mutate, doc, formatsToClone) => {\n const cloneCss = (prev, clone) => {\n copy$1(prev.element, clone);\n remove$5(clone, 'height');\n if (prev.colspan !== 1) {\n remove$5(clone, 'width');\n }\n };\n const newCell = prev => {\n const td = SugarElement.fromTag(name(prev.element), doc.dom);\n const formats = formatsToClone.getOr([\n 'strong',\n 'em',\n 'b',\n 'i',\n 'span',\n 'font',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'p',\n 'div'\n ]);\n const lastNode = formats.length > 0 ? cloneFormats(prev.element, td, formats) : td;\n append$1(lastNode, SugarElement.fromTag('br'));\n cloneCss(prev, td);\n cloneAppropriateAttributes(prev.element, td);\n mutate(prev.element, td);\n return td;\n };\n const newCol = prev => {\n const col = SugarElement.fromTag(name(prev.element), doc.dom);\n cloneCss(prev, col);\n mutate(prev.element, col);\n return col;\n };\n return {\n col: newCol,\n colgroup: createColgroup(doc),\n row: createRow$1(doc),\n cell: newCell,\n replace: replace$1,\n colGap: createCol(doc),\n gap: createCell(doc)\n };\n };\n const paste$1 = doc => {\n return {\n col: createCol(doc),\n colgroup: createColgroup(doc),\n row: createRow$1(doc),\n cell: createCell(doc),\n replace: pasteReplace,\n colGap: createCol(doc),\n gap: createCell(doc)\n };\n };\n\n const fromHtml = (html, scope) => {\n const doc = scope || document;\n const div = doc.createElement('div');\n div.innerHTML = html;\n return children$2(SugarElement.fromDom(div));\n };\n const fromDom = nodes => map$1(nodes, SugarElement.fromDom);\n\n const option = name => editor => editor.options.get(name);\n const defaultWidth = '100%';\n const getPixelForcedWidth = editor => {\n var _a;\n const dom = editor.dom;\n const parentBlock = (_a = dom.getParent(editor.selection.getStart(), dom.isBlock)) !== null && _a !== void 0 ? _a : editor.getBody();\n return getInner(SugarElement.fromDom(parentBlock)) + 'px';\n };\n const determineDefaultTableStyles = (editor, defaultStyles) => {\n if (isTableResponsiveForced(editor) || !shouldStyleWithCss(editor)) {\n return defaultStyles;\n } else if (isTablePixelsForced(editor)) {\n return {\n ...defaultStyles,\n width: getPixelForcedWidth(editor)\n };\n } else {\n return {\n ...defaultStyles,\n width: defaultWidth\n };\n }\n };\n const determineDefaultTableAttributes = (editor, defaultAttributes) => {\n if (isTableResponsiveForced(editor) || shouldStyleWithCss(editor)) {\n return defaultAttributes;\n } else if (isTablePixelsForced(editor)) {\n return {\n ...defaultAttributes,\n width: getPixelForcedWidth(editor)\n };\n } else {\n return {\n ...defaultAttributes,\n width: defaultWidth\n };\n }\n };\n const register = editor => {\n const registerOption = editor.options.register;\n registerOption('table_clone_elements', { processor: 'string[]' });\n registerOption('table_use_colgroups', {\n processor: 'boolean',\n default: true\n });\n registerOption('table_header_type', {\n processor: value => {\n const valid = contains$2([\n 'section',\n 'cells',\n 'sectionCells',\n 'auto'\n ], value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be one of: section, cells, sectionCells or auto.'\n };\n },\n default: 'section'\n });\n registerOption('table_sizing_mode', {\n processor: 'string',\n default: 'auto'\n });\n registerOption('table_default_attributes', {\n processor: 'object',\n default: { border: '1' }\n });\n registerOption('table_default_styles', {\n processor: 'object',\n default: { 'border-collapse': 'collapse' }\n });\n registerOption('table_column_resizing', {\n processor: value => {\n const valid = contains$2([\n 'preservetable',\n 'resizetable'\n ], value);\n return valid ? {\n value,\n valid\n } : {\n valid: false,\n message: 'Must be preservetable, or resizetable.'\n };\n },\n default: 'preservetable'\n });\n registerOption('table_resize_bars', {\n processor: 'boolean',\n default: true\n });\n registerOption('table_style_by_css', {\n processor: 'boolean',\n default: true\n });\n registerOption('table_merge_content_on_paste', {\n processor: 'boolean',\n default: true\n });\n };\n const getTableCloneElements = editor => {\n return Optional.from(editor.options.get('table_clone_elements'));\n };\n const hasTableObjectResizing = editor => {\n const objectResizing = editor.options.get('object_resizing');\n return contains$2(objectResizing.split(','), 'table');\n };\n const getTableHeaderType = option('table_header_type');\n const getTableColumnResizingBehaviour = option('table_column_resizing');\n const isPreserveTableColumnResizing = editor => getTableColumnResizingBehaviour(editor) === 'preservetable';\n const isResizeTableColumnResizing = editor => getTableColumnResizingBehaviour(editor) === 'resizetable';\n const getTableSizingMode = option('table_sizing_mode');\n const isTablePercentagesForced = editor => getTableSizingMode(editor) === 'relative';\n const isTablePixelsForced = editor => getTableSizingMode(editor) === 'fixed';\n const isTableResponsiveForced = editor => getTableSizingMode(editor) === 'responsive';\n const hasTableResizeBars = option('table_resize_bars');\n const shouldStyleWithCss = option('table_style_by_css');\n const shouldMergeContentOnPaste = option('table_merge_content_on_paste');\n const getTableDefaultAttributes = editor => {\n const options = editor.options;\n const defaultAttributes = options.get('table_default_attributes');\n return options.isSet('table_default_attributes') ? defaultAttributes : determineDefaultTableAttributes(editor, defaultAttributes);\n };\n const getTableDefaultStyles = editor => {\n const options = editor.options;\n const defaultStyles = options.get('table_default_styles');\n return options.isSet('table_default_styles') ? defaultStyles : determineDefaultTableStyles(editor, defaultStyles);\n };\n const tableUseColumnGroup = option('table_use_colgroups');\n\n const closest = target => closest$1(target, '[contenteditable]');\n const isEditable$1 = (element, assumeEditable = false) => {\n if (inBody(element)) {\n return element.dom.isContentEditable;\n } else {\n return closest(element).fold(constant(assumeEditable), editable => getRaw(editable) === 'true');\n }\n };\n const getRaw = element => element.dom.contentEditable;\n\n const getBody = editor => SugarElement.fromDom(editor.getBody());\n const getIsRoot = editor => element => eq$1(element, getBody(editor));\n const removeDataStyle = table => {\n remove$7(table, 'data-mce-style');\n const removeStyleAttribute = element => remove$7(element, 'data-mce-style');\n each$2(cells$1(table), removeStyleAttribute);\n each$2(columns$1(table), removeStyleAttribute);\n each$2(rows$1(table), removeStyleAttribute);\n };\n const getSelectionStart = editor => SugarElement.fromDom(editor.selection.getStart());\n const getPixelWidth = elm => elm.getBoundingClientRect().width;\n const getPixelHeight = elm => elm.getBoundingClientRect().height;\n const getRawWidth = (editor, elm) => {\n const raw = editor.dom.getStyle(elm, 'width') || editor.dom.getAttrib(elm, 'width');\n return Optional.from(raw).filter(isNotEmpty);\n };\n const isPercentage$1 = value => /^(\\d+(\\.\\d+)?)%$/.test(value);\n const isPixel = value => /^(\\d+(\\.\\d+)?)px$/.test(value);\n const isInEditableContext$1 = cell => closest$2(cell, isTag('table')).exists(isEditable$1);\n\n const inSelection = (bounds, detail) => {\n const leftEdge = detail.column;\n const rightEdge = detail.column + detail.colspan - 1;\n const topEdge = detail.row;\n const bottomEdge = detail.row + detail.rowspan - 1;\n return leftEdge <= bounds.finishCol && rightEdge >= bounds.startCol && (topEdge <= bounds.finishRow && bottomEdge >= bounds.startRow);\n };\n const isWithin = (bounds, detail) => {\n return detail.column >= bounds.startCol && detail.column + detail.colspan - 1 <= bounds.finishCol && detail.row >= bounds.startRow && detail.row + detail.rowspan - 1 <= bounds.finishRow;\n };\n const isRectangular = (warehouse, bounds) => {\n let isRect = true;\n const detailIsWithin = curry(isWithin, bounds);\n for (let i = bounds.startRow; i <= bounds.finishRow; i++) {\n for (let j = bounds.startCol; j <= bounds.finishCol; j++) {\n isRect = isRect && Warehouse.getAt(warehouse, i, j).exists(detailIsWithin);\n }\n }\n return isRect ? Optional.some(bounds) : Optional.none();\n };\n\n const getBounds = (detailA, detailB) => {\n return bounds(Math.min(detailA.row, detailB.row), Math.min(detailA.column, detailB.column), Math.max(detailA.row + detailA.rowspan - 1, detailB.row + detailB.rowspan - 1), Math.max(detailA.column + detailA.colspan - 1, detailB.column + detailB.colspan - 1));\n };\n const getAnyBox = (warehouse, startCell, finishCell) => {\n const startCoords = Warehouse.findItem(warehouse, startCell, eq$1);\n const finishCoords = Warehouse.findItem(warehouse, finishCell, eq$1);\n return startCoords.bind(sc => {\n return finishCoords.map(fc => {\n return getBounds(sc, fc);\n });\n });\n };\n const getBox$1 = (warehouse, startCell, finishCell) => {\n return getAnyBox(warehouse, startCell, finishCell).bind(bounds => {\n return isRectangular(warehouse, bounds);\n });\n };\n\n const moveBy$1 = (warehouse, cell, row, column) => {\n return Warehouse.findItem(warehouse, cell, eq$1).bind(detail => {\n const startRow = row > 0 ? detail.row + detail.rowspan - 1 : detail.row;\n const startCol = column > 0 ? detail.column + detail.colspan - 1 : detail.column;\n const dest = Warehouse.getAt(warehouse, startRow + row, startCol + column);\n return dest.map(d => {\n return d.element;\n });\n });\n };\n const intercepts$1 = (warehouse, start, finish) => {\n return getAnyBox(warehouse, start, finish).map(bounds => {\n const inside = Warehouse.filterItems(warehouse, curry(inSelection, bounds));\n return map$1(inside, detail => {\n return detail.element;\n });\n });\n };\n const parentCell = (warehouse, innerCell) => {\n const isContainedBy = (c1, c2) => {\n return contains$1(c2, c1);\n };\n return Warehouse.findItem(warehouse, innerCell, isContainedBy).map(detail => {\n return detail.element;\n });\n };\n\n const moveBy = (cell, deltaRow, deltaColumn) => {\n return table(cell).bind(table => {\n const warehouse = getWarehouse(table);\n return moveBy$1(warehouse, cell, deltaRow, deltaColumn);\n });\n };\n const intercepts = (table, first, last) => {\n const warehouse = getWarehouse(table);\n return intercepts$1(warehouse, first, last);\n };\n const nestedIntercepts = (table, first, firstTable, last, lastTable) => {\n const warehouse = getWarehouse(table);\n const optStartCell = eq$1(table, firstTable) ? Optional.some(first) : parentCell(warehouse, first);\n const optLastCell = eq$1(table, lastTable) ? Optional.some(last) : parentCell(warehouse, last);\n return optStartCell.bind(startCell => optLastCell.bind(lastCell => intercepts$1(warehouse, startCell, lastCell)));\n };\n const getBox = (table, first, last) => {\n const warehouse = getWarehouse(table);\n return getBox$1(warehouse, first, last);\n };\n const getWarehouse = Warehouse.fromTable;\n\n var TagBoundaries = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'li',\n 'table',\n 'thead',\n 'tbody',\n 'tfoot',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n\n var DomUniverse = () => {\n const clone = element => {\n return SugarElement.fromDom(element.dom.cloneNode(false));\n };\n const document = element => documentOrOwner(element).dom;\n const isBoundary = element => {\n if (!isElement(element)) {\n return false;\n }\n if (name(element) === 'body') {\n return true;\n }\n return contains$2(TagBoundaries, name(element));\n };\n const isEmptyTag = element => {\n if (!isElement(element)) {\n return false;\n }\n return contains$2([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], name(element));\n };\n const isNonEditable = element => isElement(element) && get$b(element, 'contenteditable') === 'false';\n const comparePosition = (element, other) => {\n return element.dom.compareDocumentPosition(other.dom);\n };\n const copyAttributesTo = (source, destination) => {\n const as = clone$2(source);\n setAll$1(destination, as);\n };\n const isSpecial = element => {\n const tag = name(element);\n return contains$2([\n 'script',\n 'noscript',\n 'iframe',\n 'noframes',\n 'noembed',\n 'title',\n 'style',\n 'textarea',\n 'xmp'\n ], tag);\n };\n const getLanguage = element => isElement(element) ? getOpt(element, 'lang') : Optional.none();\n return {\n up: constant({\n selector: ancestor$1,\n closest: closest$1,\n predicate: ancestor$2,\n all: parents\n }),\n down: constant({\n selector: descendants,\n predicate: descendants$1\n }),\n styles: constant({\n get: get$a,\n getRaw: getRaw$2,\n set: set$1,\n remove: remove$5\n }),\n attrs: constant({\n get: get$b,\n set: set$2,\n remove: remove$7,\n copyTo: copyAttributesTo\n }),\n insert: constant({\n before: before$3,\n after: after$5,\n afterAll: after$4,\n append: append$1,\n appendAll: append,\n prepend: prepend,\n wrap: wrap\n }),\n remove: constant({\n unwrap: unwrap,\n remove: remove$6\n }),\n create: constant({\n nu: SugarElement.fromTag,\n clone,\n text: SugarElement.fromText\n }),\n query: constant({\n comparePosition,\n prevSibling: prevSibling,\n nextSibling: nextSibling\n }),\n property: constant({\n children: children$2,\n name: name,\n parent: parent,\n document,\n isText: isText,\n isComment: isComment,\n isElement: isElement,\n isSpecial,\n getLanguage,\n getText: get$6,\n setText: set,\n isBoundary,\n isEmptyTag,\n isNonEditable\n }),\n eq: eq$1,\n is: is$1\n };\n };\n\n const all = (universe, look, elements, f) => {\n const head = elements[0];\n const tail = elements.slice(1);\n return f(universe, look, head, tail);\n };\n const oneAll = (universe, look, elements) => {\n return elements.length > 0 ? all(universe, look, elements, unsafeOne) : Optional.none();\n };\n const unsafeOne = (universe, look, head, tail) => {\n const start = look(universe, head);\n return foldr(tail, (b, a) => {\n const current = look(universe, a);\n return commonElement(universe, b, current);\n }, start);\n };\n const commonElement = (universe, start, end) => {\n return start.bind(s => {\n return end.filter(curry(universe.eq, s));\n });\n };\n\n const eq = (universe, item) => {\n return curry(universe.eq, item);\n };\n const ancestors$2 = (universe, start, end, isRoot = never) => {\n const ps1 = [start].concat(universe.up().all(start));\n const ps2 = [end].concat(universe.up().all(end));\n const prune = path => {\n const index = findIndex(path, isRoot);\n return index.fold(() => {\n return path;\n }, ind => {\n return path.slice(0, ind + 1);\n });\n };\n const pruned1 = prune(ps1);\n const pruned2 = prune(ps2);\n const shared = find$1(pruned1, x => {\n return exists(pruned2, eq(universe, x));\n });\n return {\n firstpath: pruned1,\n secondpath: pruned2,\n shared\n };\n };\n\n const sharedOne$1 = oneAll;\n const ancestors$1 = ancestors$2;\n\n const universe$3 = DomUniverse();\n const sharedOne = (look, elements) => {\n return sharedOne$1(universe$3, (_universe, element) => {\n return look(element);\n }, elements);\n };\n const ancestors = (start, finish, isRoot) => {\n return ancestors$1(universe$3, start, finish, isRoot);\n };\n\n const lookupTable = container => {\n return ancestor$1(container, 'table');\n };\n const identify = (start, finish, isRoot) => {\n const getIsRoot = rootTable => {\n return element => {\n return isRoot !== undefined && isRoot(element) || eq$1(element, rootTable);\n };\n };\n if (eq$1(start, finish)) {\n return Optional.some({\n boxes: Optional.some([start]),\n start,\n finish\n });\n } else {\n return lookupTable(start).bind(startTable => {\n return lookupTable(finish).bind(finishTable => {\n if (eq$1(startTable, finishTable)) {\n return Optional.some({\n boxes: intercepts(startTable, start, finish),\n start,\n finish\n });\n } else if (contains$1(startTable, finishTable)) {\n const ancestorCells = ancestors$3(finish, 'td,th', getIsRoot(startTable));\n const finishCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : finish;\n return Optional.some({\n boxes: nestedIntercepts(startTable, start, startTable, finish, finishTable),\n start,\n finish: finishCell\n });\n } else if (contains$1(finishTable, startTable)) {\n const ancestorCells = ancestors$3(start, 'td,th', getIsRoot(finishTable));\n const startCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : start;\n return Optional.some({\n boxes: nestedIntercepts(finishTable, start, startTable, finish, finishTable),\n start,\n finish: startCell\n });\n } else {\n return ancestors(start, finish).shared.bind(lca => {\n return closest$1(lca, 'table', isRoot).bind(lcaTable => {\n const finishAncestorCells = ancestors$3(finish, 'td,th', getIsRoot(lcaTable));\n const finishCell = finishAncestorCells.length > 0 ? finishAncestorCells[finishAncestorCells.length - 1] : finish;\n const startAncestorCells = ancestors$3(start, 'td,th', getIsRoot(lcaTable));\n const startCell = startAncestorCells.length > 0 ? startAncestorCells[startAncestorCells.length - 1] : start;\n return Optional.some({\n boxes: nestedIntercepts(lcaTable, start, startTable, finish, finishTable),\n start: startCell,\n finish: finishCell\n });\n });\n });\n }\n });\n });\n }\n };\n const retrieve$1 = (container, selector) => {\n const sels = descendants(container, selector);\n return sels.length > 0 ? Optional.some(sels) : Optional.none();\n };\n const getLast = (boxes, lastSelectedSelector) => {\n return find$1(boxes, box => {\n return is$2(box, lastSelectedSelector);\n });\n };\n const getEdges = (container, firstSelectedSelector, lastSelectedSelector) => {\n return descendant(container, firstSelectedSelector).bind(first => {\n return descendant(container, lastSelectedSelector).bind(last => {\n return sharedOne(lookupTable, [\n first,\n last\n ]).map(table => {\n return {\n first,\n last,\n table\n };\n });\n });\n });\n };\n const expandTo = (finish, firstSelectedSelector) => {\n return ancestor$1(finish, 'table').bind(table => {\n return descendant(table, firstSelectedSelector).bind(start => {\n return identify(start, finish).bind(identified => {\n return identified.boxes.map(boxes => {\n return {\n boxes,\n start: identified.start,\n finish: identified.finish\n };\n });\n });\n });\n });\n };\n const shiftSelection = (boxes, deltaRow, deltaColumn, firstSelectedSelector, lastSelectedSelector) => {\n return getLast(boxes, lastSelectedSelector).bind(last => {\n return moveBy(last, deltaRow, deltaColumn).bind(finish => {\n return expandTo(finish, firstSelectedSelector);\n });\n });\n };\n\n const retrieve = (container, selector) => {\n return retrieve$1(container, selector);\n };\n const retrieveBox = (container, firstSelectedSelector, lastSelectedSelector) => {\n return getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(edges => {\n const isRoot = ancestor => {\n return eq$1(container, ancestor);\n };\n const sectionSelector = 'thead,tfoot,tbody,table';\n const firstAncestor = ancestor$1(edges.first, sectionSelector, isRoot);\n const lastAncestor = ancestor$1(edges.last, sectionSelector, isRoot);\n return firstAncestor.bind(fA => {\n return lastAncestor.bind(lA => {\n return eq$1(fA, lA) ? getBox(edges.table, edges.first, edges.last) : Optional.none();\n });\n });\n });\n };\n\n const selection = identity;\n const unmergable = selectedCells => {\n const hasSpan = (elem, type) => getOpt(elem, type).exists(span => parseInt(span, 10) > 1);\n const hasRowOrColSpan = elem => hasSpan(elem, 'rowspan') || hasSpan(elem, 'colspan');\n return selectedCells.length > 0 && forall(selectedCells, hasRowOrColSpan) ? Optional.some(selectedCells) : Optional.none();\n };\n const mergable = (table, selectedCells, ephemera) => {\n if (selectedCells.length <= 1) {\n return Optional.none();\n } else {\n return retrieveBox(table, ephemera.firstSelectedSelector, ephemera.lastSelectedSelector).map(bounds => ({\n bounds,\n cells: selectedCells\n }));\n }\n };\n\n const strSelected = 'data-mce-selected';\n const strSelectedSelector = 'td[' + strSelected + '],th[' + strSelected + ']';\n const strAttributeSelector = '[' + strSelected + ']';\n const strFirstSelected = 'data-mce-first-selected';\n const strFirstSelectedSelector = 'td[' + strFirstSelected + '],th[' + strFirstSelected + ']';\n const strLastSelected = 'data-mce-last-selected';\n const strLastSelectedSelector = 'td[' + strLastSelected + '],th[' + strLastSelected + ']';\n const attributeSelector = strAttributeSelector;\n const ephemera = {\n selected: strSelected,\n selectedSelector: strSelectedSelector,\n firstSelected: strFirstSelected,\n firstSelectedSelector: strFirstSelectedSelector,\n lastSelected: strLastSelected,\n lastSelectedSelector: strLastSelectedSelector\n };\n\n const forMenu = (selectedCells, table, cell) => ({\n element: cell,\n mergable: mergable(table, selectedCells, ephemera),\n unmergable: unmergable(selectedCells),\n selection: selection(selectedCells)\n });\n const paste = (element, clipboard, generators) => ({\n element,\n clipboard,\n generators\n });\n const pasteRows = (selectedCells, _cell, clipboard, generators) => ({\n selection: selection(selectedCells),\n clipboard,\n generators\n });\n\n const getSelectionCellFallback = element => table(element).bind(table => retrieve(table, ephemera.firstSelectedSelector)).fold(constant(element), cells => cells[0]);\n const getSelectionFromSelector = selector => (initCell, isRoot) => {\n const cellName = name(initCell);\n const cell = cellName === 'col' || cellName === 'colgroup' ? getSelectionCellFallback(initCell) : initCell;\n return closest$1(cell, selector, isRoot);\n };\n const getSelectionCellOrCaption = getSelectionFromSelector('th,td,caption');\n const getSelectionCell = getSelectionFromSelector('th,td');\n const getCellsFromSelection = editor => fromDom(editor.model.table.getSelectedCells());\n const getCellsFromFakeSelection = editor => filter$2(getCellsFromSelection(editor), cell => is$2(cell, ephemera.selectedSelector));\n\n const extractSelected = cells => {\n return table(cells[0]).map(table => {\n const replica = extract$1(table, attributeSelector);\n removeDataStyle(replica);\n return [replica];\n });\n };\n const serializeElements = (editor, elements) => map$1(elements, elm => editor.selection.serializer.serialize(elm.dom, {})).join('');\n const getTextContent = elements => map$1(elements, element => element.dom.innerText).join('');\n const registerEvents = (editor, actions) => {\n editor.on('BeforeGetContent', e => {\n const multiCellContext = cells => {\n e.preventDefault();\n extractSelected(cells).each(elements => {\n e.content = e.format === 'text' ? getTextContent(elements) : serializeElements(editor, elements);\n });\n };\n if (e.selection === true) {\n const cells = getCellsFromFakeSelection(editor);\n if (cells.length >= 1) {\n multiCellContext(cells);\n }\n }\n });\n editor.on('BeforeSetContent', e => {\n if (e.selection === true && e.paste === true) {\n const selectedCells = getCellsFromSelection(editor);\n head(selectedCells).each(cell => {\n table(cell).each(table => {\n const elements = filter$2(fromHtml(e.content), content => {\n return name(content) !== 'meta';\n });\n const isTable = isTag('table');\n if (shouldMergeContentOnPaste(editor) && elements.length === 1 && isTable(elements[0])) {\n e.preventDefault();\n const doc = SugarElement.fromDom(editor.getDoc());\n const generators = paste$1(doc);\n const targets = paste(cell, elements[0], generators);\n actions.pasteCells(table, targets).each(() => {\n editor.focus();\n });\n }\n });\n });\n }\n });\n };\n\n const point = (element, offset) => ({\n element,\n offset\n });\n\n const scan$1 = (universe, element, direction) => {\n if (universe.property().isText(element) && universe.property().getText(element).trim().length === 0 || universe.property().isComment(element)) {\n return direction(element).bind(elem => {\n return scan$1(universe, elem, direction).orThunk(() => {\n return Optional.some(elem);\n });\n });\n } else {\n return Optional.none();\n }\n };\n const toEnd = (universe, element) => {\n if (universe.property().isText(element)) {\n return universe.property().getText(element).length;\n }\n const children = universe.property().children(element);\n return children.length;\n };\n const freefallRtl$2 = (universe, element) => {\n const candidate = scan$1(universe, element, universe.query().prevSibling).getOr(element);\n if (universe.property().isText(candidate)) {\n return point(candidate, toEnd(universe, candidate));\n }\n const children = universe.property().children(candidate);\n return children.length > 0 ? freefallRtl$2(universe, children[children.length - 1]) : point(candidate, toEnd(universe, candidate));\n };\n\n const freefallRtl$1 = freefallRtl$2;\n\n const universe$2 = DomUniverse();\n const freefallRtl = element => {\n return freefallRtl$1(universe$2, element);\n };\n\n const halve = (main, other) => {\n if (!hasColspan(main)) {\n const width = getGenericWidth(main);\n width.each(w => {\n const newWidth = w.value / 2;\n setGenericWidth(main, newWidth, w.unit);\n setGenericWidth(other, newWidth, w.unit);\n });\n }\n };\n\n const zero = array => map$1(array, constant(0));\n const surround = (sizes, startIndex, endIndex, results, f) => f(sizes.slice(0, startIndex)).concat(results).concat(f(sizes.slice(endIndex)));\n const clampDeltaHelper = predicate => (sizes, index, delta, minCellSize) => {\n if (!predicate(delta)) {\n return delta;\n } else {\n const newSize = Math.max(minCellSize, sizes[index] - Math.abs(delta));\n const diff = Math.abs(newSize - sizes[index]);\n return delta >= 0 ? diff : -diff;\n }\n };\n const clampNegativeDelta = clampDeltaHelper(delta => delta < 0);\n const clampDelta = clampDeltaHelper(always);\n const resizeTable = () => {\n const calcFixedDeltas = (sizes, index, next, delta, minCellSize) => {\n const clampedDelta = clampNegativeDelta(sizes, index, delta, minCellSize);\n return surround(sizes, index, next + 1, [\n clampedDelta,\n 0\n ], zero);\n };\n const calcRelativeDeltas = (sizes, index, delta, minCellSize) => {\n const ratio = (100 + delta) / 100;\n const newThis = Math.max(minCellSize, (sizes[index] + delta) / ratio);\n return map$1(sizes, (size, idx) => {\n const newSize = idx === index ? newThis : size / ratio;\n return newSize - size;\n });\n };\n const calcLeftEdgeDeltas = (sizes, index, next, delta, minCellSize, isRelative) => {\n if (isRelative) {\n return calcRelativeDeltas(sizes, index, delta, minCellSize);\n } else {\n return calcFixedDeltas(sizes, index, next, delta, minCellSize);\n }\n };\n const calcMiddleDeltas = (sizes, _prev, index, next, delta, minCellSize, isRelative) => calcLeftEdgeDeltas(sizes, index, next, delta, minCellSize, isRelative);\n const resizeTable = (resizer, delta) => resizer(delta);\n const calcRightEdgeDeltas = (sizes, _prev, index, delta, minCellSize, isRelative) => {\n if (isRelative) {\n return calcRelativeDeltas(sizes, index, delta, minCellSize);\n } else {\n const clampedDelta = clampNegativeDelta(sizes, index, delta, minCellSize);\n return zero(sizes.slice(0, index)).concat([clampedDelta]);\n }\n };\n const calcRedestributedWidths = (sizes, totalWidth, pixelDelta, isRelative) => {\n if (isRelative) {\n const tableWidth = totalWidth + pixelDelta;\n const ratio = tableWidth / totalWidth;\n const newSizes = map$1(sizes, size => size / ratio);\n return {\n delta: ratio * 100 - 100,\n newSizes\n };\n } else {\n return {\n delta: pixelDelta,\n newSizes: sizes\n };\n }\n };\n return {\n resizeTable,\n clampTableDelta: clampNegativeDelta,\n calcLeftEdgeDeltas,\n calcMiddleDeltas,\n calcRightEdgeDeltas,\n calcRedestributedWidths\n };\n };\n const preserveTable = () => {\n const calcLeftEdgeDeltas = (sizes, index, next, delta, minCellSize) => {\n const idx = delta >= 0 ? next : index;\n const clampedDelta = clampDelta(sizes, idx, delta, minCellSize);\n return surround(sizes, index, next + 1, [\n clampedDelta,\n -clampedDelta\n ], zero);\n };\n const calcMiddleDeltas = (sizes, _prev, index, next, delta, minCellSize) => calcLeftEdgeDeltas(sizes, index, next, delta, minCellSize);\n const resizeTable = (resizer, delta, isLastColumn) => {\n if (isLastColumn) {\n resizer(delta);\n }\n };\n const calcRightEdgeDeltas = (sizes, _prev, _index, delta, _minCellSize, isRelative) => {\n if (isRelative) {\n return zero(sizes);\n } else {\n const diff = delta / sizes.length;\n return map$1(sizes, constant(diff));\n }\n };\n const clampTableDelta = (sizes, index, delta, minCellSize, isLastColumn) => {\n if (isLastColumn) {\n if (delta >= 0) {\n return delta;\n } else {\n const maxDelta = foldl(sizes, (a, b) => a + b - minCellSize, 0);\n return Math.max(-maxDelta, delta);\n }\n } else {\n return clampNegativeDelta(sizes, index, delta, minCellSize);\n }\n };\n const calcRedestributedWidths = (sizes, _totalWidth, _pixelDelta, _isRelative) => ({\n delta: 0,\n newSizes: sizes\n });\n return {\n resizeTable,\n clampTableDelta,\n calcLeftEdgeDeltas,\n calcMiddleDeltas,\n calcRightEdgeDeltas,\n calcRedestributedWidths\n };\n };\n\n const getGridSize = table => {\n const warehouse = Warehouse.fromTable(table);\n return warehouse.grid;\n };\n\n const isHeaderCell = isTag('th');\n const isHeaderCells = cells => forall(cells, cell => isHeaderCell(cell.element));\n const getRowHeaderType = (isHeaderRow, isHeaderCells) => {\n if (isHeaderRow && isHeaderCells) {\n return 'sectionCells';\n } else if (isHeaderRow) {\n return 'section';\n } else {\n return 'cells';\n }\n };\n const getRowType = row => {\n const isHeaderRow = row.section === 'thead';\n const isHeaderCells = is(findCommonCellType(row.cells), 'th');\n if (row.section === 'tfoot') {\n return { type: 'footer' };\n } else if (isHeaderRow || isHeaderCells) {\n return {\n type: 'header',\n subType: getRowHeaderType(isHeaderRow, isHeaderCells)\n };\n } else {\n return { type: 'body' };\n }\n };\n const findCommonCellType = cells => {\n const headerCells = filter$2(cells, cell => isHeaderCell(cell.element));\n if (headerCells.length === 0) {\n return Optional.some('td');\n } else if (headerCells.length === cells.length) {\n return Optional.some('th');\n } else {\n return Optional.none();\n }\n };\n const findCommonRowType = rows => {\n const rowTypes = map$1(rows, row => getRowType(row).type);\n const hasHeader = contains$2(rowTypes, 'header');\n const hasFooter = contains$2(rowTypes, 'footer');\n if (!hasHeader && !hasFooter) {\n return Optional.some('body');\n } else {\n const hasBody = contains$2(rowTypes, 'body');\n if (hasHeader && !hasBody && !hasFooter) {\n return Optional.some('header');\n } else if (!hasHeader && !hasBody && hasFooter) {\n return Optional.some('footer');\n } else {\n return Optional.none();\n }\n }\n };\n const findTableRowHeaderType = warehouse => findMap(warehouse.all, row => {\n const rowType = getRowType(row);\n return rowType.type === 'header' ? Optional.from(rowType.subType) : Optional.none();\n });\n\n const transformCell = (cell, comparator, substitution) => elementnew(substitution(cell.element, comparator), true, cell.isLocked);\n const transformRow = (row, section) => row.section !== section ? rowcells(row.element, row.cells, section, row.isNew) : row;\n const section = () => ({\n transformRow,\n transformCell: (cell, comparator, substitution) => {\n const newCell = substitution(cell.element, comparator);\n const fixedCell = name(newCell) !== 'td' ? mutate$1(newCell, 'td') : newCell;\n return elementnew(fixedCell, cell.isNew, cell.isLocked);\n }\n });\n const sectionCells = () => ({\n transformRow,\n transformCell\n });\n const cells = () => ({\n transformRow: (row, section) => {\n const newSection = section === 'thead' ? 'tbody' : section;\n return transformRow(row, newSection);\n },\n transformCell\n });\n const fallback = () => ({\n transformRow: identity,\n transformCell\n });\n const getTableSectionType = (table, fallback) => {\n const warehouse = Warehouse.fromTable(table);\n const type = findTableRowHeaderType(warehouse).getOr(fallback);\n switch (type) {\n case 'section':\n return section();\n case 'sectionCells':\n return sectionCells();\n case 'cells':\n return cells();\n }\n };\n const TableSection = {\n getTableSectionType,\n section,\n sectionCells,\n cells,\n fallback\n };\n\n const setIfNot = (element, property, value, ignore) => {\n if (value === ignore) {\n remove$7(element, property);\n } else {\n set$2(element, property, value);\n }\n };\n const insert$1 = (table, selector, element) => {\n last$2(children(table, selector)).fold(() => prepend(table, element), child => after$5(child, element));\n };\n const generateSection = (table, sectionName) => {\n const section = child(table, sectionName).getOrThunk(() => {\n const newSection = SugarElement.fromTag(sectionName, owner(table).dom);\n if (sectionName === 'thead') {\n insert$1(table, 'caption,colgroup', newSection);\n } else if (sectionName === 'colgroup') {\n insert$1(table, 'caption', newSection);\n } else {\n append$1(table, newSection);\n }\n return newSection;\n });\n empty(section);\n return section;\n };\n const render$1 = (table, grid) => {\n const newRows = [];\n const newCells = [];\n const syncRows = gridSection => map$1(gridSection, row => {\n if (row.isNew) {\n newRows.push(row.element);\n }\n const tr = row.element;\n empty(tr);\n each$2(row.cells, cell => {\n if (cell.isNew) {\n newCells.push(cell.element);\n }\n setIfNot(cell.element, 'colspan', cell.colspan, 1);\n setIfNot(cell.element, 'rowspan', cell.rowspan, 1);\n append$1(tr, cell.element);\n });\n return tr;\n });\n const syncColGroup = gridSection => bind$2(gridSection, colGroup => map$1(colGroup.cells, col => {\n setIfNot(col.element, 'span', col.colspan, 1);\n return col.element;\n }));\n const renderSection = (gridSection, sectionName) => {\n const section = generateSection(table, sectionName);\n const sync = sectionName === 'colgroup' ? syncColGroup : syncRows;\n const sectionElems = sync(gridSection);\n append(section, sectionElems);\n };\n const removeSection = sectionName => {\n child(table, sectionName).each(remove$6);\n };\n const renderOrRemoveSection = (gridSection, sectionName) => {\n if (gridSection.length > 0) {\n renderSection(gridSection, sectionName);\n } else {\n removeSection(sectionName);\n }\n };\n const headSection = [];\n const bodySection = [];\n const footSection = [];\n const columnGroupsSection = [];\n each$2(grid, row => {\n switch (row.section) {\n case 'thead':\n headSection.push(row);\n break;\n case 'tbody':\n bodySection.push(row);\n break;\n case 'tfoot':\n footSection.push(row);\n break;\n case 'colgroup':\n columnGroupsSection.push(row);\n break;\n }\n });\n renderOrRemoveSection(columnGroupsSection, 'colgroup');\n renderOrRemoveSection(headSection, 'thead');\n renderOrRemoveSection(bodySection, 'tbody');\n renderOrRemoveSection(footSection, 'tfoot');\n return {\n newRows,\n newCells\n };\n };\n const copy = grid => map$1(grid, row => {\n const tr = shallow(row.element);\n each$2(row.cells, cell => {\n const clonedCell = deep(cell.element);\n setIfNot(clonedCell, 'colspan', cell.colspan, 1);\n setIfNot(clonedCell, 'rowspan', cell.rowspan, 1);\n append$1(tr, clonedCell);\n });\n return tr;\n });\n\n const getColumn = (grid, index) => {\n return map$1(grid, row => {\n return getCell(row, index);\n });\n };\n const getRow = (grid, index) => {\n return grid[index];\n };\n const findDiff = (xs, comp) => {\n if (xs.length === 0) {\n return 0;\n }\n const first = xs[0];\n const index = findIndex(xs, x => {\n return !comp(first.element, x.element);\n });\n return index.getOr(xs.length);\n };\n const subgrid = (grid, row, column, comparator) => {\n const gridRow = getRow(grid, row);\n const isColRow = gridRow.section === 'colgroup';\n const colspan = findDiff(gridRow.cells.slice(column), comparator);\n const rowspan = isColRow ? 1 : findDiff(getColumn(grid.slice(row), column), comparator);\n return {\n colspan,\n rowspan\n };\n };\n\n const toDetails = (grid, comparator) => {\n const seen = map$1(grid, row => map$1(row.cells, never));\n const updateSeen = (rowIndex, columnIndex, rowspan, colspan) => {\n for (let row = rowIndex; row < rowIndex + rowspan; row++) {\n for (let column = columnIndex; column < columnIndex + colspan; column++) {\n seen[row][column] = true;\n }\n }\n };\n return map$1(grid, (row, rowIndex) => {\n const details = bind$2(row.cells, (cell, columnIndex) => {\n if (seen[rowIndex][columnIndex] === false) {\n const result = subgrid(grid, rowIndex, columnIndex, comparator);\n updateSeen(rowIndex, columnIndex, result.rowspan, result.colspan);\n return [detailnew(cell.element, result.rowspan, result.colspan, cell.isNew)];\n } else {\n return [];\n }\n });\n return rowdetailnew(row.element, details, row.section, row.isNew);\n });\n };\n const toGrid = (warehouse, generators, isNew) => {\n const grid = [];\n each$2(warehouse.colgroups, colgroup => {\n const colgroupCols = [];\n for (let columnIndex = 0; columnIndex < warehouse.grid.columns; columnIndex++) {\n const element = Warehouse.getColumnAt(warehouse, columnIndex).map(column => elementnew(column.element, isNew, false)).getOrThunk(() => elementnew(generators.colGap(), true, false));\n colgroupCols.push(element);\n }\n grid.push(rowcells(colgroup.element, colgroupCols, 'colgroup', isNew));\n });\n for (let rowIndex = 0; rowIndex < warehouse.grid.rows; rowIndex++) {\n const rowCells = [];\n for (let columnIndex = 0; columnIndex < warehouse.grid.columns; columnIndex++) {\n const element = Warehouse.getAt(warehouse, rowIndex, columnIndex).map(item => elementnew(item.element, isNew, item.isLocked)).getOrThunk(() => elementnew(generators.gap(), true, false));\n rowCells.push(element);\n }\n const rowDetail = warehouse.all[rowIndex];\n const row = rowcells(rowDetail.element, rowCells, rowDetail.section, isNew);\n grid.push(row);\n }\n return grid;\n };\n\n const fromWarehouse = (warehouse, generators) => toGrid(warehouse, generators, false);\n const toDetailList = grid => toDetails(grid, eq$1);\n const findInWarehouse = (warehouse, element) => findMap(warehouse.all, r => find$1(r.cells, e => eq$1(element, e.element)));\n const extractCells = (warehouse, target, predicate) => {\n const details = map$1(target.selection, cell$1 => {\n return cell(cell$1).bind(lc => findInWarehouse(warehouse, lc)).filter(predicate);\n });\n const cells = cat(details);\n return someIf(cells.length > 0, cells);\n };\n const run = (operation, extract, adjustment, postAction, genWrappers) => (table, target, generators, behaviours) => {\n const warehouse = Warehouse.fromTable(table);\n const tableSection = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.section).getOrThunk(TableSection.fallback);\n const output = extract(warehouse, target).map(info => {\n const model = fromWarehouse(warehouse, generators);\n const result = operation(model, info, eq$1, genWrappers(generators), tableSection);\n const lockedColumns = getLockedColumnsFromGrid(result.grid);\n const grid = toDetailList(result.grid);\n return {\n info,\n grid,\n cursor: result.cursor,\n lockedColumns\n };\n });\n return output.bind(out => {\n const newElements = render$1(table, out.grid);\n const tableSizing = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.sizing).getOrThunk(() => TableSize.getTableSize(table));\n const resizing = Optional.from(behaviours === null || behaviours === void 0 ? void 0 : behaviours.resize).getOrThunk(preserveTable);\n adjustment(table, out.grid, out.info, {\n sizing: tableSizing,\n resize: resizing,\n section: tableSection\n });\n postAction(table);\n remove$7(table, LOCKED_COL_ATTR);\n if (out.lockedColumns.length > 0) {\n set$2(table, LOCKED_COL_ATTR, out.lockedColumns.join(','));\n }\n return Optional.some({\n cursor: out.cursor,\n newRows: newElements.newRows,\n newCells: newElements.newCells\n });\n });\n };\n const onPaste = (warehouse, target) => cell(target.element).bind(cell => findInWarehouse(warehouse, cell).map(details => {\n const value = {\n ...details,\n generators: target.generators,\n clipboard: target.clipboard\n };\n return value;\n }));\n const onPasteByEditor = (warehouse, target) => extractCells(warehouse, target, always).map(cells => ({\n cells,\n generators: target.generators,\n clipboard: target.clipboard\n }));\n const onMergable = (_warehouse, target) => target.mergable;\n const onUnmergable = (_warehouse, target) => target.unmergable;\n const onCells = (warehouse, target) => extractCells(warehouse, target, always);\n const onUnlockedCells = (warehouse, target) => extractCells(warehouse, target, detail => !detail.isLocked);\n const isUnlockedTableCell = (warehouse, cell) => findInWarehouse(warehouse, cell).exists(detail => !detail.isLocked);\n const allUnlocked = (warehouse, cells) => forall(cells, cell => isUnlockedTableCell(warehouse, cell));\n const onUnlockedMergable = (warehouse, target) => onMergable(warehouse, target).filter(mergeable => allUnlocked(warehouse, mergeable.cells));\n const onUnlockedUnmergable = (warehouse, target) => onUnmergable(warehouse, target).filter(cells => allUnlocked(warehouse, cells));\n\n const merge$2 = (grid, bounds, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n if (rows.length === 0) {\n return grid;\n }\n for (let i = bounds.startRow; i <= bounds.finishRow; i++) {\n for (let j = bounds.startCol; j <= bounds.finishCol; j++) {\n const row = rows[i];\n const isLocked = getCell(row, j).isLocked;\n mutateCell(row, j, elementnew(substitution(), false, isLocked));\n }\n }\n return grid;\n };\n const unmerge = (grid, target, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n let first = true;\n for (let i = 0; i < rows.length; i++) {\n for (let j = 0; j < cellLength(rows[0]); j++) {\n const row = rows[i];\n const currentCell = getCell(row, j);\n const currentCellElm = currentCell.element;\n const isToReplace = comparator(currentCellElm, target);\n if (isToReplace && !first) {\n mutateCell(row, j, elementnew(substitution(), true, currentCell.isLocked));\n } else if (isToReplace) {\n first = false;\n }\n }\n }\n return grid;\n };\n const uniqueCells = (row, comparator) => {\n return foldl(row, (rest, cell) => {\n return exists(rest, currentCell => {\n return comparator(currentCell.element, cell.element);\n }) ? rest : rest.concat([cell]);\n }, []);\n };\n const splitCols = (grid, index, comparator, substitution) => {\n if (index > 0 && index < grid[0].cells.length) {\n each$2(grid, row => {\n const prevCell = row.cells[index - 1];\n let offset = 0;\n const substitute = substitution();\n while (row.cells.length > index + offset && comparator(prevCell.element, row.cells[index + offset].element)) {\n mutateCell(row, index + offset, elementnew(substitute, true, row.cells[index + offset].isLocked));\n offset++;\n }\n });\n }\n return grid;\n };\n const splitRows = (grid, index, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n if (index > 0 && index < rows.length) {\n const rowPrevCells = rows[index - 1].cells;\n const cells = uniqueCells(rowPrevCells, comparator);\n each$2(cells, cell => {\n let replacement = Optional.none();\n for (let i = index; i < rows.length; i++) {\n for (let j = 0; j < cellLength(rows[0]); j++) {\n const row = rows[i];\n const current = getCell(row, j);\n const isToReplace = comparator(current.element, cell.element);\n if (isToReplace) {\n if (replacement.isNone()) {\n replacement = Optional.some(substitution());\n }\n replacement.each(sub => {\n mutateCell(row, j, elementnew(sub, true, current.isLocked));\n });\n }\n }\n }\n });\n }\n return grid;\n };\n\n const value$1 = value => {\n const applyHelper = fn => fn(value);\n const constHelper = constant(value);\n const outputHelper = () => output;\n const output = {\n tag: true,\n inner: value,\n fold: (_onError, onValue) => onValue(value),\n isValue: always,\n isError: never,\n map: mapper => Result.value(mapper(value)),\n mapError: outputHelper,\n bind: applyHelper,\n exists: applyHelper,\n forall: applyHelper,\n getOr: constHelper,\n or: outputHelper,\n getOrThunk: constHelper,\n orThunk: outputHelper,\n getOrDie: constHelper,\n each: fn => {\n fn(value);\n },\n toOptional: () => Optional.some(value)\n };\n return output;\n };\n const error = error => {\n const outputHelper = () => output;\n const output = {\n tag: false,\n inner: error,\n fold: (onError, _onValue) => onError(error),\n isValue: never,\n isError: always,\n map: outputHelper,\n mapError: mapper => Result.error(mapper(error)),\n bind: outputHelper,\n exists: never,\n forall: always,\n getOr: identity,\n or: identity,\n getOrThunk: apply,\n orThunk: apply,\n getOrDie: die(String(error)),\n each: noop,\n toOptional: Optional.none\n };\n return output;\n };\n const fromOption = (optional, err) => optional.fold(() => error(err), value$1);\n const Result = {\n value: value$1,\n error,\n fromOption\n };\n\n const measure = (startAddress, gridA, gridB) => {\n if (startAddress.row >= gridA.length || startAddress.column > cellLength(gridA[0])) {\n return Result.error('invalid start address out of table bounds, row: ' + startAddress.row + ', column: ' + startAddress.column);\n }\n const rowRemainder = gridA.slice(startAddress.row);\n const colRemainder = rowRemainder[0].cells.slice(startAddress.column);\n const colRequired = cellLength(gridB[0]);\n const rowRequired = gridB.length;\n return Result.value({\n rowDelta: rowRemainder.length - rowRequired,\n colDelta: colRemainder.length - colRequired\n });\n };\n const measureWidth = (gridA, gridB) => {\n const colLengthA = cellLength(gridA[0]);\n const colLengthB = cellLength(gridB[0]);\n return {\n rowDelta: 0,\n colDelta: colLengthA - colLengthB\n };\n };\n const measureHeight = (gridA, gridB) => {\n const rowLengthA = gridA.length;\n const rowLengthB = gridB.length;\n return {\n rowDelta: rowLengthA - rowLengthB,\n colDelta: 0\n };\n };\n const generateElements = (amount, row, generators, isLocked) => {\n const generator = row.section === 'colgroup' ? generators.col : generators.cell;\n return range$1(amount, idx => elementnew(generator(), true, isLocked(idx)));\n };\n const rowFill = (grid, amount, generators, lockedColumns) => {\n const exampleRow = grid[grid.length - 1];\n return grid.concat(range$1(amount, () => {\n const generator = exampleRow.section === 'colgroup' ? generators.colgroup : generators.row;\n const row = clone(exampleRow, generator, identity);\n const elements = generateElements(row.cells.length, row, generators, idx => has$1(lockedColumns, idx.toString()));\n return setCells(row, elements);\n }));\n };\n const colFill = (grid, amount, generators, startIndex) => map$1(grid, row => {\n const newChildren = generateElements(amount, row, generators, never);\n return addCells(row, startIndex, newChildren);\n });\n const lockedColFill = (grid, generators, lockedColumns) => map$1(grid, row => {\n return foldl(lockedColumns, (acc, colNum) => {\n const newChild = generateElements(1, row, generators, always)[0];\n return addCell(acc, colNum, newChild);\n }, row);\n });\n const tailor = (gridA, delta, generators) => {\n const fillCols = delta.colDelta < 0 ? colFill : identity;\n const fillRows = delta.rowDelta < 0 ? rowFill : identity;\n const lockedColumns = getLockedColumnsFromGrid(gridA);\n const gridWidth = cellLength(gridA[0]);\n const isLastColLocked = exists(lockedColumns, locked => locked === gridWidth - 1);\n const modifiedCols = fillCols(gridA, Math.abs(delta.colDelta), generators, isLastColLocked ? gridWidth - 1 : gridWidth);\n const newLockedColumns = getLockedColumnsFromGrid(modifiedCols);\n return fillRows(modifiedCols, Math.abs(delta.rowDelta), generators, mapToObject(newLockedColumns, always));\n };\n\n const isSpanning = (grid, row, col, comparator) => {\n const candidate = getCell(grid[row], col);\n const matching = curry(comparator, candidate.element);\n const currentRow = grid[row];\n return grid.length > 1 && cellLength(currentRow) > 1 && (col > 0 && matching(getCellElement(currentRow, col - 1)) || col < currentRow.cells.length - 1 && matching(getCellElement(currentRow, col + 1)) || row > 0 && matching(getCellElement(grid[row - 1], col)) || row < grid.length - 1 && matching(getCellElement(grid[row + 1], col)));\n };\n const mergeTables = (startAddress, gridA, gridBRows, generator, comparator, lockedColumns) => {\n const startRow = startAddress.row;\n const startCol = startAddress.column;\n const mergeHeight = gridBRows.length;\n const mergeWidth = cellLength(gridBRows[0]);\n const endRow = startRow + mergeHeight;\n const endCol = startCol + mergeWidth + lockedColumns.length;\n const lockedColumnObj = mapToObject(lockedColumns, always);\n for (let r = startRow; r < endRow; r++) {\n let skippedCol = 0;\n for (let c = startCol; c < endCol; c++) {\n if (lockedColumnObj[c]) {\n skippedCol++;\n continue;\n }\n if (isSpanning(gridA, r, c, comparator)) {\n unmerge(gridA, getCellElement(gridA[r], c), comparator, generator.cell);\n }\n const gridBColIndex = c - startCol - skippedCol;\n const newCell = getCell(gridBRows[r - startRow], gridBColIndex);\n const newCellElm = newCell.element;\n const replacement = generator.replace(newCellElm);\n mutateCell(gridA[r], c, elementnew(replacement, true, newCell.isLocked));\n }\n }\n return gridA;\n };\n const getValidStartAddress = (currentStartAddress, grid, lockedColumns) => {\n const gridColLength = cellLength(grid[0]);\n const adjustedRowAddress = extractGridDetails(grid).cols.length + currentStartAddress.row;\n const possibleColAddresses = range$1(gridColLength - currentStartAddress.column, num => num + currentStartAddress.column);\n const validColAddress = find$1(possibleColAddresses, num => forall(lockedColumns, col => col !== num)).getOr(gridColLength - 1);\n return {\n row: adjustedRowAddress,\n column: validColAddress\n };\n };\n const getLockedColumnsWithinBounds = (startAddress, rows, lockedColumns) => filter$2(lockedColumns, colNum => colNum >= startAddress.column && colNum <= cellLength(rows[0]) + startAddress.column);\n const merge$1 = (startAddress, gridA, gridB, generator, comparator) => {\n const lockedColumns = getLockedColumnsFromGrid(gridA);\n const validStartAddress = getValidStartAddress(startAddress, gridA, lockedColumns);\n const gridBRows = extractGridDetails(gridB).rows;\n const lockedColumnsWithinBounds = getLockedColumnsWithinBounds(validStartAddress, gridBRows, lockedColumns);\n const result = measure(validStartAddress, gridA, gridBRows);\n return result.map(diff => {\n const delta = {\n ...diff,\n colDelta: diff.colDelta - lockedColumnsWithinBounds.length\n };\n const fittedGrid = tailor(gridA, delta, generator);\n const newLockedColumns = getLockedColumnsFromGrid(fittedGrid);\n const newLockedColumnsWithinBounds = getLockedColumnsWithinBounds(validStartAddress, gridBRows, newLockedColumns);\n return mergeTables(validStartAddress, fittedGrid, gridBRows, generator, comparator, newLockedColumnsWithinBounds);\n });\n };\n const insertCols = (index, gridA, gridB, generator, comparator) => {\n splitCols(gridA, index, comparator, generator.cell);\n const delta = measureHeight(gridB, gridA);\n const fittedNewGrid = tailor(gridB, delta, generator);\n const secondDelta = measureHeight(gridA, fittedNewGrid);\n const fittedOldGrid = tailor(gridA, secondDelta, generator);\n return map$1(fittedOldGrid, (gridRow, i) => {\n return addCells(gridRow, index, fittedNewGrid[i].cells);\n });\n };\n const insertRows = (index, gridA, gridB, generator, comparator) => {\n splitRows(gridA, index, comparator, generator.cell);\n const locked = getLockedColumnsFromGrid(gridA);\n const diff = measureWidth(gridA, gridB);\n const delta = {\n ...diff,\n colDelta: diff.colDelta - locked.length\n };\n const fittedOldGrid = tailor(gridA, delta, generator);\n const {\n cols: oldCols,\n rows: oldRows\n } = extractGridDetails(fittedOldGrid);\n const newLocked = getLockedColumnsFromGrid(fittedOldGrid);\n const secondDiff = measureWidth(gridB, gridA);\n const secondDelta = {\n ...secondDiff,\n colDelta: secondDiff.colDelta + newLocked.length\n };\n const fittedGridB = lockedColFill(gridB, generator, newLocked);\n const fittedNewGrid = tailor(fittedGridB, secondDelta, generator);\n return [\n ...oldCols,\n ...oldRows.slice(0, index),\n ...fittedNewGrid,\n ...oldRows.slice(index, oldRows.length)\n ];\n };\n\n const cloneRow = (row, cloneCell, comparator, substitution) => clone(row, elem => substitution(elem, comparator), cloneCell);\n const insertRowAt = (grid, index, example, comparator, substitution) => {\n const {rows, cols} = extractGridDetails(grid);\n const before = rows.slice(0, index);\n const after = rows.slice(index);\n const newRow = cloneRow(rows[example], (ex, c) => {\n const withinSpan = index > 0 && index < rows.length && comparator(getCellElement(rows[index - 1], c), getCellElement(rows[index], c));\n const ret = withinSpan ? getCell(rows[index], c) : elementnew(substitution(ex.element, comparator), true, ex.isLocked);\n return ret;\n }, comparator, substitution);\n return [\n ...cols,\n ...before,\n newRow,\n ...after\n ];\n };\n const getElementFor = (row, column, section, withinSpan, example, comparator, substitution) => {\n if (section === 'colgroup' || !withinSpan) {\n const cell = getCell(row, example);\n return elementnew(substitution(cell.element, comparator), true, false);\n } else {\n return getCell(row, column);\n }\n };\n const insertColumnAt = (grid, index, example, comparator, substitution) => map$1(grid, row => {\n const withinSpan = index > 0 && index < cellLength(row) && comparator(getCellElement(row, index - 1), getCellElement(row, index));\n const sub = getElementFor(row, index, row.section, withinSpan, example, comparator, substitution);\n return addCell(row, index, sub);\n });\n const deleteColumnsAt = (grid, columns) => bind$2(grid, row => {\n const existingCells = row.cells;\n const cells = foldr(columns, (acc, column) => column >= 0 && column < acc.length ? acc.slice(0, column).concat(acc.slice(column + 1)) : acc, existingCells);\n return cells.length > 0 ? [rowcells(row.element, cells, row.section, row.isNew)] : [];\n });\n const deleteRowsAt = (grid, start, finish) => {\n const {rows, cols} = extractGridDetails(grid);\n return [\n ...cols,\n ...rows.slice(0, start),\n ...rows.slice(finish + 1)\n ];\n };\n\n const notInStartRow = (grid, rowIndex, colIndex, comparator) => getCellElement(grid[rowIndex], colIndex) !== undefined && (rowIndex > 0 && comparator(getCellElement(grid[rowIndex - 1], colIndex), getCellElement(grid[rowIndex], colIndex)));\n const notInStartColumn = (row, index, comparator) => index > 0 && comparator(getCellElement(row, index - 1), getCellElement(row, index));\n const isDuplicatedCell = (grid, rowIndex, colIndex, comparator) => notInStartRow(grid, rowIndex, colIndex, comparator) || notInStartColumn(grid[rowIndex], colIndex, comparator);\n const rowReplacerPredicate = (targetRow, columnHeaders) => {\n const entireTableIsHeader = forall(columnHeaders, identity) && isHeaderCells(targetRow.cells);\n return entireTableIsHeader ? always : (cell, _rowIndex, colIndex) => {\n const type = name(cell.element);\n return !(type === 'th' && columnHeaders[colIndex]);\n };\n };\n const columnReplacePredicate = (targetColumn, rowHeaders) => {\n const entireTableIsHeader = forall(rowHeaders, identity) && isHeaderCells(targetColumn);\n return entireTableIsHeader ? always : (cell, rowIndex, _colIndex) => {\n const type = name(cell.element);\n return !(type === 'th' && rowHeaders[rowIndex]);\n };\n };\n const determineScope = (applyScope, cell, newScope, isInHeader) => {\n const hasSpan = scope => scope === 'row' ? hasRowspan(cell) : hasColspan(cell);\n const getScope = scope => hasSpan(scope) ? `${ scope }group` : scope;\n if (applyScope) {\n return isHeaderCell(cell) ? getScope(newScope) : null;\n } else if (isInHeader && isHeaderCell(cell)) {\n const oppositeScope = newScope === 'row' ? 'col' : 'row';\n return getScope(oppositeScope);\n } else {\n return null;\n }\n };\n const rowScopeGenerator = (applyScope, columnHeaders) => (cell, rowIndex, columnIndex) => Optional.some(determineScope(applyScope, cell.element, 'col', columnHeaders[columnIndex]));\n const columnScopeGenerator = (applyScope, rowHeaders) => (cell, rowIndex) => Optional.some(determineScope(applyScope, cell.element, 'row', rowHeaders[rowIndex]));\n const replace = (cell, comparator, substitute) => elementnew(substitute(cell.element, comparator), true, cell.isLocked);\n const replaceIn = (grid, targets, comparator, substitute, replacer, genScope, shouldReplace) => {\n const isTarget = cell => {\n return exists(targets, target => {\n return comparator(cell.element, target.element);\n });\n };\n return map$1(grid, (row, rowIndex) => {\n return mapCells(row, (cell, colIndex) => {\n if (isTarget(cell)) {\n const newCell = shouldReplace(cell, rowIndex, colIndex) ? replacer(cell, comparator, substitute) : cell;\n genScope(newCell, rowIndex, colIndex).each(scope => {\n setOptions(newCell.element, { scope: Optional.from(scope) });\n });\n return newCell;\n } else {\n return cell;\n }\n });\n });\n };\n const getColumnCells = (rows, columnIndex, comparator) => bind$2(rows, (row, i) => {\n return isDuplicatedCell(rows, i, columnIndex, comparator) ? [] : [getCell(row, columnIndex)];\n });\n const getRowCells = (rows, rowIndex, comparator) => {\n const targetRow = rows[rowIndex];\n return bind$2(targetRow.cells, (item, i) => {\n return isDuplicatedCell(rows, rowIndex, i, comparator) ? [] : [item];\n });\n };\n const replaceColumns = (grid, indexes, applyScope, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n const targets = bind$2(indexes, index => getColumnCells(rows, index, comparator));\n const rowHeaders = map$1(rows, row => isHeaderCells(row.cells));\n const shouldReplaceCell = columnReplacePredicate(targets, rowHeaders);\n const scopeGenerator = columnScopeGenerator(applyScope, rowHeaders);\n return replaceIn(grid, targets, comparator, substitution, replace, scopeGenerator, shouldReplaceCell);\n };\n const replaceRows = (grid, indexes, section, applyScope, comparator, substitution, tableSection) => {\n const {cols, rows} = extractGridDetails(grid);\n const targetRow = rows[indexes[0]];\n const targets = bind$2(indexes, index => getRowCells(rows, index, comparator));\n const columnHeaders = map$1(targetRow.cells, (_cell, index) => isHeaderCells(getColumnCells(rows, index, comparator)));\n const newRows = [...rows];\n each$2(indexes, index => {\n newRows[index] = tableSection.transformRow(rows[index], section);\n });\n const newGrid = [\n ...cols,\n ...newRows\n ];\n const shouldReplaceCell = rowReplacerPredicate(targetRow, columnHeaders);\n const scopeGenerator = rowScopeGenerator(applyScope, columnHeaders);\n return replaceIn(newGrid, targets, comparator, substitution, tableSection.transformCell, scopeGenerator, shouldReplaceCell);\n };\n const replaceCells = (grid, details, comparator, substitution) => {\n const rows = extractGridDetails(grid).rows;\n const targetCells = map$1(details, detail => getCell(rows[detail.row], detail.column));\n return replaceIn(grid, targetCells, comparator, substitution, replace, Optional.none, always);\n };\n\n const generate = cases => {\n if (!isArray(cases)) {\n throw new Error('cases must be an array');\n }\n if (cases.length === 0) {\n throw new Error('there must be at least one case');\n }\n const constructors = [];\n const adt = {};\n each$2(cases, (acase, count) => {\n const keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n const key = keys$1[0];\n const value = acase[key];\n if (adt[key] !== undefined) {\n throw new Error('duplicate key detected:' + key);\n } else if (key === 'cata') {\n throw new Error('cannot have a case named cata (sorry)');\n } else if (!isArray(value)) {\n throw new Error('case arguments must be an array');\n }\n constructors.push(key);\n adt[key] = (...args) => {\n const argLength = args.length;\n if (argLength !== value.length) {\n throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n }\n const match = branches => {\n const branchKeys = keys(branches);\n if (constructors.length !== branchKeys.length) {\n throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n }\n const allReqd = forall(constructors, reqKey => {\n return contains$2(branchKeys, reqKey);\n });\n if (!allReqd) {\n throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n }\n return branches[key].apply(null, args);\n };\n return {\n fold: (...foldArgs) => {\n if (foldArgs.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length);\n }\n const target = foldArgs[count];\n return target.apply(null, args);\n },\n match,\n log: label => {\n console.log(label, {\n constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n const Adt = { generate };\n\n const adt$6 = Adt.generate([\n { none: [] },\n { only: ['index'] },\n {\n left: [\n 'index',\n 'next'\n ]\n },\n {\n middle: [\n 'prev',\n 'index',\n 'next'\n ]\n },\n {\n right: [\n 'prev',\n 'index'\n ]\n }\n ]);\n const ColumnContext = { ...adt$6 };\n\n const neighbours = (input, index) => {\n if (input.length === 0) {\n return ColumnContext.none();\n }\n if (input.length === 1) {\n return ColumnContext.only(0);\n }\n if (index === 0) {\n return ColumnContext.left(0, 1);\n }\n if (index === input.length - 1) {\n return ColumnContext.right(index - 1, index);\n }\n if (index > 0 && index < input.length - 1) {\n return ColumnContext.middle(index - 1, index, index + 1);\n }\n return ColumnContext.none();\n };\n const determine = (input, column, step, tableSize, resize) => {\n const result = input.slice(0);\n const context = neighbours(input, column);\n const onNone = constant(map$1(result, constant(0)));\n const onOnly = index => tableSize.singleColumnWidth(result[index], step);\n const onLeft = (index, next) => resize.calcLeftEdgeDeltas(result, index, next, step, tableSize.minCellWidth(), tableSize.isRelative);\n const onMiddle = (prev, index, next) => resize.calcMiddleDeltas(result, prev, index, next, step, tableSize.minCellWidth(), tableSize.isRelative);\n const onRight = (prev, index) => resize.calcRightEdgeDeltas(result, prev, index, step, tableSize.minCellWidth(), tableSize.isRelative);\n return context.fold(onNone, onOnly, onLeft, onMiddle, onRight);\n };\n\n const total = (start, end, measures) => {\n let r = 0;\n for (let i = start; i < end; i++) {\n r += measures[i] !== undefined ? measures[i] : 0;\n }\n return r;\n };\n const recalculateWidthForCells = (warehouse, widths) => {\n const all = Warehouse.justCells(warehouse);\n return map$1(all, cell => {\n const width = total(cell.column, cell.column + cell.colspan, widths);\n return {\n element: cell.element,\n width,\n colspan: cell.colspan\n };\n });\n };\n const recalculateWidthForColumns = (warehouse, widths) => {\n const groups = Warehouse.justColumns(warehouse);\n return map$1(groups, (column, index) => ({\n element: column.element,\n width: widths[index],\n colspan: column.colspan\n }));\n };\n const recalculateHeightForCells = (warehouse, heights) => {\n const all = Warehouse.justCells(warehouse);\n return map$1(all, cell => {\n const height = total(cell.row, cell.row + cell.rowspan, heights);\n return {\n element: cell.element,\n height,\n rowspan: cell.rowspan\n };\n });\n };\n const matchRowHeight = (warehouse, heights) => {\n return map$1(warehouse.all, (row, i) => {\n return {\n element: row.element,\n height: heights[i]\n };\n });\n };\n\n const sumUp = newSize => foldr(newSize, (b, a) => b + a, 0);\n const recalculate = (warehouse, widths) => {\n if (Warehouse.hasColumns(warehouse)) {\n return recalculateWidthForColumns(warehouse, widths);\n } else {\n return recalculateWidthForCells(warehouse, widths);\n }\n };\n const recalculateAndApply = (warehouse, widths, tableSize) => {\n const newSizes = recalculate(warehouse, widths);\n each$2(newSizes, cell => {\n tableSize.setElementWidth(cell.element, cell.width);\n });\n };\n const adjustWidth = (table, delta, index, resizing, tableSize) => {\n const warehouse = Warehouse.fromTable(table);\n const step = tableSize.getCellDelta(delta);\n const widths = tableSize.getWidths(warehouse, tableSize);\n const isLastColumn = index === warehouse.grid.columns - 1;\n const clampedStep = resizing.clampTableDelta(widths, index, step, tableSize.minCellWidth(), isLastColumn);\n const deltas = determine(widths, index, clampedStep, tableSize, resizing);\n const newWidths = map$1(deltas, (dx, i) => dx + widths[i]);\n recalculateAndApply(warehouse, newWidths, tableSize);\n resizing.resizeTable(tableSize.adjustTableWidth, clampedStep, isLastColumn);\n };\n const adjustHeight = (table, delta, index, direction) => {\n const warehouse = Warehouse.fromTable(table);\n const heights = getPixelHeights(warehouse, table, direction);\n const newHeights = map$1(heights, (dy, i) => index === i ? Math.max(delta + dy, minHeight()) : dy);\n const newCellSizes = recalculateHeightForCells(warehouse, newHeights);\n const newRowSizes = matchRowHeight(warehouse, newHeights);\n each$2(newRowSizes, row => {\n setHeight(row.element, row.height);\n });\n each$2(newCellSizes, cell => {\n setHeight(cell.element, cell.height);\n });\n const total = sumUp(newHeights);\n setHeight(table, total);\n };\n const adjustAndRedistributeWidths$1 = (_table, list, details, tableSize, resizeBehaviour) => {\n const warehouse = Warehouse.generate(list);\n const sizes = tableSize.getWidths(warehouse, tableSize);\n const tablePixelWidth = tableSize.pixelWidth();\n const {newSizes, delta} = resizeBehaviour.calcRedestributedWidths(sizes, tablePixelWidth, details.pixelDelta, tableSize.isRelative);\n recalculateAndApply(warehouse, newSizes, tableSize);\n tableSize.adjustTableWidth(delta);\n };\n const adjustWidthTo = (_table, list, _info, tableSize) => {\n const warehouse = Warehouse.generate(list);\n const widths = tableSize.getWidths(warehouse, tableSize);\n recalculateAndApply(warehouse, widths, tableSize);\n };\n\n const uniqueColumns = details => {\n const uniqueCheck = (rest, detail) => {\n const columnExists = exists(rest, currentDetail => currentDetail.column === detail.column);\n return columnExists ? rest : rest.concat([detail]);\n };\n return foldl(details, uniqueCheck, []).sort((detailA, detailB) => detailA.column - detailB.column);\n };\n\n const isCol = isTag('col');\n const isColgroup = isTag('colgroup');\n const isRow$1 = element => name(element) === 'tr' || isColgroup(element);\n const elementToData = element => {\n const colspan = getAttrValue(element, 'colspan', 1);\n const rowspan = getAttrValue(element, 'rowspan', 1);\n return {\n element,\n colspan,\n rowspan\n };\n };\n const modification = (generators, toData = elementToData) => {\n const nuCell = data => isCol(data.element) ? generators.col(data) : generators.cell(data);\n const nuRow = data => isColgroup(data.element) ? generators.colgroup(data) : generators.row(data);\n const add = element => {\n if (isRow$1(element)) {\n return nuRow({ element });\n } else {\n const cell = element;\n const replacement = nuCell(toData(cell));\n recent = Optional.some({\n item: cell,\n replacement\n });\n return replacement;\n }\n };\n let recent = Optional.none();\n const getOrInit = (element, comparator) => {\n return recent.fold(() => {\n return add(element);\n }, p => {\n return comparator(element, p.item) ? p.replacement : add(element);\n });\n };\n return { getOrInit };\n };\n const transform$1 = tag => {\n return generators => {\n const list = [];\n const find = (element, comparator) => {\n return find$1(list, x => {\n return comparator(x.item, element);\n });\n };\n const makeNew = element => {\n const attrs = tag === 'td' ? { scope: null } : {};\n const cell = generators.replace(element, tag, attrs);\n list.push({\n item: element,\n sub: cell\n });\n return cell;\n };\n const replaceOrInit = (element, comparator) => {\n if (isRow$1(element) || isCol(element)) {\n return element;\n } else {\n const cell = element;\n return find(cell, comparator).fold(() => {\n return makeNew(cell);\n }, p => {\n return comparator(element, p.item) ? p.sub : makeNew(cell);\n });\n }\n };\n return { replaceOrInit };\n };\n };\n const getScopeAttribute = cell => getOpt(cell, 'scope').map(attribute => attribute.substr(0, 3));\n const merging = generators => {\n const unmerge = cell => {\n const scope = getScopeAttribute(cell);\n scope.each(attribute => set$2(cell, 'scope', attribute));\n return () => {\n const raw = generators.cell({\n element: cell,\n colspan: 1,\n rowspan: 1\n });\n remove$5(raw, 'width');\n remove$5(cell, 'width');\n scope.each(attribute => set$2(raw, 'scope', attribute));\n return raw;\n };\n };\n const merge = cells => {\n const getScopeProperty = () => {\n const stringAttributes = cat(map$1(cells, getScopeAttribute));\n if (stringAttributes.length === 0) {\n return Optional.none();\n } else {\n const baseScope = stringAttributes[0];\n const scopes = [\n 'row',\n 'col'\n ];\n const isMixed = exists(stringAttributes, attribute => {\n return attribute !== baseScope && contains$2(scopes, attribute);\n });\n return isMixed ? Optional.none() : Optional.from(baseScope);\n }\n };\n remove$5(cells[0], 'width');\n getScopeProperty().fold(() => remove$7(cells[0], 'scope'), attribute => set$2(cells[0], 'scope', attribute + 'group'));\n return constant(cells[0]);\n };\n return {\n unmerge,\n merge\n };\n };\n const Generators = {\n modification,\n transform: transform$1,\n merging\n };\n\n const blockList = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'table',\n 'thead',\n 'tfoot',\n 'tbody',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n const isList$1 = (universe, item) => {\n const tagName = universe.property().name(item);\n return contains$2([\n 'ol',\n 'ul'\n ], tagName);\n };\n const isBlock$1 = (universe, item) => {\n const tagName = universe.property().name(item);\n return contains$2(blockList, tagName);\n };\n const isEmptyTag$1 = (universe, item) => {\n return contains$2([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], universe.property().name(item));\n };\n\n const universe$1 = DomUniverse();\n const isBlock = element => {\n return isBlock$1(universe$1, element);\n };\n const isList = element => {\n return isList$1(universe$1, element);\n };\n const isEmptyTag = element => {\n return isEmptyTag$1(universe$1, element);\n };\n\n const merge = cells => {\n const isBr = isTag('br');\n const advancedBr = children => {\n return forall(children, c => {\n return isBr(c) || isText(c) && get$6(c).trim().length === 0;\n });\n };\n const isListItem = el => {\n return name(el) === 'li' || ancestor$2(el, isList).isSome();\n };\n const siblingIsBlock = el => {\n return nextSibling(el).map(rightSibling => {\n if (isBlock(rightSibling)) {\n return true;\n }\n if (isEmptyTag(rightSibling)) {\n return name(rightSibling) === 'img' ? false : true;\n }\n return false;\n }).getOr(false);\n };\n const markCell = cell => {\n return last$1(cell).bind(rightEdge => {\n const rightSiblingIsBlock = siblingIsBlock(rightEdge);\n return parent(rightEdge).map(parent => {\n return rightSiblingIsBlock === true || isListItem(parent) || isBr(rightEdge) || isBlock(parent) && !eq$1(cell, parent) ? [] : [SugarElement.fromTag('br')];\n });\n }).getOr([]);\n };\n const markContent = () => {\n const content = bind$2(cells, cell => {\n const children = children$2(cell);\n return advancedBr(children) ? [] : children.concat(markCell(cell));\n });\n return content.length === 0 ? [SugarElement.fromTag('br')] : content;\n };\n const contents = markContent();\n empty(cells[0]);\n append(cells[0], contents);\n };\n\n const isEditable = elem => isEditable$1(elem, true);\n const prune = table => {\n const cells = cells$1(table);\n if (cells.length === 0) {\n remove$6(table);\n }\n };\n const outcome = (grid, cursor) => ({\n grid,\n cursor\n });\n const findEditableCursorPosition = rows => findMap(rows, row => findMap(row.cells, cell => {\n const elem = cell.element;\n return someIf(isEditable(elem), elem);\n }));\n const elementFromGrid = (grid, row, column) => {\n var _a, _b;\n const rows = extractGridDetails(grid).rows;\n return Optional.from((_b = (_a = rows[row]) === null || _a === void 0 ? void 0 : _a.cells[column]) === null || _b === void 0 ? void 0 : _b.element).filter(isEditable).orThunk(() => findEditableCursorPosition(rows));\n };\n const bundle = (grid, row, column) => {\n const cursorElement = elementFromGrid(grid, row, column);\n return outcome(grid, cursorElement);\n };\n const uniqueRows = details => {\n const rowCompilation = (rest, detail) => {\n const rowExists = exists(rest, currentDetail => currentDetail.row === detail.row);\n return rowExists ? rest : rest.concat([detail]);\n };\n return foldl(details, rowCompilation, []).sort((detailA, detailB) => detailA.row - detailB.row);\n };\n const opInsertRowsBefore = (grid, details, comparator, genWrappers) => {\n const targetIndex = details[0].row;\n const rows = uniqueRows(details);\n const newGrid = foldr(rows, (acc, row) => {\n const newG = insertRowAt(acc.grid, targetIndex, row.row + acc.delta, comparator, genWrappers.getOrInit);\n return {\n grid: newG,\n delta: acc.delta + 1\n };\n }, {\n grid,\n delta: 0\n }).grid;\n return bundle(newGrid, targetIndex, details[0].column);\n };\n const opInsertRowsAfter = (grid, details, comparator, genWrappers) => {\n const rows = uniqueRows(details);\n const target = rows[rows.length - 1];\n const targetIndex = target.row + target.rowspan;\n const newGrid = foldr(rows, (newG, row) => {\n return insertRowAt(newG, targetIndex, row.row, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, targetIndex, details[0].column);\n };\n const opInsertColumnsBefore = (grid, extractDetail, comparator, genWrappers) => {\n const details = extractDetail.details;\n const columns = uniqueColumns(details);\n const targetIndex = columns[0].column;\n const newGrid = foldr(columns, (acc, col) => {\n const newG = insertColumnAt(acc.grid, targetIndex, col.column + acc.delta, comparator, genWrappers.getOrInit);\n return {\n grid: newG,\n delta: acc.delta + 1\n };\n }, {\n grid,\n delta: 0\n }).grid;\n return bundle(newGrid, details[0].row, targetIndex);\n };\n const opInsertColumnsAfter = (grid, extractDetail, comparator, genWrappers) => {\n const details = extractDetail.details;\n const target = details[details.length - 1];\n const targetIndex = target.column + target.colspan;\n const columns = uniqueColumns(details);\n const newGrid = foldr(columns, (newG, col) => {\n return insertColumnAt(newG, targetIndex, col.column, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, details[0].row, targetIndex);\n };\n const opMakeColumnsHeader = (initialGrid, details, comparator, genWrappers) => {\n const columns = uniqueColumns(details);\n const columnIndexes = map$1(columns, detail => detail.column);\n const newGrid = replaceColumns(initialGrid, columnIndexes, true, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opMakeCellsHeader = (initialGrid, details, comparator, genWrappers) => {\n const newGrid = replaceCells(initialGrid, details, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opUnmakeColumnsHeader = (initialGrid, details, comparator, genWrappers) => {\n const columns = uniqueColumns(details);\n const columnIndexes = map$1(columns, detail => detail.column);\n const newGrid = replaceColumns(initialGrid, columnIndexes, false, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opUnmakeCellsHeader = (initialGrid, details, comparator, genWrappers) => {\n const newGrid = replaceCells(initialGrid, details, comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const makeRowsSection = (section, applyScope) => (initialGrid, details, comparator, genWrappers, tableSection) => {\n const rows = uniqueRows(details);\n const rowIndexes = map$1(rows, detail => detail.row);\n const newGrid = replaceRows(initialGrid, rowIndexes, section, applyScope, comparator, genWrappers.replaceOrInit, tableSection);\n return bundle(newGrid, details[0].row, details[0].column);\n };\n const opMakeRowsHeader = makeRowsSection('thead', true);\n const opMakeRowsBody = makeRowsSection('tbody', false);\n const opMakeRowsFooter = makeRowsSection('tfoot', false);\n const opEraseColumns = (grid, extractDetail, _comparator, _genWrappers) => {\n const columns = uniqueColumns(extractDetail.details);\n const newGrid = deleteColumnsAt(grid, map$1(columns, column => column.column));\n const maxColIndex = newGrid.length > 0 ? newGrid[0].cells.length - 1 : 0;\n return bundle(newGrid, columns[0].row, Math.min(columns[0].column, maxColIndex));\n };\n const opEraseRows = (grid, details, _comparator, _genWrappers) => {\n const rows = uniqueRows(details);\n const newGrid = deleteRowsAt(grid, rows[0].row, rows[rows.length - 1].row);\n const maxRowIndex = newGrid.length > 0 ? newGrid.length - 1 : 0;\n return bundle(newGrid, Math.min(details[0].row, maxRowIndex), details[0].column);\n };\n const opMergeCells = (grid, mergable, comparator, genWrappers) => {\n const cells = mergable.cells;\n merge(cells);\n const newGrid = merge$2(grid, mergable.bounds, comparator, genWrappers.merge(cells));\n return outcome(newGrid, Optional.from(cells[0]));\n };\n const opUnmergeCells = (grid, unmergable, comparator, genWrappers) => {\n const unmerge$1 = (b, cell) => unmerge(b, cell, comparator, genWrappers.unmerge(cell));\n const newGrid = foldr(unmergable, unmerge$1, grid);\n return outcome(newGrid, Optional.from(unmergable[0]));\n };\n const opPasteCells = (grid, pasteDetails, comparator, _genWrappers) => {\n const gridify = (table, generators) => {\n const wh = Warehouse.fromTable(table);\n return toGrid(wh, generators, true);\n };\n const gridB = gridify(pasteDetails.clipboard, pasteDetails.generators);\n const startAddress = address(pasteDetails.row, pasteDetails.column);\n const mergedGrid = merge$1(startAddress, grid, gridB, pasteDetails.generators, comparator);\n return mergedGrid.fold(() => outcome(grid, Optional.some(pasteDetails.element)), newGrid => {\n return bundle(newGrid, pasteDetails.row, pasteDetails.column);\n });\n };\n const gridifyRows = (rows, generators, context) => {\n const pasteDetails = fromPastedRows(rows, context.section);\n const wh = Warehouse.generate(pasteDetails);\n return toGrid(wh, generators, true);\n };\n const opPasteColsBefore = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[0].column;\n const context = rows[pasteDetails.cells[0].row];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n };\n const opPasteColsAfter = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[pasteDetails.cells.length - 1].column + pasteDetails.cells[pasteDetails.cells.length - 1].colspan;\n const context = rows[pasteDetails.cells[0].row];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n };\n const opPasteRowsBefore = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[0].row;\n const context = rows[index];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n };\n const opPasteRowsAfter = (grid, pasteDetails, comparator, _genWrappers) => {\n const rows = extractGridDetails(grid).rows;\n const index = pasteDetails.cells[pasteDetails.cells.length - 1].row + pasteDetails.cells[pasteDetails.cells.length - 1].rowspan;\n const context = rows[pasteDetails.cells[0].row];\n const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);\n const mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator);\n return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);\n };\n const opGetColumnsType = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onCells(house, target);\n return details.bind(selectedCells => {\n const lastSelectedCell = selectedCells[selectedCells.length - 1];\n const minColRange = selectedCells[0].column;\n const maxColRange = lastSelectedCell.column + lastSelectedCell.colspan;\n const selectedColumnCells = flatten(map$1(house.all, row => filter$2(row.cells, cell => cell.column >= minColRange && cell.column < maxColRange)));\n return findCommonCellType(selectedColumnCells);\n }).getOr('');\n };\n const opGetCellsType = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onCells(house, target);\n return details.bind(findCommonCellType).getOr('');\n };\n const opGetRowsType = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onCells(house, target);\n return details.bind(selectedCells => {\n const lastSelectedCell = selectedCells[selectedCells.length - 1];\n const minRowRange = selectedCells[0].row;\n const maxRowRange = lastSelectedCell.row + lastSelectedCell.rowspan;\n const selectedRows = house.all.slice(minRowRange, maxRowRange);\n return findCommonRowType(selectedRows);\n }).getOr('');\n };\n const resize = (table, list, details, behaviours) => adjustWidthTo(table, list, details, behaviours.sizing);\n const adjustAndRedistributeWidths = (table, list, details, behaviours) => adjustAndRedistributeWidths$1(table, list, details, behaviours.sizing, behaviours.resize);\n const firstColumnIsLocked = (_warehouse, details) => exists(details, detail => detail.column === 0 && detail.isLocked);\n const lastColumnIsLocked = (warehouse, details) => exists(details, detail => detail.column + detail.colspan >= warehouse.grid.columns && detail.isLocked);\n const getColumnsWidth = (warehouse, details) => {\n const columns$1 = columns(warehouse);\n const uniqueCols = uniqueColumns(details);\n return foldl(uniqueCols, (acc, detail) => {\n const column = columns$1[detail.column];\n const colWidth = column.map(getOuter$2).getOr(0);\n return acc + colWidth;\n }, 0);\n };\n const insertColumnsExtractor = before => (warehouse, target) => onCells(warehouse, target).filter(details => {\n const checkLocked = before ? firstColumnIsLocked : lastColumnIsLocked;\n return !checkLocked(warehouse, details);\n }).map(details => ({\n details,\n pixelDelta: getColumnsWidth(warehouse, details)\n }));\n const eraseColumnsExtractor = (warehouse, target) => onUnlockedCells(warehouse, target).map(details => ({\n details,\n pixelDelta: -getColumnsWidth(warehouse, details)\n }));\n const pasteColumnsExtractor = before => (warehouse, target) => onPasteByEditor(warehouse, target).filter(details => {\n const checkLocked = before ? firstColumnIsLocked : lastColumnIsLocked;\n return !checkLocked(warehouse, details.cells);\n });\n const headerCellGenerator = Generators.transform('th');\n const bodyCellGenerator = Generators.transform('td');\n const insertRowsBefore = run(opInsertRowsBefore, onCells, noop, noop, Generators.modification);\n const insertRowsAfter = run(opInsertRowsAfter, onCells, noop, noop, Generators.modification);\n const insertColumnsBefore = run(opInsertColumnsBefore, insertColumnsExtractor(true), adjustAndRedistributeWidths, noop, Generators.modification);\n const insertColumnsAfter = run(opInsertColumnsAfter, insertColumnsExtractor(false), adjustAndRedistributeWidths, noop, Generators.modification);\n const eraseColumns = run(opEraseColumns, eraseColumnsExtractor, adjustAndRedistributeWidths, prune, Generators.modification);\n const eraseRows = run(opEraseRows, onCells, noop, prune, Generators.modification);\n const makeColumnsHeader = run(opMakeColumnsHeader, onUnlockedCells, noop, noop, headerCellGenerator);\n const unmakeColumnsHeader = run(opUnmakeColumnsHeader, onUnlockedCells, noop, noop, bodyCellGenerator);\n const makeRowsHeader = run(opMakeRowsHeader, onUnlockedCells, noop, noop, headerCellGenerator);\n const makeRowsBody = run(opMakeRowsBody, onUnlockedCells, noop, noop, bodyCellGenerator);\n const makeRowsFooter = run(opMakeRowsFooter, onUnlockedCells, noop, noop, bodyCellGenerator);\n const makeCellsHeader = run(opMakeCellsHeader, onUnlockedCells, noop, noop, headerCellGenerator);\n const unmakeCellsHeader = run(opUnmakeCellsHeader, onUnlockedCells, noop, noop, bodyCellGenerator);\n const mergeCells = run(opMergeCells, onUnlockedMergable, resize, noop, Generators.merging);\n const unmergeCells = run(opUnmergeCells, onUnlockedUnmergable, resize, noop, Generators.merging);\n const pasteCells = run(opPasteCells, onPaste, resize, noop, Generators.modification);\n const pasteColsBefore = run(opPasteColsBefore, pasteColumnsExtractor(true), noop, noop, Generators.modification);\n const pasteColsAfter = run(opPasteColsAfter, pasteColumnsExtractor(false), noop, noop, Generators.modification);\n const pasteRowsBefore = run(opPasteRowsBefore, onPasteByEditor, noop, noop, Generators.modification);\n const pasteRowsAfter = run(opPasteRowsAfter, onPasteByEditor, noop, noop, Generators.modification);\n const getColumnsType = opGetColumnsType;\n const getCellsType = opGetCellsType;\n const getRowsType = opGetRowsType;\n\n const fireNewRow = (editor, row) => editor.dispatch('NewRow', { node: row });\n const fireNewCell = (editor, cell) => editor.dispatch('NewCell', { node: cell });\n const fireTableModified = (editor, table, data) => {\n editor.dispatch('TableModified', {\n ...data,\n table\n });\n };\n const fireTableSelectionChange = (editor, cells, start, finish, otherCells) => {\n editor.dispatch('TableSelectionChange', {\n cells,\n start,\n finish,\n otherCells\n });\n };\n const fireTableSelectionClear = editor => {\n editor.dispatch('TableSelectionClear');\n };\n const fireObjectResizeStart = (editor, target, width, height, origin) => {\n editor.dispatch('ObjectResizeStart', {\n target,\n width,\n height,\n origin\n });\n };\n const fireObjectResized = (editor, target, width, height, origin) => {\n editor.dispatch('ObjectResized', {\n target,\n width,\n height,\n origin\n });\n };\n const styleModified = {\n structure: false,\n style: true\n };\n const structureModified = {\n structure: true,\n style: false\n };\n const styleAndStructureModified = {\n structure: true,\n style: true\n };\n\n const get$5 = (editor, table) => {\n if (isTablePercentagesForced(editor)) {\n return TableSize.percentageSize(table);\n } else if (isTablePixelsForced(editor)) {\n return TableSize.pixelSize(table);\n } else {\n return TableSize.getTableSize(table);\n }\n };\n\n const TableActions = (editor, resizeHandler, cellSelectionHandler) => {\n const isTableBody = editor => name(getBody(editor)) === 'table';\n const lastRowGuard = table => !isTableBody(editor) || getGridSize(table).rows > 1;\n const lastColumnGuard = table => !isTableBody(editor) || getGridSize(table).columns > 1;\n const cloneFormats = getTableCloneElements(editor);\n const colMutationOp = isResizeTableColumnResizing(editor) ? noop : halve;\n const getTableSectionType = table => {\n switch (getTableHeaderType(editor)) {\n case 'section':\n return TableSection.section();\n case 'sectionCells':\n return TableSection.sectionCells();\n case 'cells':\n return TableSection.cells();\n default:\n return TableSection.getTableSectionType(table, 'section');\n }\n };\n const setSelectionFromAction = (table, result) => result.cursor.fold(() => {\n const cells = cells$1(table);\n return head(cells).filter(inBody).map(firstCell => {\n cellSelectionHandler.clearSelectedCells(table.dom);\n const rng = editor.dom.createRng();\n rng.selectNode(firstCell.dom);\n editor.selection.setRng(rng);\n set$2(firstCell, 'data-mce-selected', '1');\n return rng;\n });\n }, cell => {\n const des = freefallRtl(cell);\n const rng = editor.dom.createRng();\n rng.setStart(des.element.dom, des.offset);\n rng.setEnd(des.element.dom, des.offset);\n editor.selection.setRng(rng);\n cellSelectionHandler.clearSelectedCells(table.dom);\n return Optional.some(rng);\n });\n const execute = (operation, guard, mutate, effect) => (table, target, noEvents = false) => {\n removeDataStyle(table);\n const doc = SugarElement.fromDom(editor.getDoc());\n const generators = cellOperations(mutate, doc, cloneFormats);\n const behaviours = {\n sizing: get$5(editor, table),\n resize: isResizeTableColumnResizing(editor) ? resizeTable() : preserveTable(),\n section: getTableSectionType(table)\n };\n return guard(table) ? operation(table, target, generators, behaviours).bind(result => {\n resizeHandler.refresh(table.dom);\n each$2(result.newRows, row => {\n fireNewRow(editor, row.dom);\n });\n each$2(result.newCells, cell => {\n fireNewCell(editor, cell.dom);\n });\n const range = setSelectionFromAction(table, result);\n if (inBody(table)) {\n removeDataStyle(table);\n if (!noEvents) {\n fireTableModified(editor, table.dom, effect);\n }\n }\n return range.map(rng => ({\n rng,\n effect\n }));\n }) : Optional.none();\n };\n const deleteRow = execute(eraseRows, lastRowGuard, noop, structureModified);\n const deleteColumn = execute(eraseColumns, lastColumnGuard, noop, structureModified);\n const insertRowsBefore$1 = execute(insertRowsBefore, always, noop, structureModified);\n const insertRowsAfter$1 = execute(insertRowsAfter, always, noop, structureModified);\n const insertColumnsBefore$1 = execute(insertColumnsBefore, always, colMutationOp, structureModified);\n const insertColumnsAfter$1 = execute(insertColumnsAfter, always, colMutationOp, structureModified);\n const mergeCells$1 = execute(mergeCells, always, noop, structureModified);\n const unmergeCells$1 = execute(unmergeCells, always, noop, structureModified);\n const pasteColsBefore$1 = execute(pasteColsBefore, always, noop, structureModified);\n const pasteColsAfter$1 = execute(pasteColsAfter, always, noop, structureModified);\n const pasteRowsBefore$1 = execute(pasteRowsBefore, always, noop, structureModified);\n const pasteRowsAfter$1 = execute(pasteRowsAfter, always, noop, structureModified);\n const pasteCells$1 = execute(pasteCells, always, noop, styleAndStructureModified);\n const makeCellsHeader$1 = execute(makeCellsHeader, always, noop, structureModified);\n const unmakeCellsHeader$1 = execute(unmakeCellsHeader, always, noop, structureModified);\n const makeColumnsHeader$1 = execute(makeColumnsHeader, always, noop, structureModified);\n const unmakeColumnsHeader$1 = execute(unmakeColumnsHeader, always, noop, structureModified);\n const makeRowsHeader$1 = execute(makeRowsHeader, always, noop, structureModified);\n const makeRowsBody$1 = execute(makeRowsBody, always, noop, structureModified);\n const makeRowsFooter$1 = execute(makeRowsFooter, always, noop, structureModified);\n const getTableCellType = getCellsType;\n const getTableColType = getColumnsType;\n const getTableRowType = getRowsType;\n return {\n deleteRow,\n deleteColumn,\n insertRowsBefore: insertRowsBefore$1,\n insertRowsAfter: insertRowsAfter$1,\n insertColumnsBefore: insertColumnsBefore$1,\n insertColumnsAfter: insertColumnsAfter$1,\n mergeCells: mergeCells$1,\n unmergeCells: unmergeCells$1,\n pasteColsBefore: pasteColsBefore$1,\n pasteColsAfter: pasteColsAfter$1,\n pasteRowsBefore: pasteRowsBefore$1,\n pasteRowsAfter: pasteRowsAfter$1,\n pasteCells: pasteCells$1,\n makeCellsHeader: makeCellsHeader$1,\n unmakeCellsHeader: unmakeCellsHeader$1,\n makeColumnsHeader: makeColumnsHeader$1,\n unmakeColumnsHeader: unmakeColumnsHeader$1,\n makeRowsHeader: makeRowsHeader$1,\n makeRowsBody: makeRowsBody$1,\n makeRowsFooter: makeRowsFooter$1,\n getTableRowType,\n getTableCellType,\n getTableColType\n };\n };\n\n const constrainSpan = (element, property, value) => {\n const currentColspan = getAttrValue(element, property, 1);\n if (value === 1 || currentColspan <= 1) {\n remove$7(element, property);\n } else {\n set$2(element, property, Math.min(value, currentColspan));\n }\n };\n const isColInRange = (minColRange, maxColRange) => cell => {\n const endCol = cell.column + cell.colspan - 1;\n const startCol = cell.column;\n return endCol >= minColRange && startCol < maxColRange;\n };\n const generateColGroup = (house, minColRange, maxColRange) => {\n if (Warehouse.hasColumns(house)) {\n const colsToCopy = filter$2(Warehouse.justColumns(house), isColInRange(minColRange, maxColRange));\n const copiedCols = map$1(colsToCopy, c => {\n const clonedCol = deep(c.element);\n constrainSpan(clonedCol, 'span', maxColRange - minColRange);\n return clonedCol;\n });\n const fakeColgroup = SugarElement.fromTag('colgroup');\n append(fakeColgroup, copiedCols);\n return [fakeColgroup];\n } else {\n return [];\n }\n };\n const generateRows = (house, minColRange, maxColRange) => map$1(house.all, row => {\n const cellsToCopy = filter$2(row.cells, isColInRange(minColRange, maxColRange));\n const copiedCells = map$1(cellsToCopy, cell => {\n const clonedCell = deep(cell.element);\n constrainSpan(clonedCell, 'colspan', maxColRange - minColRange);\n return clonedCell;\n });\n const fakeTR = SugarElement.fromTag('tr');\n append(fakeTR, copiedCells);\n return fakeTR;\n });\n const copyCols = (table, target) => {\n const house = Warehouse.fromTable(table);\n const details = onUnlockedCells(house, target);\n return details.map(selectedCells => {\n const lastSelectedCell = selectedCells[selectedCells.length - 1];\n const minColRange = selectedCells[0].column;\n const maxColRange = lastSelectedCell.column + lastSelectedCell.colspan;\n const fakeColGroups = generateColGroup(house, minColRange, maxColRange);\n const fakeRows = generateRows(house, minColRange, maxColRange);\n return [\n ...fakeColGroups,\n ...fakeRows\n ];\n });\n };\n\n const copyRows = (table, target, generators) => {\n const warehouse = Warehouse.fromTable(table);\n const details = onCells(warehouse, target);\n return details.bind(selectedCells => {\n const grid = toGrid(warehouse, generators, false);\n const rows = extractGridDetails(grid).rows;\n const slicedGrid = rows.slice(selectedCells[0].row, selectedCells[selectedCells.length - 1].row + selectedCells[selectedCells.length - 1].rowspan);\n const filteredGrid = bind$2(slicedGrid, row => {\n const newCells = filter$2(row.cells, cell => !cell.isLocked);\n return newCells.length > 0 ? [{\n ...row,\n cells: newCells\n }] : [];\n });\n const slicedDetails = toDetailList(filteredGrid);\n return someIf(slicedDetails.length > 0, slicedDetails);\n }).map(slicedDetails => copy(slicedDetails));\n };\n\n const adt$5 = Adt.generate([\n { invalid: ['raw'] },\n { pixels: ['value'] },\n { percent: ['value'] }\n ]);\n const validateFor = (suffix, type, value) => {\n const rawAmount = value.substring(0, value.length - suffix.length);\n const amount = parseFloat(rawAmount);\n return rawAmount === amount.toString() ? type(amount) : adt$5.invalid(value);\n };\n const from = value => {\n if (endsWith(value, '%')) {\n return validateFor('%', adt$5.percent, value);\n }\n if (endsWith(value, 'px')) {\n return validateFor('px', adt$5.pixels, value);\n }\n return adt$5.invalid(value);\n };\n const Size = {\n ...adt$5,\n from\n };\n\n const redistributeToPercent = (widths, totalWidth) => {\n return map$1(widths, w => {\n const colType = Size.from(w);\n return colType.fold(() => {\n return w;\n }, px => {\n const ratio = px / totalWidth * 100;\n return ratio + '%';\n }, pc => {\n return pc + '%';\n });\n });\n };\n const redistributeToPx = (widths, totalWidth, newTotalWidth) => {\n const scale = newTotalWidth / totalWidth;\n return map$1(widths, w => {\n const colType = Size.from(w);\n return colType.fold(() => {\n return w;\n }, px => {\n return px * scale + 'px';\n }, pc => {\n return pc / 100 * newTotalWidth + 'px';\n });\n });\n };\n const redistributeEmpty = (newWidthType, columns) => {\n const f = newWidthType.fold(() => constant(''), pixels => {\n const num = pixels / columns;\n return constant(num + 'px');\n }, () => {\n const num = 100 / columns;\n return constant(num + '%');\n });\n return range$1(columns, f);\n };\n const redistributeValues = (newWidthType, widths, totalWidth) => {\n return newWidthType.fold(() => {\n return widths;\n }, px => {\n return redistributeToPx(widths, totalWidth, px);\n }, _pc => {\n return redistributeToPercent(widths, totalWidth);\n });\n };\n const redistribute$1 = (widths, totalWidth, newWidth) => {\n const newType = Size.from(newWidth);\n const floats = forall(widths, s => {\n return s === '0px';\n }) ? redistributeEmpty(newType, widths.length) : redistributeValues(newType, widths, totalWidth);\n return normalize(floats);\n };\n const sum = (values, fallback) => {\n if (values.length === 0) {\n return fallback;\n }\n return foldr(values, (rest, v) => {\n return Size.from(v).fold(constant(0), identity, identity) + rest;\n }, 0);\n };\n const roundDown = (num, unit) => {\n const floored = Math.floor(num);\n return {\n value: floored + unit,\n remainder: num - floored\n };\n };\n const add$3 = (value, amount) => {\n return Size.from(value).fold(constant(value), px => {\n return px + amount + 'px';\n }, pc => {\n return pc + amount + '%';\n });\n };\n const normalize = values => {\n if (values.length === 0) {\n return values;\n }\n const scan = foldr(values, (rest, value) => {\n const info = Size.from(value).fold(() => ({\n value,\n remainder: 0\n }), num => roundDown(num, 'px'), num => ({\n value: num + '%',\n remainder: 0\n }));\n return {\n output: [info.value].concat(rest.output),\n remainder: rest.remainder + info.remainder\n };\n }, {\n output: [],\n remainder: 0\n });\n const r = scan.output;\n return r.slice(0, r.length - 1).concat([add$3(r[r.length - 1], Math.round(scan.remainder))]);\n };\n const validate = Size.from;\n\n const redistributeToW = (newWidths, cells, unit) => {\n each$2(cells, cell => {\n const widths = newWidths.slice(cell.column, cell.colspan + cell.column);\n const w = sum(widths, minWidth());\n set$1(cell.element, 'width', w + unit);\n });\n };\n const redistributeToColumns = (newWidths, columns, unit) => {\n each$2(columns, (column, index) => {\n const width = sum([newWidths[index]], minWidth());\n set$1(column.element, 'width', width + unit);\n });\n };\n const redistributeToH = (newHeights, rows, cells, unit) => {\n each$2(cells, cell => {\n const heights = newHeights.slice(cell.row, cell.rowspan + cell.row);\n const h = sum(heights, minHeight());\n set$1(cell.element, 'height', h + unit);\n });\n each$2(rows, (row, i) => {\n set$1(row.element, 'height', newHeights[i]);\n });\n };\n const getUnit = newSize => {\n return validate(newSize).fold(constant('px'), constant('px'), constant('%'));\n };\n const redistribute = (table, optWidth, optHeight) => {\n const warehouse = Warehouse.fromTable(table);\n const rows = warehouse.all;\n const cells = Warehouse.justCells(warehouse);\n const columns = Warehouse.justColumns(warehouse);\n optWidth.each(newWidth => {\n const widthUnit = getUnit(newWidth);\n const totalWidth = get$9(table);\n const oldWidths = getRawWidths(warehouse, table);\n const nuWidths = redistribute$1(oldWidths, totalWidth, newWidth);\n if (Warehouse.hasColumns(warehouse)) {\n redistributeToColumns(nuWidths, columns, widthUnit);\n } else {\n redistributeToW(nuWidths, cells, widthUnit);\n }\n set$1(table, 'width', newWidth);\n });\n optHeight.each(newHeight => {\n const hUnit = getUnit(newHeight);\n const totalHeight = get$8(table);\n const oldHeights = getRawHeights(warehouse, table, height);\n const nuHeights = redistribute$1(oldHeights, totalHeight, newHeight);\n redistributeToH(nuHeights, rows, cells, hUnit);\n set$1(table, 'height', newHeight);\n });\n };\n const isPercentSizing = isPercentSizing$1;\n const isPixelSizing = isPixelSizing$1;\n const isNoneSizing = isNoneSizing$1;\n\n const cleanupLegacyAttributes = element => {\n remove$7(element, 'width');\n };\n const convertToPercentSize = table => {\n const newWidth = getPercentTableWidth(table);\n redistribute(table, Optional.some(newWidth), Optional.none());\n cleanupLegacyAttributes(table);\n };\n const convertToPixelSize = table => {\n const newWidth = getPixelTableWidth(table);\n redistribute(table, Optional.some(newWidth), Optional.none());\n cleanupLegacyAttributes(table);\n };\n const convertToNoneSize = table => {\n remove$5(table, 'width');\n const columns = columns$1(table);\n const rowElements = columns.length > 0 ? columns : cells$1(table);\n each$2(rowElements, cell => {\n remove$5(cell, 'width');\n cleanupLegacyAttributes(cell);\n });\n cleanupLegacyAttributes(table);\n };\n\n const DefaultRenderOptions = {\n styles: {\n 'border-collapse': 'collapse',\n 'width': '100%'\n },\n attributes: { border: '1' },\n colGroups: false\n };\n const tableHeaderCell = () => SugarElement.fromTag('th');\n const tableCell = () => SugarElement.fromTag('td');\n const tableColumn = () => SugarElement.fromTag('col');\n const createRow = (columns, rowHeaders, columnHeaders, rowIndex) => {\n const tr = SugarElement.fromTag('tr');\n for (let j = 0; j < columns; j++) {\n const td = rowIndex < rowHeaders || j < columnHeaders ? tableHeaderCell() : tableCell();\n if (j < columnHeaders) {\n set$2(td, 'scope', 'row');\n }\n if (rowIndex < rowHeaders) {\n set$2(td, 'scope', 'col');\n }\n append$1(td, SugarElement.fromTag('br'));\n append$1(tr, td);\n }\n return tr;\n };\n const createGroupRow = columns => {\n const columnGroup = SugarElement.fromTag('colgroup');\n range$1(columns, () => append$1(columnGroup, tableColumn()));\n return columnGroup;\n };\n const createRows = (rows, columns, rowHeaders, columnHeaders) => range$1(rows, r => createRow(columns, rowHeaders, columnHeaders, r));\n const render = (rows, columns, rowHeaders, columnHeaders, headerType, renderOpts = DefaultRenderOptions) => {\n const table = SugarElement.fromTag('table');\n const rowHeadersGoInThead = headerType !== 'cells';\n setAll(table, renderOpts.styles);\n setAll$1(table, renderOpts.attributes);\n if (renderOpts.colGroups) {\n append$1(table, createGroupRow(columns));\n }\n const actualRowHeaders = Math.min(rows, rowHeaders);\n if (rowHeadersGoInThead && rowHeaders > 0) {\n const thead = SugarElement.fromTag('thead');\n append$1(table, thead);\n const theadRowHeaders = headerType === 'sectionCells' ? actualRowHeaders : 0;\n const theadRows = createRows(rowHeaders, columns, theadRowHeaders, columnHeaders);\n append(thead, theadRows);\n }\n const tbody = SugarElement.fromTag('tbody');\n append$1(table, tbody);\n const numRows = rowHeadersGoInThead ? rows - actualRowHeaders : rows;\n const numRowHeaders = rowHeadersGoInThead ? 0 : rowHeaders;\n const tbodyRows = createRows(numRows, columns, numRowHeaders, columnHeaders);\n append(tbody, tbodyRows);\n return table;\n };\n\n const get$4 = element => element.dom.innerHTML;\n const getOuter = element => {\n const container = SugarElement.fromTag('div');\n const clone = SugarElement.fromDom(element.dom.cloneNode(true));\n append$1(container, clone);\n return get$4(container);\n };\n\n const placeCaretInCell = (editor, cell) => {\n editor.selection.select(cell.dom, true);\n editor.selection.collapse(true);\n };\n const selectFirstCellInTable = (editor, tableElm) => {\n descendant(tableElm, 'td,th').each(curry(placeCaretInCell, editor));\n };\n const fireEvents = (editor, table) => {\n each$2(descendants(table, 'tr'), row => {\n fireNewRow(editor, row.dom);\n each$2(descendants(row, 'th,td'), cell => {\n fireNewCell(editor, cell.dom);\n });\n });\n };\n const isPercentage = width => isString(width) && width.indexOf('%') !== -1;\n const insert = (editor, columns, rows, colHeaders, rowHeaders) => {\n const defaultStyles = getTableDefaultStyles(editor);\n const options = {\n styles: defaultStyles,\n attributes: getTableDefaultAttributes(editor),\n colGroups: tableUseColumnGroup(editor)\n };\n editor.undoManager.ignore(() => {\n const table = render(rows, columns, rowHeaders, colHeaders, getTableHeaderType(editor), options);\n set$2(table, 'data-mce-id', '__mce');\n const html = getOuter(table);\n editor.insertContent(html);\n editor.addVisual();\n });\n return descendant(getBody(editor), 'table[data-mce-id=\"__mce\"]').map(table => {\n if (isTablePixelsForced(editor)) {\n convertToPixelSize(table);\n } else if (isTableResponsiveForced(editor)) {\n convertToNoneSize(table);\n } else if (isTablePercentagesForced(editor) || isPercentage(defaultStyles.width)) {\n convertToPercentSize(table);\n }\n removeDataStyle(table);\n remove$7(table, 'data-mce-id');\n fireEvents(editor, table);\n selectFirstCellInTable(editor, table);\n return table.dom;\n }).getOrNull();\n };\n const insertTable = (editor, rows, columns, options = {}) => {\n const checkInput = val => isNumber(val) && val > 0;\n if (checkInput(rows) && checkInput(columns)) {\n const headerRows = options.headerRows || 0;\n const headerColumns = options.headerColumns || 0;\n return insert(editor, columns, rows, headerColumns, headerRows);\n } else {\n console.error('Invalid values for mceInsertTable - rows and columns values are required to insert a table.');\n return null;\n }\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.FakeClipboard');\n\n const tableTypeBase = 'x-tinymce/dom-table-';\n const tableTypeRow = tableTypeBase + 'rows';\n const tableTypeColumn = tableTypeBase + 'columns';\n const setData = items => {\n const fakeClipboardItem = global.FakeClipboardItem(items);\n global.write([fakeClipboardItem]);\n };\n const getData = type => {\n var _a;\n const items = (_a = global.read()) !== null && _a !== void 0 ? _a : [];\n return findMap(items, item => Optional.from(item.getType(type)));\n };\n const clearData = type => {\n if (getData(type).isSome()) {\n global.clear();\n }\n };\n const setRows = rowsOpt => {\n rowsOpt.fold(clearRows, rows => setData({ [tableTypeRow]: rows }));\n };\n const getRows = () => getData(tableTypeRow);\n const clearRows = () => clearData(tableTypeRow);\n const setColumns = columnsOpt => {\n columnsOpt.fold(clearColumns, columns => setData({ [tableTypeColumn]: columns }));\n };\n const getColumns = () => getData(tableTypeColumn);\n const clearColumns = () => clearData(tableTypeColumn);\n\n const getSelectionStartCellOrCaption = editor => getSelectionCellOrCaption(getSelectionStart(editor), getIsRoot(editor)).filter(isInEditableContext$1);\n const getSelectionStartCell = editor => getSelectionCell(getSelectionStart(editor), getIsRoot(editor)).filter(isInEditableContext$1);\n const registerCommands = (editor, actions) => {\n const isRoot = getIsRoot(editor);\n const eraseTable = () => getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n table(cellOrCaption, isRoot).filter(not(isRoot)).each(table => {\n const cursor = SugarElement.fromText('');\n after$5(table, cursor);\n remove$6(table);\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n } else {\n const rng = editor.dom.createRng();\n rng.setStart(cursor.dom, 0);\n rng.setEnd(cursor.dom, 0);\n editor.selection.setRng(rng);\n editor.nodeChanged();\n }\n });\n });\n const setSizingMode = sizing => getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n const isForcedSizing = isTableResponsiveForced(editor) || isTablePixelsForced(editor) || isTablePercentagesForced(editor);\n if (!isForcedSizing) {\n table(cellOrCaption, isRoot).each(table => {\n if (sizing === 'relative' && !isPercentSizing(table)) {\n convertToPercentSize(table);\n } else if (sizing === 'fixed' && !isPixelSizing(table)) {\n convertToPixelSize(table);\n } else if (sizing === 'responsive' && !isNoneSizing(table)) {\n convertToNoneSize(table);\n }\n removeDataStyle(table);\n fireTableModified(editor, table.dom, structureModified);\n });\n }\n });\n const getTableFromCell = cell => table(cell, isRoot);\n const performActionOnSelection = action => getSelectionStartCell(editor).bind(cell => getTableFromCell(cell).map(table => action(table, cell)));\n const toggleTableClass = (_ui, clazz) => {\n performActionOnSelection(table => {\n editor.formatter.toggle('tableclass', { value: clazz }, table.dom);\n fireTableModified(editor, table.dom, styleModified);\n });\n };\n const toggleTableCellClass = (_ui, clazz) => {\n performActionOnSelection(table => {\n const selectedCells = getCellsFromSelection(editor);\n const allHaveClass = forall(selectedCells, cell => editor.formatter.match('tablecellclass', { value: clazz }, cell.dom));\n const formatterAction = allHaveClass ? editor.formatter.remove : editor.formatter.apply;\n each$2(selectedCells, cell => formatterAction('tablecellclass', { value: clazz }, cell.dom));\n fireTableModified(editor, table.dom, styleModified);\n });\n };\n const toggleCaption = () => {\n getSelectionStartCellOrCaption(editor).each(cellOrCaption => {\n table(cellOrCaption, isRoot).each(table => {\n child(table, 'caption').fold(() => {\n const caption = SugarElement.fromTag('caption');\n append$1(caption, SugarElement.fromText('Caption'));\n appendAt(table, caption, 0);\n editor.selection.setCursorLocation(caption.dom, 0);\n }, caption => {\n if (isTag('caption')(cellOrCaption)) {\n one('td', table).each(td => editor.selection.setCursorLocation(td.dom, 0));\n }\n remove$6(caption);\n });\n fireTableModified(editor, table.dom, structureModified);\n });\n });\n };\n const postExecute = _data => {\n editor.focus();\n };\n const actOnSelection = (execute, noEvents = false) => performActionOnSelection((table, startCell) => {\n const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n execute(table, targets, noEvents).each(postExecute);\n });\n const copyRowSelection = () => performActionOnSelection((table, startCell) => {\n const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n const generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), Optional.none());\n return copyRows(table, targets, generators);\n });\n const copyColSelection = () => performActionOnSelection((table, startCell) => {\n const targets = forMenu(getCellsFromSelection(editor), table, startCell);\n return copyCols(table, targets);\n });\n const pasteOnSelection = (execute, getRows) => getRows().each(rows => {\n const clonedRows = map$1(rows, row => deep(row));\n performActionOnSelection((table, startCell) => {\n const generators = paste$1(SugarElement.fromDom(editor.getDoc()));\n const targets = pasteRows(getCellsFromSelection(editor), startCell, clonedRows, generators);\n execute(table, targets).each(postExecute);\n });\n });\n const actOnType = getAction => (_ui, args) => get$c(args, 'type').each(type => {\n actOnSelection(getAction(type), args.no_events);\n });\n each$1({\n mceTableSplitCells: () => actOnSelection(actions.unmergeCells),\n mceTableMergeCells: () => actOnSelection(actions.mergeCells),\n mceTableInsertRowBefore: () => actOnSelection(actions.insertRowsBefore),\n mceTableInsertRowAfter: () => actOnSelection(actions.insertRowsAfter),\n mceTableInsertColBefore: () => actOnSelection(actions.insertColumnsBefore),\n mceTableInsertColAfter: () => actOnSelection(actions.insertColumnsAfter),\n mceTableDeleteCol: () => actOnSelection(actions.deleteColumn),\n mceTableDeleteRow: () => actOnSelection(actions.deleteRow),\n mceTableCutCol: () => copyColSelection().each(selection => {\n setColumns(selection);\n actOnSelection(actions.deleteColumn);\n }),\n mceTableCutRow: () => copyRowSelection().each(selection => {\n setRows(selection);\n actOnSelection(actions.deleteRow);\n }),\n mceTableCopyCol: () => copyColSelection().each(selection => setColumns(selection)),\n mceTableCopyRow: () => copyRowSelection().each(selection => setRows(selection)),\n mceTablePasteColBefore: () => pasteOnSelection(actions.pasteColsBefore, getColumns),\n mceTablePasteColAfter: () => pasteOnSelection(actions.pasteColsAfter, getColumns),\n mceTablePasteRowBefore: () => pasteOnSelection(actions.pasteRowsBefore, getRows),\n mceTablePasteRowAfter: () => pasteOnSelection(actions.pasteRowsAfter, getRows),\n mceTableDelete: eraseTable,\n mceTableCellToggleClass: toggleTableCellClass,\n mceTableToggleClass: toggleTableClass,\n mceTableToggleCaption: toggleCaption,\n mceTableSizingMode: (_ui, sizing) => setSizingMode(sizing),\n mceTableCellType: actOnType(type => type === 'th' ? actions.makeCellsHeader : actions.unmakeCellsHeader),\n mceTableColType: actOnType(type => type === 'th' ? actions.makeColumnsHeader : actions.unmakeColumnsHeader),\n mceTableRowType: actOnType(type => {\n switch (type) {\n case 'header':\n return actions.makeRowsHeader;\n case 'footer':\n return actions.makeRowsFooter;\n default:\n return actions.makeRowsBody;\n }\n })\n }, (func, name) => editor.addCommand(name, func));\n editor.addCommand('mceInsertTable', (_ui, args) => {\n insertTable(editor, args.rows, args.columns, args.options);\n });\n editor.addCommand('mceTableApplyCellStyle', (_ui, args) => {\n const getFormatName = style => 'tablecell' + style.toLowerCase().replace('-', '');\n if (!isObject(args)) {\n return;\n }\n const cells = filter$2(getCellsFromSelection(editor), isInEditableContext$1);\n if (cells.length === 0) {\n return;\n }\n const validArgs = filter$1(args, (value, style) => editor.formatter.has(getFormatName(style)) && isString(value));\n if (isEmpty(validArgs)) {\n return;\n }\n each$1(validArgs, (value, style) => {\n const formatName = getFormatName(style);\n each$2(cells, cell => {\n if (value === '') {\n editor.formatter.remove(formatName, { value: null }, cell.dom, true);\n } else {\n editor.formatter.apply(formatName, { value }, cell.dom);\n }\n });\n });\n getTableFromCell(cells[0]).each(table => fireTableModified(editor, table.dom, styleModified));\n });\n };\n\n const registerQueryCommands = (editor, actions) => {\n const isRoot = getIsRoot(editor);\n const lookupOnSelection = action => getSelectionCell(getSelectionStart(editor)).bind(cell => table(cell, isRoot).map(table => {\n const targets = forMenu(getCellsFromSelection(editor), table, cell);\n return action(table, targets);\n })).getOr('');\n each$1({\n mceTableRowType: () => lookupOnSelection(actions.getTableRowType),\n mceTableCellType: () => lookupOnSelection(actions.getTableCellType),\n mceTableColType: () => lookupOnSelection(actions.getTableColType)\n }, (func, name) => editor.addQueryValueHandler(name, func));\n };\n\n const adt$4 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n const cata$1 = (subject, onBefore, onOn, onAfter) => subject.fold(onBefore, onOn, onAfter);\n const getStart$1 = situ => situ.fold(identity, identity, identity);\n const before$2 = adt$4.before;\n const on = adt$4.on;\n const after$3 = adt$4.after;\n const Situ = {\n before: before$2,\n on,\n after: after$3,\n cata: cata$1,\n getStart: getStart$1\n };\n\n const create$4 = (selection, kill) => ({\n selection,\n kill\n });\n const Response = { create: create$4 };\n\n const selectNode = (win, element) => {\n const rng = win.document.createRange();\n rng.selectNode(element.dom);\n return rng;\n };\n const selectNodeContents = (win, element) => {\n const rng = win.document.createRange();\n selectNodeContentsUsing(rng, element);\n return rng;\n };\n const selectNodeContentsUsing = (rng, element) => rng.selectNodeContents(element.dom);\n const setStart = (rng, situ) => {\n situ.fold(e => {\n rng.setStartBefore(e.dom);\n }, (e, o) => {\n rng.setStart(e.dom, o);\n }, e => {\n rng.setStartAfter(e.dom);\n });\n };\n const setFinish = (rng, situ) => {\n situ.fold(e => {\n rng.setEndBefore(e.dom);\n }, (e, o) => {\n rng.setEnd(e.dom, o);\n }, e => {\n rng.setEndAfter(e.dom);\n });\n };\n const relativeToNative = (win, startSitu, finishSitu) => {\n const range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n const exactToNative = (win, start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n const toRect = rect => ({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.width,\n height: rect.height\n });\n const getFirstRect$1 = rng => {\n const rects = rng.getClientRects();\n const rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none();\n };\n\n const adt$3 = Adt.generate([\n {\n ltr: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n },\n {\n rtl: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const fromRange = (win, type, range) => type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset);\n const getRanges = (win, selection) => selection.match({\n domRange: rng => {\n return {\n ltr: constant(rng),\n rtl: Optional.none\n };\n },\n relative: (startSitu, finishSitu) => {\n return {\n ltr: cached(() => relativeToNative(win, startSitu, finishSitu)),\n rtl: cached(() => Optional.some(relativeToNative(win, finishSitu, startSitu)))\n };\n },\n exact: (start, soffset, finish, foffset) => {\n return {\n ltr: cached(() => exactToNative(win, start, soffset, finish, foffset)),\n rtl: cached(() => Optional.some(exactToNative(win, finish, foffset, start, soffset)))\n };\n }\n });\n const doDiagnose = (win, ranges) => {\n const rng = ranges.ltr();\n if (rng.collapsed) {\n const reversed = ranges.rtl().filter(rev => rev.collapsed === false);\n return reversed.map(rev => adt$3.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset)).getOrThunk(() => fromRange(win, adt$3.ltr, rng));\n } else {\n return fromRange(win, adt$3.ltr, rng);\n }\n };\n const diagnose = (win, selection) => {\n const ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n const asLtrRange = (win, selection) => {\n const diagnosis = diagnose(win, selection);\n return diagnosis.match({\n ltr: (start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n },\n rtl: (start, soffset, finish, foffset) => {\n const rng = win.document.createRange();\n rng.setStart(finish.dom, foffset);\n rng.setEnd(start.dom, soffset);\n return rng;\n }\n });\n };\n adt$3.ltr;\n adt$3.rtl;\n\n const create$3 = (start, soffset, finish, foffset) => ({\n start,\n soffset,\n finish,\n foffset\n });\n const SimRange = { create: create$3 };\n\n const create$2 = (start, soffset, finish, foffset) => {\n return {\n start: Situ.on(start, soffset),\n finish: Situ.on(finish, foffset)\n };\n };\n const Situs = { create: create$2 };\n\n const convertToRange = (win, selection) => {\n const rng = asLtrRange(win, selection);\n return SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset);\n };\n const makeSitus = Situs.create;\n\n const sync = (container, isRoot, start, soffset, finish, foffset, selectRange) => {\n if (!(eq$1(start, finish) && soffset === foffset)) {\n return closest$1(start, 'td,th', isRoot).bind(s => {\n return closest$1(finish, 'td,th', isRoot).bind(f => {\n return detect(container, isRoot, s, f, selectRange);\n });\n });\n } else {\n return Optional.none();\n }\n };\n const detect = (container, isRoot, start, finish, selectRange) => {\n if (!eq$1(start, finish)) {\n return identify(start, finish, isRoot).bind(cellSel => {\n const boxes = cellSel.boxes.getOr([]);\n if (boxes.length > 1) {\n selectRange(container, boxes, cellSel.start, cellSel.finish);\n return Optional.some(Response.create(Optional.some(makeSitus(start, 0, start, getEnd(start))), true));\n } else {\n return Optional.none();\n }\n });\n } else {\n return Optional.none();\n }\n };\n const update = (rows, columns, container, selected, annotations) => {\n const updateSelection = newSels => {\n annotations.clearBeforeUpdate(container);\n annotations.selectRange(container, newSels.boxes, newSels.start, newSels.finish);\n return newSels.boxes;\n };\n return shiftSelection(selected, rows, columns, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(updateSelection);\n };\n\n const traverse = (item, mode) => ({\n item,\n mode\n });\n const backtrack = (universe, item, _direction, transition = sidestep) => {\n return universe.property().parent(item).map(p => {\n return traverse(p, transition);\n });\n };\n const sidestep = (universe, item, direction, transition = advance) => {\n return direction.sibling(universe, item).map(p => {\n return traverse(p, transition);\n });\n };\n const advance = (universe, item, direction, transition = advance) => {\n const children = universe.property().children(item);\n const result = direction.first(children);\n return result.map(r => {\n return traverse(r, transition);\n });\n };\n const successors = [\n {\n current: backtrack,\n next: sidestep,\n fallback: Optional.none()\n },\n {\n current: sidestep,\n next: advance,\n fallback: Optional.some(backtrack)\n },\n {\n current: advance,\n next: advance,\n fallback: Optional.some(sidestep)\n }\n ];\n const go = (universe, item, mode, direction, rules = successors) => {\n const ruleOpt = find$1(rules, succ => {\n return succ.current === mode;\n });\n return ruleOpt.bind(rule => {\n return rule.current(universe, item, direction, rule.next).orThunk(() => {\n return rule.fallback.bind(fb => {\n return go(universe, item, fb, direction);\n });\n });\n });\n };\n\n const left$1 = () => {\n const sibling = (universe, item) => {\n return universe.query().prevSibling(item);\n };\n const first = children => {\n return children.length > 0 ? Optional.some(children[children.length - 1]) : Optional.none();\n };\n return {\n sibling,\n first\n };\n };\n const right$1 = () => {\n const sibling = (universe, item) => {\n return universe.query().nextSibling(item);\n };\n const first = children => {\n return children.length > 0 ? Optional.some(children[0]) : Optional.none();\n };\n return {\n sibling,\n first\n };\n };\n const Walkers = {\n left: left$1,\n right: right$1\n };\n\n const hone = (universe, item, predicate, mode, direction, isRoot) => {\n const next = go(universe, item, mode, direction);\n return next.bind(n => {\n if (isRoot(n.item)) {\n return Optional.none();\n } else {\n return predicate(n.item) ? Optional.some(n.item) : hone(universe, n.item, predicate, n.mode, direction, isRoot);\n }\n });\n };\n const left = (universe, item, predicate, isRoot) => {\n return hone(universe, item, predicate, sidestep, Walkers.left(), isRoot);\n };\n const right = (universe, item, predicate, isRoot) => {\n return hone(universe, item, predicate, sidestep, Walkers.right(), isRoot);\n };\n\n const isLeaf = universe => element => universe.property().children(element).length === 0;\n const before$1 = (universe, item, isRoot) => {\n return seekLeft$1(universe, item, isLeaf(universe), isRoot);\n };\n const after$2 = (universe, item, isRoot) => {\n return seekRight$1(universe, item, isLeaf(universe), isRoot);\n };\n const seekLeft$1 = left;\n const seekRight$1 = right;\n\n const universe = DomUniverse();\n const before = (element, isRoot) => {\n return before$1(universe, element, isRoot);\n };\n const after$1 = (element, isRoot) => {\n return after$2(universe, element, isRoot);\n };\n const seekLeft = (element, predicate, isRoot) => {\n return seekLeft$1(universe, element, predicate, isRoot);\n };\n const seekRight = (element, predicate, isRoot) => {\n return seekRight$1(universe, element, predicate, isRoot);\n };\n\n const ancestor = (scope, predicate, isRoot) => ancestor$2(scope, predicate, isRoot).isSome();\n\n const adt$2 = Adt.generate([\n { none: ['message'] },\n { success: [] },\n { failedUp: ['cell'] },\n { failedDown: ['cell'] }\n ]);\n const isOverlapping = (bridge, before, after) => {\n const beforeBounds = bridge.getRect(before);\n const afterBounds = bridge.getRect(after);\n return afterBounds.right > beforeBounds.left && afterBounds.left < beforeBounds.right;\n };\n const isRow = elem => {\n return closest$1(elem, 'tr');\n };\n const verify = (bridge, before, beforeOffset, after, afterOffset, failure, isRoot) => {\n return closest$1(after, 'td,th', isRoot).bind(afterCell => {\n return closest$1(before, 'td,th', isRoot).map(beforeCell => {\n if (!eq$1(afterCell, beforeCell)) {\n return sharedOne(isRow, [\n afterCell,\n beforeCell\n ]).fold(() => {\n return isOverlapping(bridge, beforeCell, afterCell) ? adt$2.success() : failure(beforeCell);\n }, _sharedRow => {\n return failure(beforeCell);\n });\n } else {\n return eq$1(after, afterCell) && getEnd(afterCell) === afterOffset ? failure(beforeCell) : adt$2.none('in same cell');\n }\n });\n }).getOr(adt$2.none('default'));\n };\n const cata = (subject, onNone, onSuccess, onFailedUp, onFailedDown) => {\n return subject.fold(onNone, onSuccess, onFailedUp, onFailedDown);\n };\n const BeforeAfter = {\n ...adt$2,\n verify,\n cata\n };\n\n const inParent = (parent, children, element, index) => ({\n parent,\n children,\n element,\n index\n });\n const indexInParent = element => parent(element).bind(parent => {\n const children = children$2(parent);\n return indexOf(children, element).map(index => inParent(parent, children, element, index));\n });\n const indexOf = (elements, element) => findIndex(elements, curry(eq$1, element));\n\n const isBr = isTag('br');\n const gatherer = (cand, gather, isRoot) => {\n return gather(cand, isRoot).bind(target => {\n return isText(target) && get$6(target).trim().length === 0 ? gatherer(target, gather, isRoot) : Optional.some(target);\n });\n };\n const handleBr = (isRoot, element, direction) => {\n return direction.traverse(element).orThunk(() => {\n return gatherer(element, direction.gather, isRoot);\n }).map(direction.relative);\n };\n const findBr = (element, offset) => {\n return child$2(element, offset).filter(isBr).orThunk(() => {\n return child$2(element, offset - 1).filter(isBr);\n });\n };\n const handleParent = (isRoot, element, offset, direction) => {\n return findBr(element, offset).bind(br => {\n return direction.traverse(br).fold(() => {\n return gatherer(br, direction.gather, isRoot).map(direction.relative);\n }, adjacent => {\n return indexInParent(adjacent).map(info => {\n return Situ.on(info.parent, info.index);\n });\n });\n });\n };\n const tryBr = (isRoot, element, offset, direction) => {\n const target = isBr(element) ? handleBr(isRoot, element, direction) : handleParent(isRoot, element, offset, direction);\n return target.map(tgt => {\n return {\n start: tgt,\n finish: tgt\n };\n });\n };\n const process = analysis => {\n return BeforeAfter.cata(analysis, _message => {\n return Optional.none();\n }, () => {\n return Optional.none();\n }, cell => {\n return Optional.some(point(cell, 0));\n }, cell => {\n return Optional.some(point(cell, getEnd(cell)));\n });\n };\n\n const moveDown = (caret, amount) => {\n return {\n left: caret.left,\n top: caret.top + amount,\n right: caret.right,\n bottom: caret.bottom + amount\n };\n };\n const moveUp = (caret, amount) => {\n return {\n left: caret.left,\n top: caret.top - amount,\n right: caret.right,\n bottom: caret.bottom - amount\n };\n };\n const translate = (caret, xDelta, yDelta) => {\n return {\n left: caret.left + xDelta,\n top: caret.top + yDelta,\n right: caret.right + xDelta,\n bottom: caret.bottom + yDelta\n };\n };\n const getTop = caret => {\n return caret.top;\n };\n const getBottom = caret => {\n return caret.bottom;\n };\n\n const getPartialBox = (bridge, element, offset) => {\n if (offset >= 0 && offset < getEnd(element)) {\n return bridge.getRangedRect(element, offset, element, offset + 1);\n } else if (offset > 0) {\n return bridge.getRangedRect(element, offset - 1, element, offset);\n }\n return Optional.none();\n };\n const toCaret = rect => ({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom\n });\n const getElemBox = (bridge, element) => {\n return Optional.some(bridge.getRect(element));\n };\n const getBoxAt = (bridge, element, offset) => {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return getPartialBox(bridge, element, offset).map(toCaret);\n } else {\n return Optional.none();\n }\n };\n const getEntireBox = (bridge, element) => {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return bridge.getRangedRect(element, 0, element, getEnd(element)).map(toCaret);\n } else {\n return Optional.none();\n }\n };\n\n const JUMP_SIZE = 5;\n const NUM_RETRIES = 100;\n const adt$1 = Adt.generate([\n { none: [] },\n { retry: ['caret'] }\n ]);\n const isOutside = (caret, box) => {\n return caret.left < box.left || Math.abs(box.right - caret.left) < 1 || caret.left > box.right;\n };\n const inOutsideBlock = (bridge, element, caret) => {\n return closest$2(element, isBlock).fold(never, cell => {\n return getEntireBox(bridge, cell).exists(box => {\n return isOutside(caret, box);\n });\n });\n };\n const adjustDown = (bridge, element, guessBox, original, caret) => {\n const lowerCaret = moveDown(caret, JUMP_SIZE);\n if (Math.abs(guessBox.bottom - original.bottom) < 1) {\n return adt$1.retry(lowerCaret);\n } else if (guessBox.top > caret.bottom) {\n return adt$1.retry(lowerCaret);\n } else if (guessBox.top === caret.bottom) {\n return adt$1.retry(moveDown(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$1.retry(translate(lowerCaret, JUMP_SIZE, 0)) : adt$1.none();\n }\n };\n const adjustUp = (bridge, element, guessBox, original, caret) => {\n const higherCaret = moveUp(caret, JUMP_SIZE);\n if (Math.abs(guessBox.top - original.top) < 1) {\n return adt$1.retry(higherCaret);\n } else if (guessBox.bottom < caret.top) {\n return adt$1.retry(higherCaret);\n } else if (guessBox.bottom === caret.top) {\n return adt$1.retry(moveUp(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$1.retry(translate(higherCaret, JUMP_SIZE, 0)) : adt$1.none();\n }\n };\n const upMovement = {\n point: getTop,\n adjuster: adjustUp,\n move: moveUp,\n gather: before\n };\n const downMovement = {\n point: getBottom,\n adjuster: adjustDown,\n move: moveDown,\n gather: after$1\n };\n const isAtTable = (bridge, x, y) => {\n return bridge.elementFromPoint(x, y).filter(elm => {\n return name(elm) === 'table';\n }).isSome();\n };\n const adjustForTable = (bridge, movement, original, caret, numRetries) => {\n return adjustTil(bridge, movement, original, movement.move(caret, JUMP_SIZE), numRetries);\n };\n const adjustTil = (bridge, movement, original, caret, numRetries) => {\n if (numRetries === 0) {\n return Optional.some(caret);\n }\n if (isAtTable(bridge, caret.left, movement.point(caret))) {\n return adjustForTable(bridge, movement, original, caret, numRetries - 1);\n }\n return bridge.situsFromPoint(caret.left, movement.point(caret)).bind(guess => {\n return guess.start.fold(Optional.none, element => {\n return getEntireBox(bridge, element).bind(guessBox => {\n return movement.adjuster(bridge, element, guessBox, original, caret).fold(Optional.none, newCaret => {\n return adjustTil(bridge, movement, original, newCaret, numRetries - 1);\n });\n }).orThunk(() => {\n return Optional.some(caret);\n });\n }, Optional.none);\n });\n };\n const checkScroll = (movement, adjusted, bridge) => {\n if (movement.point(adjusted) > bridge.getInnerHeight()) {\n return Optional.some(movement.point(adjusted) - bridge.getInnerHeight());\n } else if (movement.point(adjusted) < 0) {\n return Optional.some(-movement.point(adjusted));\n } else {\n return Optional.none();\n }\n };\n const retry = (movement, bridge, caret) => {\n const moved = movement.move(caret, JUMP_SIZE);\n const adjusted = adjustTil(bridge, movement, caret, moved, NUM_RETRIES).getOr(moved);\n return checkScroll(movement, adjusted, bridge).fold(() => {\n return bridge.situsFromPoint(adjusted.left, movement.point(adjusted));\n }, delta => {\n bridge.scrollBy(0, delta);\n return bridge.situsFromPoint(adjusted.left, movement.point(adjusted) - delta);\n });\n };\n const Retries = {\n tryUp: curry(retry, upMovement),\n tryDown: curry(retry, downMovement),\n getJumpSize: constant(JUMP_SIZE)\n };\n\n const MAX_RETRIES = 20;\n const findSpot = (bridge, isRoot, direction) => {\n return bridge.getSelection().bind(sel => {\n return tryBr(isRoot, sel.finish, sel.foffset, direction).fold(() => {\n return Optional.some(point(sel.finish, sel.foffset));\n }, brNeighbour => {\n const range = bridge.fromSitus(brNeighbour);\n const analysis = BeforeAfter.verify(bridge, sel.finish, sel.foffset, range.finish, range.foffset, direction.failure, isRoot);\n return process(analysis);\n });\n });\n };\n const scan = (bridge, isRoot, element, offset, direction, numRetries) => {\n if (numRetries === 0) {\n return Optional.none();\n }\n return tryCursor(bridge, isRoot, element, offset, direction).bind(situs => {\n const range = bridge.fromSitus(situs);\n const analysis = BeforeAfter.verify(bridge, element, offset, range.finish, range.foffset, direction.failure, isRoot);\n return BeforeAfter.cata(analysis, () => {\n return Optional.none();\n }, () => {\n return Optional.some(situs);\n }, cell => {\n if (eq$1(element, cell) && offset === 0) {\n return tryAgain(bridge, element, offset, moveUp, direction);\n } else {\n return scan(bridge, isRoot, cell, 0, direction, numRetries - 1);\n }\n }, cell => {\n if (eq$1(element, cell) && offset === getEnd(cell)) {\n return tryAgain(bridge, element, offset, moveDown, direction);\n } else {\n return scan(bridge, isRoot, cell, getEnd(cell), direction, numRetries - 1);\n }\n });\n });\n };\n const tryAgain = (bridge, element, offset, move, direction) => {\n return getBoxAt(bridge, element, offset).bind(box => {\n return tryAt(bridge, direction, move(box, Retries.getJumpSize()));\n });\n };\n const tryAt = (bridge, direction, box) => {\n const browser = detect$2().browser;\n if (browser.isChromium() || browser.isSafari() || browser.isFirefox()) {\n return direction.retry(bridge, box);\n } else {\n return Optional.none();\n }\n };\n const tryCursor = (bridge, isRoot, element, offset, direction) => {\n return getBoxAt(bridge, element, offset).bind(box => {\n return tryAt(bridge, direction, box);\n });\n };\n const handle$1 = (bridge, isRoot, direction) => {\n return findSpot(bridge, isRoot, direction).bind(spot => {\n return scan(bridge, isRoot, spot.element, spot.offset, direction, MAX_RETRIES).map(bridge.fromSitus);\n });\n };\n\n const inSameTable = (elem, table) => {\n return ancestor(elem, e => {\n return parent(e).exists(p => {\n return eq$1(p, table);\n });\n });\n };\n const simulate = (bridge, isRoot, direction, initial, anchor) => {\n return closest$1(initial, 'td,th', isRoot).bind(start => {\n return closest$1(start, 'table', isRoot).bind(table => {\n if (!inSameTable(anchor, table)) {\n return Optional.none();\n }\n return handle$1(bridge, isRoot, direction).bind(range => {\n return closest$1(range.finish, 'td,th', isRoot).map(finish => {\n return {\n start,\n finish,\n range\n };\n });\n });\n });\n });\n };\n const navigate = (bridge, isRoot, direction, initial, anchor, precheck) => {\n return precheck(initial, isRoot).orThunk(() => {\n return simulate(bridge, isRoot, direction, initial, anchor).map(info => {\n const range = info.range;\n return Response.create(Optional.some(makeSitus(range.start, range.soffset, range.finish, range.foffset)), true);\n });\n });\n };\n const firstUpCheck = (initial, isRoot) => {\n return closest$1(initial, 'tr', isRoot).bind(startRow => {\n return closest$1(startRow, 'table', isRoot).bind(table => {\n const rows = descendants(table, 'tr');\n if (eq$1(startRow, rows[0])) {\n return seekLeft(table, element => {\n return last$1(element).isSome();\n }, isRoot).map(last => {\n const lastOffset = getEnd(last);\n return Response.create(Optional.some(makeSitus(last, lastOffset, last, lastOffset)), true);\n });\n } else {\n return Optional.none();\n }\n });\n });\n };\n const lastDownCheck = (initial, isRoot) => {\n return closest$1(initial, 'tr', isRoot).bind(startRow => {\n return closest$1(startRow, 'table', isRoot).bind(table => {\n const rows = descendants(table, 'tr');\n if (eq$1(startRow, rows[rows.length - 1])) {\n return seekRight(table, element => {\n return first(element).isSome();\n }, isRoot).map(first => {\n return Response.create(Optional.some(makeSitus(first, 0, first, 0)), true);\n });\n } else {\n return Optional.none();\n }\n });\n });\n };\n const select = (bridge, container, isRoot, direction, initial, anchor, selectRange) => {\n return simulate(bridge, isRoot, direction, initial, anchor).bind(info => {\n return detect(container, isRoot, info.start, info.finish, selectRange);\n });\n };\n\n const Cell = initial => {\n let value = initial;\n const get = () => {\n return value;\n };\n const set = v => {\n value = v;\n };\n return {\n get,\n set\n };\n };\n\n const singleton = doRevoke => {\n const subject = Cell(Optional.none());\n const revoke = () => subject.get().each(doRevoke);\n const clear = () => {\n revoke();\n subject.set(Optional.none());\n };\n const isSet = () => subject.get().isSome();\n const get = () => subject.get();\n const set = s => {\n revoke();\n subject.set(Optional.some(s));\n };\n return {\n clear,\n isSet,\n get,\n set\n };\n };\n const value = () => {\n const subject = singleton(noop);\n const on = f => subject.get().each(f);\n return {\n ...subject,\n on\n };\n };\n\n const findCell = (target, isRoot) => closest$1(target, 'td,th', isRoot);\n const isInEditableContext = cell => parentElement(cell).exists(isEditable$1);\n const MouseSelection = (bridge, container, isRoot, annotations) => {\n const cursor = value();\n const clearstate = cursor.clear;\n const applySelection = event => {\n cursor.on(start => {\n annotations.clearBeforeUpdate(container);\n findCell(event.target, isRoot).each(finish => {\n identify(start, finish, isRoot).each(cellSel => {\n const boxes = cellSel.boxes.getOr([]);\n if (boxes.length === 1) {\n const singleCell = boxes[0];\n const isNonEditableCell = getRaw(singleCell) === 'false';\n const isCellClosestContentEditable = is(closest(event.target), singleCell, eq$1);\n if (isNonEditableCell && isCellClosestContentEditable) {\n annotations.selectRange(container, boxes, singleCell, singleCell);\n bridge.selectContents(singleCell);\n }\n } else if (boxes.length > 1) {\n annotations.selectRange(container, boxes, cellSel.start, cellSel.finish);\n bridge.selectContents(finish);\n }\n });\n });\n });\n };\n const mousedown = event => {\n annotations.clear(container);\n findCell(event.target, isRoot).filter(isInEditableContext).each(cursor.set);\n };\n const mouseover = event => {\n applySelection(event);\n };\n const mouseup = event => {\n applySelection(event);\n clearstate();\n };\n return {\n clearstate,\n mousedown,\n mouseover,\n mouseup\n };\n };\n\n const down = {\n traverse: nextSibling,\n gather: after$1,\n relative: Situ.before,\n retry: Retries.tryDown,\n failure: BeforeAfter.failedDown\n };\n const up = {\n traverse: prevSibling,\n gather: before,\n relative: Situ.before,\n retry: Retries.tryUp,\n failure: BeforeAfter.failedUp\n };\n\n const isKey = key => {\n return keycode => {\n return keycode === key;\n };\n };\n const isUp = isKey(38);\n const isDown = isKey(40);\n const isNavigation = keycode => {\n return keycode >= 37 && keycode <= 40;\n };\n const ltr = {\n isBackward: isKey(37),\n isForward: isKey(39)\n };\n const rtl = {\n isBackward: isKey(39),\n isForward: isKey(37)\n };\n\n const get$3 = _DOC => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n const y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return SugarPosition(x, y);\n };\n const by = (x, y, _DOC) => {\n const doc = _DOC !== undefined ? _DOC.dom : document;\n const win = doc.defaultView;\n if (win) {\n win.scrollBy(x, y);\n }\n };\n\n const adt = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n const exactFromRange = simRange => adt.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset);\n const getStart = selection => selection.match({\n domRange: rng => SugarElement.fromDom(rng.startContainer),\n relative: (startSitu, _finishSitu) => Situ.getStart(startSitu),\n exact: (start, _soffset, _finish, _foffset) => start\n });\n const domRange = adt.domRange;\n const relative = adt.relative;\n const exact = adt.exact;\n const getWin = selection => {\n const start = getStart(selection);\n return defaultView(start);\n };\n const range = SimRange.create;\n const SimSelection = {\n domRange,\n relative,\n exact,\n exactFromRange,\n getWin,\n range\n };\n\n const caretPositionFromPoint = (doc, x, y) => {\n var _a, _b;\n return Optional.from((_b = (_a = doc.dom).caretPositionFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a, x, y)).bind(pos => {\n if (pos.offsetNode === null) {\n return Optional.none();\n }\n const r = doc.dom.createRange();\n r.setStart(pos.offsetNode, pos.offset);\n r.collapse();\n return Optional.some(r);\n });\n };\n const caretRangeFromPoint = (doc, x, y) => {\n var _a, _b;\n return Optional.from((_b = (_a = doc.dom).caretRangeFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a, x, y));\n };\n const availableSearch = (() => {\n if (document.caretPositionFromPoint) {\n return caretPositionFromPoint;\n } else if (document.caretRangeFromPoint) {\n return caretRangeFromPoint;\n } else {\n return Optional.none;\n }\n })();\n const fromPoint = (win, x, y) => {\n const doc = SugarElement.fromDom(win.document);\n return availableSearch(doc, x, y).map(rng => SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));\n };\n\n const beforeSpecial = (element, offset) => {\n const name$1 = name(element);\n if ('input' === name$1) {\n return Situ.after(element);\n } else if (!contains$2([\n 'br',\n 'img'\n ], name$1)) {\n return Situ.on(element, offset);\n } else {\n return offset === 0 ? Situ.before(element) : Situ.after(element);\n }\n };\n const preprocessRelative = (startSitu, finishSitu) => {\n const start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\n const finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\n return SimSelection.relative(start, finish);\n };\n const preprocessExact = (start, soffset, finish, foffset) => {\n const startSitu = beforeSpecial(start, soffset);\n const finishSitu = beforeSpecial(finish, foffset);\n return SimSelection.relative(startSitu, finishSitu);\n };\n\n const makeRange = (start, soffset, finish, foffset) => {\n const doc = owner(start);\n const rng = doc.dom.createRange();\n rng.setStart(start.dom, soffset);\n rng.setEnd(finish.dom, foffset);\n return rng;\n };\n const after = (start, soffset, finish, foffset) => {\n const r = makeRange(start, soffset, finish, foffset);\n const same = eq$1(start, finish) && soffset === foffset;\n return r.collapsed && !same;\n };\n\n const getNativeSelection = win => Optional.from(win.getSelection());\n const doSetNativeRange = (win, rng) => {\n getNativeSelection(win).each(selection => {\n selection.removeAllRanges();\n selection.addRange(rng);\n });\n };\n const doSetRange = (win, start, soffset, finish, foffset) => {\n const rng = exactToNative(win, start, soffset, finish, foffset);\n doSetNativeRange(win, rng);\n };\n const setLegacyRtlRange = (win, selection, start, soffset, finish, foffset) => {\n selection.collapse(start.dom, soffset);\n selection.extend(finish.dom, foffset);\n };\n const setRangeFromRelative = (win, relative) => diagnose(win, relative).match({\n ltr: (start, soffset, finish, foffset) => {\n doSetRange(win, start, soffset, finish, foffset);\n },\n rtl: (start, soffset, finish, foffset) => {\n getNativeSelection(win).each(selection => {\n if (selection.setBaseAndExtent) {\n selection.setBaseAndExtent(start.dom, soffset, finish.dom, foffset);\n } else if (selection.extend) {\n try {\n setLegacyRtlRange(win, selection, start, soffset, finish, foffset);\n } catch (e) {\n doSetRange(win, finish, foffset, start, soffset);\n }\n } else {\n doSetRange(win, finish, foffset, start, soffset);\n }\n });\n }\n });\n const setExact = (win, start, soffset, finish, foffset) => {\n const relative = preprocessExact(start, soffset, finish, foffset);\n setRangeFromRelative(win, relative);\n };\n const setRelative = (win, startSitu, finishSitu) => {\n const relative = preprocessRelative(startSitu, finishSitu);\n setRangeFromRelative(win, relative);\n };\n const readRange = selection => {\n if (selection.rangeCount > 0) {\n const firstRng = selection.getRangeAt(0);\n const lastRng = selection.getRangeAt(selection.rangeCount - 1);\n return Optional.some(SimRange.create(SugarElement.fromDom(firstRng.startContainer), firstRng.startOffset, SugarElement.fromDom(lastRng.endContainer), lastRng.endOffset));\n } else {\n return Optional.none();\n }\n };\n const doGetExact = selection => {\n if (selection.anchorNode === null || selection.focusNode === null) {\n return readRange(selection);\n } else {\n const anchor = SugarElement.fromDom(selection.anchorNode);\n const focus = SugarElement.fromDom(selection.focusNode);\n return after(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Optional.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);\n }\n };\n const setToElement = (win, element, selectNodeContents$1 = true) => {\n const rngGetter = selectNodeContents$1 ? selectNodeContents : selectNode;\n const rng = rngGetter(win, element);\n doSetNativeRange(win, rng);\n };\n const getExact = win => getNativeSelection(win).filter(sel => sel.rangeCount > 0).bind(doGetExact);\n const get$2 = win => getExact(win).map(range => SimSelection.exact(range.start, range.soffset, range.finish, range.foffset));\n const getFirstRect = (win, selection) => {\n const rng = asLtrRange(win, selection);\n return getFirstRect$1(rng);\n };\n const getAtPoint = (win, x, y) => fromPoint(win, x, y);\n const clear = win => {\n getNativeSelection(win).each(selection => selection.removeAllRanges());\n };\n\n const WindowBridge = win => {\n const elementFromPoint = (x, y) => {\n return SugarElement.fromPoint(SugarElement.fromDom(win.document), x, y);\n };\n const getRect = element => {\n return element.dom.getBoundingClientRect();\n };\n const getRangedRect = (start, soffset, finish, foffset) => {\n const sel = SimSelection.exact(start, soffset, finish, foffset);\n return getFirstRect(win, sel);\n };\n const getSelection = () => {\n return get$2(win).map(exactAdt => {\n return convertToRange(win, exactAdt);\n });\n };\n const fromSitus = situs => {\n const relative = SimSelection.relative(situs.start, situs.finish);\n return convertToRange(win, relative);\n };\n const situsFromPoint = (x, y) => {\n return getAtPoint(win, x, y).map(exact => {\n return Situs.create(exact.start, exact.soffset, exact.finish, exact.foffset);\n });\n };\n const clearSelection = () => {\n clear(win);\n };\n const collapseSelection = (toStart = false) => {\n get$2(win).each(sel => sel.fold(rng => rng.collapse(toStart), (startSitu, finishSitu) => {\n const situ = toStart ? startSitu : finishSitu;\n setRelative(win, situ, situ);\n }, (start, soffset, finish, foffset) => {\n const node = toStart ? start : finish;\n const offset = toStart ? soffset : foffset;\n setExact(win, node, offset, node, offset);\n }));\n };\n const selectNode = element => {\n setToElement(win, element, false);\n };\n const selectContents = element => {\n setToElement(win, element);\n };\n const setSelection = sel => {\n setExact(win, sel.start, sel.soffset, sel.finish, sel.foffset);\n };\n const setRelativeSelection = (start, finish) => {\n setRelative(win, start, finish);\n };\n const getInnerHeight = () => {\n return win.innerHeight;\n };\n const getScrollY = () => {\n const pos = get$3(SugarElement.fromDom(win.document));\n return pos.top;\n };\n const scrollBy = (x, y) => {\n by(x, y, SugarElement.fromDom(win.document));\n };\n return {\n elementFromPoint,\n getRect,\n getRangedRect,\n getSelection,\n fromSitus,\n situsFromPoint,\n clearSelection,\n collapseSelection,\n setSelection,\n setRelativeSelection,\n selectNode,\n selectContents,\n getInnerHeight,\n getScrollY,\n scrollBy\n };\n };\n\n const rc = (rows, cols) => ({\n rows,\n cols\n });\n const mouse = (win, container, isRoot, annotations) => {\n const bridge = WindowBridge(win);\n const handlers = MouseSelection(bridge, container, isRoot, annotations);\n return {\n clearstate: handlers.clearstate,\n mousedown: handlers.mousedown,\n mouseover: handlers.mouseover,\n mouseup: handlers.mouseup\n };\n };\n const isEditableNode = node => closest$2(node, isHTMLElement).exists(isEditable$1);\n const isEditableSelection = (start, finish) => isEditableNode(start) || isEditableNode(finish);\n const keyboard = (win, container, isRoot, annotations) => {\n const bridge = WindowBridge(win);\n const clearToNavigate = () => {\n annotations.clear(container);\n return Optional.none();\n };\n const keydown = (event, start, soffset, finish, foffset, direction) => {\n const realEvent = event.raw;\n const keycode = realEvent.which;\n const shiftKey = realEvent.shiftKey === true;\n const handler = retrieve$1(container, annotations.selectedSelector).fold(() => {\n if (isNavigation(keycode) && !shiftKey) {\n annotations.clearBeforeUpdate(container);\n }\n if (isNavigation(keycode) && shiftKey && !isEditableSelection(start, finish)) {\n return Optional.none;\n } else if (isDown(keycode) && shiftKey) {\n return curry(select, bridge, container, isRoot, down, finish, start, annotations.selectRange);\n } else if (isUp(keycode) && shiftKey) {\n return curry(select, bridge, container, isRoot, up, finish, start, annotations.selectRange);\n } else if (isDown(keycode)) {\n return curry(navigate, bridge, isRoot, down, finish, start, lastDownCheck);\n } else if (isUp(keycode)) {\n return curry(navigate, bridge, isRoot, up, finish, start, firstUpCheck);\n } else {\n return Optional.none;\n }\n }, selected => {\n const update$1 = attempts => {\n return () => {\n const navigation = findMap(attempts, delta => {\n return update(delta.rows, delta.cols, container, selected, annotations);\n });\n return navigation.fold(() => {\n return getEdges(container, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(edges => {\n const relative = isDown(keycode) || direction.isForward(keycode) ? Situ.after : Situ.before;\n bridge.setRelativeSelection(Situ.on(edges.first, 0), relative(edges.table));\n annotations.clear(container);\n return Response.create(Optional.none(), true);\n });\n }, _ => {\n return Optional.some(Response.create(Optional.none(), true));\n });\n };\n };\n if (isNavigation(keycode) && shiftKey && !isEditableSelection(start, finish)) {\n return Optional.none;\n } else if (isDown(keycode) && shiftKey) {\n return update$1([rc(+1, 0)]);\n } else if (isUp(keycode) && shiftKey) {\n return update$1([rc(-1, 0)]);\n } else if (direction.isBackward(keycode) && shiftKey) {\n return update$1([\n rc(0, -1),\n rc(-1, 0)\n ]);\n } else if (direction.isForward(keycode) && shiftKey) {\n return update$1([\n rc(0, +1),\n rc(+1, 0)\n ]);\n } else if (isNavigation(keycode) && !shiftKey) {\n return clearToNavigate;\n } else {\n return Optional.none;\n }\n });\n return handler();\n };\n const keyup = (event, start, soffset, finish, foffset) => {\n return retrieve$1(container, annotations.selectedSelector).fold(() => {\n const realEvent = event.raw;\n const keycode = realEvent.which;\n const shiftKey = realEvent.shiftKey === true;\n if (!shiftKey) {\n return Optional.none();\n }\n if (isNavigation(keycode) && isEditableSelection(start, finish)) {\n return sync(container, isRoot, start, soffset, finish, foffset, annotations.selectRange);\n } else {\n return Optional.none();\n }\n }, Optional.none);\n };\n return {\n keydown,\n keyup\n };\n };\n const external = (win, container, isRoot, annotations) => {\n const bridge = WindowBridge(win);\n return (start, finish) => {\n annotations.clearBeforeUpdate(container);\n identify(start, finish, isRoot).each(cellSel => {\n const boxes = cellSel.boxes.getOr([]);\n annotations.selectRange(container, boxes, cellSel.start, cellSel.finish);\n bridge.selectContents(finish);\n bridge.collapseSelection();\n });\n };\n };\n\n const read = (element, attr) => {\n const value = get$b(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n const add$2 = (element, attr, id) => {\n const old = read(element, attr);\n const nu = old.concat([id]);\n set$2(element, attr, nu.join(' '));\n return true;\n };\n const remove$4 = (element, attr, id) => {\n const nu = filter$2(read(element, attr), v => v !== id);\n if (nu.length > 0) {\n set$2(element, attr, nu.join(' '));\n } else {\n remove$7(element, attr);\n }\n return false;\n };\n\n const supports = element => element.dom.classList !== undefined;\n const get$1 = element => read(element, 'class');\n const add$1 = (element, clazz) => add$2(element, 'class', clazz);\n const remove$3 = (element, clazz) => remove$4(element, 'class', clazz);\n\n const add = (element, clazz) => {\n if (supports(element)) {\n element.dom.classList.add(clazz);\n } else {\n add$1(element, clazz);\n }\n };\n const cleanClass = element => {\n const classList = supports(element) ? element.dom.classList : get$1(element);\n if (classList.length === 0) {\n remove$7(element, 'class');\n }\n };\n const remove$2 = (element, clazz) => {\n if (supports(element)) {\n const classList = element.dom.classList;\n classList.remove(clazz);\n } else {\n remove$3(element, clazz);\n }\n cleanClass(element);\n };\n const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);\n\n const remove$1 = (element, classes) => {\n each$2(classes, x => {\n remove$2(element, x);\n });\n };\n\n const addClass = clazz => element => {\n add(element, clazz);\n };\n const removeClasses = classes => element => {\n remove$1(element, classes);\n };\n\n const byClass = ephemera => {\n const addSelectionClass = addClass(ephemera.selected);\n const removeSelectionClasses = removeClasses([\n ephemera.selected,\n ephemera.lastSelected,\n ephemera.firstSelected\n ]);\n const clear = container => {\n const sels = descendants(container, ephemera.selectedSelector);\n each$2(sels, removeSelectionClasses);\n };\n const selectRange = (container, cells, start, finish) => {\n clear(container);\n each$2(cells, addSelectionClass);\n add(start, ephemera.firstSelected);\n add(finish, ephemera.lastSelected);\n };\n return {\n clearBeforeUpdate: clear,\n clear,\n selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n const byAttr = (ephemera, onSelection, onClear) => {\n const removeSelectionAttributes = element => {\n remove$7(element, ephemera.selected);\n remove$7(element, ephemera.firstSelected);\n remove$7(element, ephemera.lastSelected);\n };\n const addSelectionAttribute = element => {\n set$2(element, ephemera.selected, '1');\n };\n const clear = container => {\n clearBeforeUpdate(container);\n onClear();\n };\n const clearBeforeUpdate = container => {\n const sels = descendants(container, `${ ephemera.selectedSelector },${ ephemera.firstSelectedSelector },${ ephemera.lastSelectedSelector }`);\n each$2(sels, removeSelectionAttributes);\n };\n const selectRange = (container, cells, start, finish) => {\n clear(container);\n each$2(cells, addSelectionAttribute);\n set$2(start, ephemera.firstSelected, '1');\n set$2(finish, ephemera.lastSelected, '1');\n onSelection(cells, start, finish);\n };\n return {\n clearBeforeUpdate,\n clear,\n selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n const SelectionAnnotation = {\n byClass,\n byAttr\n };\n\n const fold = (subject, onNone, onMultiple, onSingle) => {\n switch (subject.tag) {\n case 'none':\n return onNone();\n case 'single':\n return onSingle(subject.element);\n case 'multiple':\n return onMultiple(subject.elements);\n }\n };\n const none = () => ({ tag: 'none' });\n const multiple = elements => ({\n tag: 'multiple',\n elements\n });\n const single = element => ({\n tag: 'single',\n element\n });\n\n const Selections = (lazyRoot, getStart, selectedSelector) => {\n const get = () => retrieve(lazyRoot(), selectedSelector).fold(() => getStart().fold(none, single), multiple);\n return { get };\n };\n\n const getUpOrLeftCells = (grid, selectedCells) => {\n const upGrid = grid.slice(0, selectedCells[selectedCells.length - 1].row + 1);\n const upDetails = toDetailList(upGrid);\n return bind$2(upDetails, detail => {\n const slicedCells = detail.cells.slice(0, selectedCells[selectedCells.length - 1].column + 1);\n return map$1(slicedCells, cell => cell.element);\n });\n };\n const getDownOrRightCells = (grid, selectedCells) => {\n const downGrid = grid.slice(selectedCells[0].row + selectedCells[0].rowspan - 1, grid.length);\n const downDetails = toDetailList(downGrid);\n return bind$2(downDetails, detail => {\n const slicedCells = detail.cells.slice(selectedCells[0].column + selectedCells[0].colspan - 1, detail.cells.length);\n return map$1(slicedCells, cell => cell.element);\n });\n };\n const getOtherCells = (table, target, generators) => {\n const warehouse = Warehouse.fromTable(table);\n const details = onCells(warehouse, target);\n return details.map(selectedCells => {\n const grid = toGrid(warehouse, generators, false);\n const {rows} = extractGridDetails(grid);\n const upOrLeftCells = getUpOrLeftCells(rows, selectedCells);\n const downOrRightCells = getDownOrRightCells(rows, selectedCells);\n return {\n upOrLeftCells,\n downOrRightCells\n };\n });\n };\n\n const mkEvent = (target, x, y, stop, prevent, kill, raw) => ({\n target,\n x,\n y,\n stop,\n prevent,\n kill,\n raw\n });\n const fromRawEvent$1 = rawEvent => {\n const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target));\n const stop = () => rawEvent.stopPropagation();\n const prevent = () => rawEvent.preventDefault();\n const kill = compose(prevent, stop);\n return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n };\n const handle = (filter, handler) => rawEvent => {\n if (filter(rawEvent)) {\n handler(fromRawEvent$1(rawEvent));\n }\n };\n const binder = (element, event, filter, handler, useCapture) => {\n const wrapped = handle(filter, handler);\n element.dom.addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n const bind$1 = (element, event, filter, handler) => binder(element, event, filter, handler, false);\n const unbind = (element, event, handler, useCapture) => {\n element.dom.removeEventListener(event, handler, useCapture);\n };\n\n const filter = always;\n const bind = (element, event, handler) => bind$1(element, event, filter, handler);\n const fromRawEvent = fromRawEvent$1;\n\n const hasInternalTarget = e => !has(SugarElement.fromDom(e.target), 'ephox-snooker-resizer-bar');\n const TableCellSelectionHandler = (editor, resizeHandler) => {\n const cellSelection = Selections(() => SugarElement.fromDom(editor.getBody()), () => getSelectionCell(getSelectionStart(editor), getIsRoot(editor)), ephemera.selectedSelector);\n const onSelection = (cells, start, finish) => {\n const tableOpt = table(start);\n tableOpt.each(table => {\n const cloneFormats = getTableCloneElements(editor);\n const generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), cloneFormats);\n const selectedCells = getCellsFromSelection(editor);\n const otherCells = getOtherCells(table, { selection: selectedCells }, generators);\n fireTableSelectionChange(editor, cells, start, finish, otherCells);\n });\n };\n const onClear = () => fireTableSelectionClear(editor);\n const annotations = SelectionAnnotation.byAttr(ephemera, onSelection, onClear);\n editor.on('init', _e => {\n const win = editor.getWin();\n const body = getBody(editor);\n const isRoot = getIsRoot(editor);\n const syncSelection = () => {\n const sel = editor.selection;\n const start = SugarElement.fromDom(sel.getStart());\n const end = SugarElement.fromDom(sel.getEnd());\n const shared = sharedOne(table, [\n start,\n end\n ]);\n shared.fold(() => annotations.clear(body), noop);\n };\n const mouseHandlers = mouse(win, body, isRoot, annotations);\n const keyHandlers = keyboard(win, body, isRoot, annotations);\n const external$1 = external(win, body, isRoot, annotations);\n const hasShiftKey = event => event.raw.shiftKey === true;\n editor.on('TableSelectorChange', e => external$1(e.start, e.finish));\n const handleResponse = (event, response) => {\n if (!hasShiftKey(event)) {\n return;\n }\n if (response.kill) {\n event.kill();\n }\n response.selection.each(ns => {\n const relative = SimSelection.relative(ns.start, ns.finish);\n const rng = asLtrRange(win, relative);\n editor.selection.setRng(rng);\n });\n };\n const keyup = event => {\n const wrappedEvent = fromRawEvent(event);\n if (wrappedEvent.raw.shiftKey && isNavigation(wrappedEvent.raw.which)) {\n const rng = editor.selection.getRng();\n const start = SugarElement.fromDom(rng.startContainer);\n const end = SugarElement.fromDom(rng.endContainer);\n keyHandlers.keyup(wrappedEvent, start, rng.startOffset, end, rng.endOffset).each(response => {\n handleResponse(wrappedEvent, response);\n });\n }\n };\n const keydown = event => {\n const wrappedEvent = fromRawEvent(event);\n resizeHandler.hide();\n const rng = editor.selection.getRng();\n const start = SugarElement.fromDom(rng.startContainer);\n const end = SugarElement.fromDom(rng.endContainer);\n const direction = onDirection(ltr, rtl)(SugarElement.fromDom(editor.selection.getStart()));\n keyHandlers.keydown(wrappedEvent, start, rng.startOffset, end, rng.endOffset, direction).each(response => {\n handleResponse(wrappedEvent, response);\n });\n resizeHandler.show();\n };\n const isLeftMouse = raw => raw.button === 0;\n const isLeftButtonPressed = raw => {\n if (raw.buttons === undefined) {\n return true;\n }\n return (raw.buttons & 1) !== 0;\n };\n const dragStart = _e => {\n mouseHandlers.clearstate();\n };\n const mouseDown = e => {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mousedown(fromRawEvent(e));\n }\n };\n const mouseOver = e => {\n if (isLeftButtonPressed(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseover(fromRawEvent(e));\n }\n };\n const mouseUp = e => {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseup(fromRawEvent(e));\n }\n };\n const getDoubleTap = () => {\n const lastTarget = Cell(SugarElement.fromDom(body));\n const lastTimeStamp = Cell(0);\n const touchEnd = t => {\n const target = SugarElement.fromDom(t.target);\n if (isTag('td')(target) || isTag('th')(target)) {\n const lT = lastTarget.get();\n const lTS = lastTimeStamp.get();\n if (eq$1(lT, target) && t.timeStamp - lTS < 300) {\n t.preventDefault();\n external$1(target, target);\n }\n }\n lastTarget.set(target);\n lastTimeStamp.set(t.timeStamp);\n };\n return { touchEnd };\n };\n const doubleTap = getDoubleTap();\n editor.on('dragstart', dragStart);\n editor.on('mousedown', mouseDown);\n editor.on('mouseover', mouseOver);\n editor.on('mouseup', mouseUp);\n editor.on('touchend', doubleTap.touchEnd);\n editor.on('keyup', keyup);\n editor.on('keydown', keydown);\n editor.on('NodeChange', syncSelection);\n });\n editor.on('PreInit', () => {\n editor.serializer.addTempAttr(ephemera.firstSelected);\n editor.serializer.addTempAttr(ephemera.lastSelected);\n });\n const clearSelectedCells = container => annotations.clear(SugarElement.fromDom(container));\n const getSelectedCells = () => fold(cellSelection.get(), constant([]), cells => {\n return map$1(cells, cell => cell.dom);\n }, cell => [cell.dom]);\n return {\n getSelectedCells,\n clearSelectedCells\n };\n };\n\n const Event = fields => {\n let handlers = [];\n const bind = handler => {\n if (handler === undefined) {\n throw new Error('Event bind error: undefined handler');\n }\n handlers.push(handler);\n };\n const unbind = handler => {\n handlers = filter$2(handlers, h => {\n return h !== handler;\n });\n };\n const trigger = (...args) => {\n const event = {};\n each$2(fields, (name, i) => {\n event[name] = args[i];\n });\n each$2(handlers, handler => {\n handler(event);\n });\n };\n return {\n bind,\n unbind,\n trigger\n };\n };\n\n const create$1 = typeDefs => {\n const registry = map(typeDefs, event => {\n return {\n bind: event.bind,\n unbind: event.unbind\n };\n });\n const trigger = map(typeDefs, event => {\n return event.trigger;\n });\n return {\n registry,\n trigger\n };\n };\n\n const last = (fn, rate) => {\n let timer = null;\n const cancel = () => {\n if (!isNull(timer)) {\n clearTimeout(timer);\n timer = null;\n }\n };\n const throttle = (...args) => {\n cancel();\n timer = setTimeout(() => {\n timer = null;\n fn.apply(null, args);\n }, rate);\n };\n return {\n cancel,\n throttle\n };\n };\n\n const sort = arr => {\n return arr.slice(0).sort();\n };\n const reqMessage = (required, keys) => {\n throw new Error('All required keys (' + sort(required).join(', ') + ') were not specified. Specified keys were: ' + sort(keys).join(', ') + '.');\n };\n const unsuppMessage = unsupported => {\n throw new Error('Unsupported keys for object: ' + sort(unsupported).join(', '));\n };\n const validateStrArr = (label, array) => {\n if (!isArray(array)) {\n throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.');\n }\n each$2(array, a => {\n if (!isString(a)) {\n throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.');\n }\n });\n };\n const invalidTypeMessage = (incorrect, type) => {\n throw new Error('All values need to be of type: ' + type + '. Keys (' + sort(incorrect).join(', ') + ') were not.');\n };\n const checkDupes = everything => {\n const sorted = sort(everything);\n const dupe = find$1(sorted, (s, i) => {\n return i < sorted.length - 1 && s === sorted[i + 1];\n });\n dupe.each(d => {\n throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].');\n });\n };\n\n const base = (handleUnsupported, required) => {\n return baseWith(handleUnsupported, required, {\n validate: isFunction,\n label: 'function'\n });\n };\n const baseWith = (handleUnsupported, required, pred) => {\n if (required.length === 0) {\n throw new Error('You must specify at least one required field.');\n }\n validateStrArr('required', required);\n checkDupes(required);\n return obj => {\n const keys$1 = keys(obj);\n const allReqd = forall(required, req => {\n return contains$2(keys$1, req);\n });\n if (!allReqd) {\n reqMessage(required, keys$1);\n }\n handleUnsupported(required, keys$1);\n const invalidKeys = filter$2(required, key => {\n return !pred.validate(obj[key], key);\n });\n if (invalidKeys.length > 0) {\n invalidTypeMessage(invalidKeys, pred.label);\n }\n return obj;\n };\n };\n const handleExact = (required, keys) => {\n const unsupported = filter$2(keys, key => {\n return !contains$2(required, key);\n });\n if (unsupported.length > 0) {\n unsuppMessage(unsupported);\n }\n };\n const exactly = required => base(handleExact, required);\n\n const DragMode = exactly([\n 'compare',\n 'extract',\n 'mutate',\n 'sink'\n ]);\n const DragSink = exactly([\n 'element',\n 'start',\n 'stop',\n 'destroy'\n ]);\n const DragApi = exactly([\n 'forceDrop',\n 'drop',\n 'move',\n 'delayDrop'\n ]);\n\n const InDrag = () => {\n let previous = Optional.none();\n const reset = () => {\n previous = Optional.none();\n };\n const update = (mode, nu) => {\n const result = previous.map(old => {\n return mode.compare(old, nu);\n });\n previous = Optional.some(nu);\n return result;\n };\n const onEvent = (event, mode) => {\n const dataOption = mode.extract(event);\n dataOption.each(data => {\n const offset = update(mode, data);\n offset.each(d => {\n events.trigger.move(d);\n });\n });\n };\n const events = create$1({ move: Event(['info']) });\n return {\n onEvent,\n reset,\n events: events.registry\n };\n };\n\n const NoDrag = () => {\n const events = create$1({ move: Event(['info']) });\n return {\n onEvent: noop,\n reset: noop,\n events: events.registry\n };\n };\n\n const Movement = () => {\n const noDragState = NoDrag();\n const inDragState = InDrag();\n let dragState = noDragState;\n const on = () => {\n dragState.reset();\n dragState = inDragState;\n };\n const off = () => {\n dragState.reset();\n dragState = noDragState;\n };\n const onEvent = (event, mode) => {\n dragState.onEvent(event, mode);\n };\n const isOn = () => {\n return dragState === inDragState;\n };\n return {\n on,\n off,\n isOn,\n onEvent,\n events: inDragState.events\n };\n };\n\n const setup = (mutation, mode, settings) => {\n let active = false;\n const events = create$1({\n start: Event([]),\n stop: Event([])\n });\n const movement = Movement();\n const drop = () => {\n sink.stop();\n if (movement.isOn()) {\n movement.off();\n events.trigger.stop();\n }\n };\n const throttledDrop = last(drop, 200);\n const go = parent => {\n sink.start(parent);\n movement.on();\n events.trigger.start();\n };\n const mousemove = event => {\n throttledDrop.cancel();\n movement.onEvent(event, mode);\n };\n movement.events.move.bind(event => {\n mode.mutate(mutation, event.info);\n });\n const on = () => {\n active = true;\n };\n const off = () => {\n active = false;\n };\n const isActive = () => active;\n const runIfActive = f => {\n return (...args) => {\n if (active) {\n f.apply(null, args);\n }\n };\n };\n const sink = mode.sink(DragApi({\n forceDrop: drop,\n drop: runIfActive(drop),\n move: runIfActive(mousemove),\n delayDrop: runIfActive(throttledDrop.throttle)\n }), settings);\n const destroy = () => {\n sink.destroy();\n };\n return {\n element: sink.element,\n go,\n on,\n off,\n isActive,\n destroy,\n events: events.registry\n };\n };\n\n const css = namespace => {\n const dashNamespace = namespace.replace(/\\./g, '-');\n const resolve = str => {\n return dashNamespace + '-' + str;\n };\n return { resolve };\n };\n\n const styles$1 = css('ephox-dragster');\n const resolve$1 = styles$1.resolve;\n\n const Blocker = options => {\n const settings = {\n layerClass: resolve$1('blocker'),\n ...options\n };\n const div = SugarElement.fromTag('div');\n set$2(div, 'role', 'presentation');\n setAll(div, {\n position: 'fixed',\n left: '0px',\n top: '0px',\n width: '100%',\n height: '100%'\n });\n add(div, resolve$1('blocker'));\n add(div, settings.layerClass);\n const element = constant(div);\n const destroy = () => {\n remove$6(div);\n };\n return {\n element,\n destroy\n };\n };\n\n const compare = (old, nu) => {\n return SugarPosition(nu.left - old.left, nu.top - old.top);\n };\n const extract = event => {\n return Optional.some(SugarPosition(event.x, event.y));\n };\n const mutate = (mutation, info) => {\n mutation.mutate(info.left, info.top);\n };\n const sink = (dragApi, settings) => {\n const blocker = Blocker(settings);\n const mdown = bind(blocker.element(), 'mousedown', dragApi.forceDrop);\n const mup = bind(blocker.element(), 'mouseup', dragApi.drop);\n const mmove = bind(blocker.element(), 'mousemove', dragApi.move);\n const mout = bind(blocker.element(), 'mouseout', dragApi.delayDrop);\n const destroy = () => {\n blocker.destroy();\n mup.unbind();\n mmove.unbind();\n mout.unbind();\n mdown.unbind();\n };\n const start = parent => {\n append$1(parent, blocker.element());\n };\n const stop = () => {\n remove$6(blocker.element());\n };\n return DragSink({\n element: blocker.element,\n start,\n stop,\n destroy\n });\n };\n var MouseDrag = DragMode({\n compare,\n extract,\n sink,\n mutate\n });\n\n const transform = (mutation, settings = {}) => {\n var _a;\n const mode = (_a = settings.mode) !== null && _a !== void 0 ? _a : MouseDrag;\n return setup(mutation, mode, settings);\n };\n\n const styles = css('ephox-snooker');\n const resolve = styles.resolve;\n\n const Mutation = () => {\n const events = create$1({\n drag: Event([\n 'xDelta',\n 'yDelta'\n ])\n });\n const mutate = (x, y) => {\n events.trigger.drag(x, y);\n };\n return {\n mutate,\n events: events.registry\n };\n };\n\n const BarMutation = () => {\n const events = create$1({\n drag: Event([\n 'xDelta',\n 'yDelta',\n 'target'\n ])\n });\n let target = Optional.none();\n const delegate = Mutation();\n delegate.events.drag.bind(event => {\n target.each(t => {\n events.trigger.drag(event.xDelta, event.yDelta, t);\n });\n });\n const assign = t => {\n target = Optional.some(t);\n };\n const get = () => {\n return target;\n };\n return {\n assign,\n get,\n mutate: delegate.mutate,\n events: events.registry\n };\n };\n\n const col = (column, x, y, w, h) => {\n const bar = SugarElement.fromTag('div');\n setAll(bar, {\n position: 'absolute',\n left: x - w / 2 + 'px',\n top: y + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll$1(bar, {\n 'data-column': column,\n 'role': 'presentation'\n });\n return bar;\n };\n const row = (r, x, y, w, h) => {\n const bar = SugarElement.fromTag('div');\n setAll(bar, {\n position: 'absolute',\n left: x + 'px',\n top: y - h / 2 + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll$1(bar, {\n 'data-row': r,\n 'role': 'presentation'\n });\n return bar;\n };\n\n const resizeBar = resolve('resizer-bar');\n const resizeRowBar = resolve('resizer-rows');\n const resizeColBar = resolve('resizer-cols');\n const BAR_THICKNESS = 7;\n const resizableRows = (warehouse, isResizable) => bind$2(warehouse.all, (row, i) => isResizable(row.element) ? [i] : []);\n const resizableColumns = (warehouse, isResizable) => {\n const resizableCols = [];\n range$1(warehouse.grid.columns, index => {\n const colElmOpt = Warehouse.getColumnAt(warehouse, index).map(col => col.element);\n if (colElmOpt.forall(isResizable)) {\n resizableCols.push(index);\n }\n });\n return filter$2(resizableCols, colIndex => {\n const columnCells = Warehouse.filterItems(warehouse, cell => cell.column === colIndex);\n return forall(columnCells, cell => isResizable(cell.element));\n });\n };\n const destroy = wire => {\n const previous = descendants(wire.parent(), '.' + resizeBar);\n each$2(previous, remove$6);\n };\n const drawBar = (wire, positions, create) => {\n const origin = wire.origin();\n each$2(positions, cpOption => {\n cpOption.each(cp => {\n const bar = create(origin, cp);\n add(bar, resizeBar);\n append$1(wire.parent(), bar);\n });\n });\n };\n const refreshCol = (wire, colPositions, position, tableHeight) => {\n drawBar(wire, colPositions, (origin, cp) => {\n const colBar = col(cp.col, cp.x - origin.left, position.top - origin.top, BAR_THICKNESS, tableHeight);\n add(colBar, resizeColBar);\n return colBar;\n });\n };\n const refreshRow = (wire, rowPositions, position, tableWidth) => {\n drawBar(wire, rowPositions, (origin, cp) => {\n const rowBar = row(cp.row, position.left - origin.left, cp.y - origin.top, tableWidth, BAR_THICKNESS);\n add(rowBar, resizeRowBar);\n return rowBar;\n });\n };\n const refreshGrid = (warhouse, wire, table, rows, cols) => {\n const position = absolute(table);\n const isResizable = wire.isResizable;\n const rowPositions = rows.length > 0 ? height.positions(rows, table) : [];\n const resizableRowBars = rowPositions.length > 0 ? resizableRows(warhouse, isResizable) : [];\n const resizableRowPositions = filter$2(rowPositions, (_pos, i) => exists(resizableRowBars, barIndex => i === barIndex));\n refreshRow(wire, resizableRowPositions, position, getOuter$2(table));\n const colPositions = cols.length > 0 ? width.positions(cols, table) : [];\n const resizableColBars = colPositions.length > 0 ? resizableColumns(warhouse, isResizable) : [];\n const resizableColPositions = filter$2(colPositions, (_pos, i) => exists(resizableColBars, barIndex => i === barIndex));\n refreshCol(wire, resizableColPositions, position, getOuter$1(table));\n };\n const refresh = (wire, table) => {\n destroy(wire);\n if (wire.isResizable(table)) {\n const warehouse = Warehouse.fromTable(table);\n const rows$1 = rows(warehouse);\n const cols = columns(warehouse);\n refreshGrid(warehouse, wire, table, rows$1, cols);\n }\n };\n const each = (wire, f) => {\n const bars = descendants(wire.parent(), '.' + resizeBar);\n each$2(bars, f);\n };\n const hide = wire => {\n each(wire, bar => {\n set$1(bar, 'display', 'none');\n });\n };\n const show = wire => {\n each(wire, bar => {\n set$1(bar, 'display', 'block');\n });\n };\n const isRowBar = element => {\n return has(element, resizeRowBar);\n };\n const isColBar = element => {\n return has(element, resizeColBar);\n };\n\n const resizeBarDragging = resolve('resizer-bar-dragging');\n const BarManager = wire => {\n const mutation = BarMutation();\n const resizing = transform(mutation, {});\n let hoverTable = Optional.none();\n const getResizer = (element, type) => {\n return Optional.from(get$b(element, type));\n };\n mutation.events.drag.bind(event => {\n getResizer(event.target, 'data-row').each(_dataRow => {\n const currentRow = getCssValue(event.target, 'top');\n set$1(event.target, 'top', currentRow + event.yDelta + 'px');\n });\n getResizer(event.target, 'data-column').each(_dataCol => {\n const currentCol = getCssValue(event.target, 'left');\n set$1(event.target, 'left', currentCol + event.xDelta + 'px');\n });\n });\n const getDelta = (target, dir) => {\n const newX = getCssValue(target, dir);\n const oldX = getAttrValue(target, 'data-initial-' + dir, 0);\n return newX - oldX;\n };\n resizing.events.stop.bind(() => {\n mutation.get().each(target => {\n hoverTable.each(table => {\n getResizer(target, 'data-row').each(row => {\n const delta = getDelta(target, 'top');\n remove$7(target, 'data-initial-top');\n events.trigger.adjustHeight(table, delta, parseInt(row, 10));\n });\n getResizer(target, 'data-column').each(column => {\n const delta = getDelta(target, 'left');\n remove$7(target, 'data-initial-left');\n events.trigger.adjustWidth(table, delta, parseInt(column, 10));\n });\n refresh(wire, table);\n });\n });\n });\n const handler = (target, dir) => {\n events.trigger.startAdjust();\n mutation.assign(target);\n set$2(target, 'data-initial-' + dir, getCssValue(target, dir));\n add(target, resizeBarDragging);\n set$1(target, 'opacity', '0.2');\n resizing.go(wire.parent());\n };\n const mousedown = bind(wire.parent(), 'mousedown', event => {\n if (isRowBar(event.target)) {\n handler(event.target, 'top');\n }\n if (isColBar(event.target)) {\n handler(event.target, 'left');\n }\n });\n const isRoot = e => {\n return eq$1(e, wire.view());\n };\n const findClosestEditableTable = target => closest$1(target, 'table', isRoot).filter(isEditable$1);\n const mouseover = bind(wire.view(), 'mouseover', event => {\n findClosestEditableTable(event.target).fold(() => {\n if (inBody(event.target)) {\n destroy(wire);\n }\n }, table => {\n if (resizing.isActive()) {\n hoverTable = Optional.some(table);\n refresh(wire, table);\n }\n });\n });\n const destroy$1 = () => {\n mousedown.unbind();\n mouseover.unbind();\n resizing.destroy();\n destroy(wire);\n };\n const refresh$1 = tbl => {\n refresh(wire, tbl);\n };\n const events = create$1({\n adjustHeight: Event([\n 'table',\n 'delta',\n 'row'\n ]),\n adjustWidth: Event([\n 'table',\n 'delta',\n 'column'\n ]),\n startAdjust: Event([])\n });\n return {\n destroy: destroy$1,\n refresh: refresh$1,\n on: resizing.on,\n off: resizing.off,\n hideBars: curry(hide, wire),\n showBars: curry(show, wire),\n events: events.registry\n };\n };\n\n const create = (wire, resizing, lazySizing) => {\n const hdirection = height;\n const vdirection = width;\n const manager = BarManager(wire);\n const events = create$1({\n beforeResize: Event([\n 'table',\n 'type'\n ]),\n afterResize: Event([\n 'table',\n 'type'\n ]),\n startDrag: Event([])\n });\n manager.events.adjustHeight.bind(event => {\n const table = event.table;\n events.trigger.beforeResize(table, 'row');\n const delta = hdirection.delta(event.delta, table);\n adjustHeight(table, delta, event.row, hdirection);\n events.trigger.afterResize(table, 'row');\n });\n manager.events.startAdjust.bind(_event => {\n events.trigger.startDrag();\n });\n manager.events.adjustWidth.bind(event => {\n const table = event.table;\n events.trigger.beforeResize(table, 'col');\n const delta = vdirection.delta(event.delta, table);\n const tableSize = lazySizing(table);\n adjustWidth(table, delta, event.column, resizing, tableSize);\n events.trigger.afterResize(table, 'col');\n });\n return {\n on: manager.on,\n off: manager.off,\n refreshBars: manager.refresh,\n hideBars: manager.hideBars,\n showBars: manager.showBars,\n destroy: manager.destroy,\n events: events.registry\n };\n };\n const TableResize = { create };\n\n const only = (element, isResizable) => {\n const parent = isDocument(element) ? documentElement(element) : element;\n return {\n parent: constant(parent),\n view: constant(element),\n origin: constant(SugarPosition(0, 0)),\n isResizable\n };\n };\n const detached = (editable, chrome, isResizable) => {\n const origin = () => absolute(chrome);\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin,\n isResizable\n };\n };\n const body = (editable, chrome, isResizable) => {\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin: constant(SugarPosition(0, 0)),\n isResizable\n };\n };\n const ResizeWire = {\n only,\n detached,\n body\n };\n\n const createContainer = () => {\n const container = SugarElement.fromTag('div');\n setAll(container, {\n position: 'static',\n height: '0',\n width: '0',\n padding: '0',\n margin: '0',\n border: '0'\n });\n append$1(body$1(), container);\n return container;\n };\n const get = (editor, isResizable) => {\n return editor.inline ? ResizeWire.body(SugarElement.fromDom(editor.getBody()), createContainer(), isResizable) : ResizeWire.only(SugarElement.fromDom(editor.getDoc()), isResizable);\n };\n const remove = (editor, wire) => {\n if (editor.inline) {\n remove$6(wire.parent());\n }\n };\n\n const isTable = node => isNonNullable(node) && node.nodeName === 'TABLE';\n const barResizerPrefix = 'bar-';\n const isResizable = elm => get$b(elm, 'data-mce-resize') !== 'false';\n const syncPixels = table => {\n const warehouse = Warehouse.fromTable(table);\n if (!Warehouse.hasColumns(warehouse)) {\n each$2(cells$1(table), cell => {\n const computedWidth = get$a(cell, 'width');\n set$1(cell, 'width', computedWidth);\n remove$7(cell, 'width');\n });\n }\n };\n const TableResizeHandler = editor => {\n const selectionRng = value();\n const tableResize = value();\n const resizeWire = value();\n let startW;\n let startRawW;\n const lazySizing = table => get$5(editor, table);\n const lazyResizingBehaviour = () => isPreserveTableColumnResizing(editor) ? preserveTable() : resizeTable();\n const getNumColumns = table => getGridSize(table).columns;\n const afterCornerResize = (table, origin, width) => {\n const isRightEdgeResize = endsWith(origin, 'e');\n if (startRawW === '') {\n convertToPercentSize(table);\n }\n if (width !== startW && startRawW !== '') {\n set$1(table, 'width', startRawW);\n const resizing = lazyResizingBehaviour();\n const tableSize = lazySizing(table);\n const col = isPreserveTableColumnResizing(editor) || isRightEdgeResize ? getNumColumns(table) - 1 : 0;\n adjustWidth(table, width - startW, col, resizing, tableSize);\n } else if (isPercentage$1(startRawW)) {\n const percentW = parseFloat(startRawW.replace('%', ''));\n const targetPercentW = width * percentW / startW;\n set$1(table, 'width', targetPercentW + '%');\n }\n if (isPixel(startRawW)) {\n syncPixels(table);\n }\n };\n const destroy = () => {\n tableResize.on(sz => {\n sz.destroy();\n });\n resizeWire.on(w => {\n remove(editor, w);\n });\n };\n editor.on('init', () => {\n const rawWire = get(editor, isResizable);\n resizeWire.set(rawWire);\n if (hasTableObjectResizing(editor) && hasTableResizeBars(editor)) {\n const resizing = lazyResizingBehaviour();\n const sz = TableResize.create(rawWire, resizing, lazySizing);\n sz.on();\n sz.events.startDrag.bind(_event => {\n selectionRng.set(editor.selection.getRng());\n });\n sz.events.beforeResize.bind(event => {\n const rawTable = event.table.dom;\n fireObjectResizeStart(editor, rawTable, getPixelWidth(rawTable), getPixelHeight(rawTable), barResizerPrefix + event.type);\n });\n sz.events.afterResize.bind(event => {\n const table = event.table;\n const rawTable = table.dom;\n removeDataStyle(table);\n selectionRng.on(rng => {\n editor.selection.setRng(rng);\n editor.focus();\n });\n fireObjectResized(editor, rawTable, getPixelWidth(rawTable), getPixelHeight(rawTable), barResizerPrefix + event.type);\n editor.undoManager.add();\n });\n tableResize.set(sz);\n }\n });\n editor.on('ObjectResizeStart', e => {\n const targetElm = e.target;\n if (isTable(targetElm)) {\n const table = SugarElement.fromDom(targetElm);\n each$2(editor.dom.select('.mce-clonedresizable'), clone => {\n editor.dom.addClass(clone, 'mce-' + getTableColumnResizingBehaviour(editor) + '-columns');\n });\n if (!isPixelSizing(table) && isTablePixelsForced(editor)) {\n convertToPixelSize(table);\n } else if (!isPercentSizing(table) && isTablePercentagesForced(editor)) {\n convertToPercentSize(table);\n }\n if (isNoneSizing(table) && startsWith(e.origin, barResizerPrefix)) {\n convertToPercentSize(table);\n }\n startW = e.width;\n startRawW = isTableResponsiveForced(editor) ? '' : getRawWidth(editor, targetElm).getOr('');\n }\n });\n editor.on('ObjectResized', e => {\n const targetElm = e.target;\n if (isTable(targetElm)) {\n const table = SugarElement.fromDom(targetElm);\n const origin = e.origin;\n if (startsWith(origin, 'corner-')) {\n afterCornerResize(table, origin, e.width);\n }\n removeDataStyle(table);\n fireTableModified(editor, table.dom, styleModified);\n }\n });\n editor.on('SwitchMode', () => {\n tableResize.on(resize => {\n if (editor.mode.isReadOnly()) {\n resize.hideBars();\n } else {\n resize.showBars();\n }\n });\n });\n editor.on('dragstart dragend', e => {\n tableResize.on(resize => {\n if (e.type === 'dragstart') {\n resize.hideBars();\n resize.off();\n } else {\n resize.on();\n resize.showBars();\n }\n });\n });\n editor.on('remove', () => {\n destroy();\n });\n const refresh = table => {\n tableResize.on(resize => resize.refreshBars(SugarElement.fromDom(table)));\n };\n const hide = () => {\n tableResize.on(resize => resize.hideBars());\n };\n const show = () => {\n tableResize.on(resize => resize.showBars());\n };\n return {\n refresh,\n hide,\n show\n };\n };\n\n const setupTable = editor => {\n register(editor);\n const resizeHandler = TableResizeHandler(editor);\n const cellSelectionHandler = TableCellSelectionHandler(editor, resizeHandler);\n const actions = TableActions(editor, resizeHandler, cellSelectionHandler);\n registerCommands(editor, actions);\n registerQueryCommands(editor, actions);\n registerEvents(editor, actions);\n return {\n getSelectedCells: cellSelectionHandler.getSelectedCells,\n clearSelectedCells: cellSelectionHandler.clearSelectedCells\n };\n };\n\n const DomModel = editor => {\n const table = setupTable(editor);\n return { table };\n };\n var Model = () => {\n global$1.add('dom', DomModel);\n };\n\n Model();\n\n})();\n"],"names":["global$1","tinymce","util","Tools","resolve","isType$1","type","value","x","t","Array","isArray","o","v","proto","constructor","String","prototype","isPrototypeOf","_a","name","typeOf","isSimpleType","eq$2","a","isString","isObject","isNull","isBoolean","isUndefined","undefined","isNonNullable","isNullable","isFunction","isNumber","noop","constant","identity","tripleEquals","b","curry","fn","initialArgs","restArgs","all","concat","apply","not","f","never","always","Optional","tag","this","some","none","singletonNone","fold","onNone","onSome","isSome","isNone","map","mapper","bind","binder","exists","predicate","forall","filter","getOr","replacement","or","getOrThunk","thunk","orThunk","getOrDie","message","Error","from","getOrNull","getOrUndefined","each","worker","toArray","toString","nativeSlice","slice","nativeIndexOf","indexOf","nativePush","push","contains$2","xs","rawIndexOf","ts","call","pred","i","len","length","range$1","num","r","map$1","each$2","partition","pass","fail","filter$2","foldr","acc","eachr","foldl","find$1","until","findUntil","findIndex","flatten","bind$2","mapToObject","get$d","head","last$2","findMap","arr","keys","Object","hasOwnProperty","each$1","obj","props","k","tupleMap","tuple","filter$1","onTrue","onFalse","internalFilter","objAcc","mapToArray","values","has$1","key","Global","window","Function","resolve$2","p","scope","parts","path","split","actual","unsafe","getPrototypeOf","sandHTMLElement","test","element","dom","nodeName","toLowerCase","nodeType","isType","isComment","isHTMLElement","isElement","isText","isDocument","isDocumentFragment","isTag","e","rawSet","console","error","setAttribute","set$2","setAll$1","attrs","get$b","getAttribute","getOpt","remove$7","removeAttribute","clone$2","attributes","attr","fromDom$1","node","SugarElement","fromHtml","html","div","document","createElement","innerHTML","hasChildNodes","childNodes","fromTag","fromText","text","createTextNode","fromDom","fromPoint","docElm","y","elementFromPoint","is$2","selector","elem","matches","msMatchesSelector","webkitMatchesSelector","mozMatchesSelector","bypassSelector","childElementCount","one","base","querySelector","eq$1","e1","e2","contains$1","d1","d2","contains","is$1","owner","ownerDocument","documentOrOwner","dos","parent","parentNode","parentElement","parents","isRoot","stop","ret","rawParent","prevSibling","previousSibling","nextSibling","children$2","child$2","index","cs","before$3","marker","insertBefore","after$5","append$1","prepend","firstChild$1","firstChild","appendChild","wrap","wrapper","after$4","elements","append","empty","textContent","rogue","remove$6","removeChild","unwrap","children","clone$1","original","isDeep","cloneNode","shallow","deep","shallowAs","nu","validSectionList","detail","rowspan","colspan","rowdetail","cells","section","elementnew","isNew","isLocked","rowcells","supported","Element","attachShadow","Node","getRootNode","isSupported$1","getShadowRoot","host","getShadowHost","isOpenShadowHost","shadowRoot","inBody","doc","body","fbc","fab","getBody$1","descendants$1","result","ancestors$3","ancestors$4","children$1","descendants","querySelectorAll","all$1","ClosestOrAncestor","is","ancestor","ancestor$2","el","closest$2","s","ancestor$1","child","child$1","descendant","closest$1","lhs","rhs","comparator","left","cat","someIf","checkRange","str","substr","start","end","idx","startsWith","prefix","endsWith","suffix","trim","replace","blank","isNotEmpty","isSupported","style","getPropertyValue","internalSet","property","setProperty","set$1","setAll","css","get$a","getComputedStyle","getUnsafeProperty","getRaw$2","raw","remove$5","removeProperty","internalRemove","getAttrValue","cell","fallback","parseInt","getSpan","hasColspan","cellOrCol","hasRowspan","getCssValue","minWidth","minHeight","firstLayer","filterFirstLayer","tags","join","elm","lookup","cells$1","columns$1","columnGroups","columnGroup","table","rows$1","fromRowsOrColGroups","elems","getSection","row","column","getParentSection","group","parentName","isValidSection","fromTable$1","rows","cached","called","args","unknown$2","nu$2","major","minor","Version","detect","versionRegexes","agent","cleanedAgent","regexes","firstMatch","Number","find","unknown","detect$4","candidates","userAgent","candidate","search","normalVersionRegex","checkContains","target","uastring","browsers","brand","oses","PlatformInfo","edge","chromium","opera","firefox","safari","nu$1","info","current","version","isBrowser","isEdge","isChromium","isIE","isOpera","isFirefox","isSafari","Browser","ie","windows","android","linux","macos","solaris","freebsd","chromeos","isOS","isWindows","isiOS","isAndroid","isMacOS","isLinux","isSolaris","isFreeBSD","isChromeOS","OperatingSystem","ios","PlatformDetection","userAgentDataOpt","mediaMatch","browser","userAgentData","brands","uaBrand","lcBrand","detectBrowser$1","detectBrowser","os","detectOs","deviceType","isiPad","isiPhone","isMobile","isTouch","isTablet","isPhone","iOSwebview","isDesktop","isWebView","DeviceType","query","matchMedia","platform","navigator","detect$2","Dimension","getOffset","get","parseFloat","aggregate","properties","val","isNaN","set","h","match","getOuter","max","cumulativeInclusions","toNumber","px","toFloat","getProp","getCalculatedWidth","boxSizing","width","getBoundingClientRect","offsetWidth","size","upper","lower","calcContentBoxSize","api$2","get$9","getOuter$2","getInner","getRuntime$1","addCells","gridRow","existingCells","before","after","newCells","setCells","addCell","mutateCell","getCell","getCellElement","cellLength","extractGridDetails","grid","cols","clone","cloneRow","cloneCell","LOCKED_COL_ATTR","getLockedColumnsFromTable","lockedColStr","lockedCols","getLockedColumnsFromGrid","locked","lockedArr","_val","copy","sort","sort$1","filterItems","warehouse","generate$1","list","access","lockedColumns","rowData","maxRows","maxColumns","rowCount","colgroupRows","currentRow","rowCell","hasNonNullableKey","extended","occupiedColumnPosition","occupiedRowPosition","columnPosition","newpos","Math","columns","colgroups","columnsGroup","columnIndex","colIndex","columnext","generateColumns","colgroup$1","colgroup","grid$1","Warehouse","fromTable","generate","getAt","findItem","item","filtered","justCells","w","justColumns","hasColumns","getColumnAt","isValidCell","rowsArr","col","decide","getBlock","isValid","getFallback","inBlock","c","deduce","rest","reverse","aa","delta","next","n","extras","abs","onDirection","isLtr","isRtl","getDirection","api$1","height","offsetHeight","get$8","getOuter$1","getRuntime","top","translate","SugarPosition","firstDefinedOrZero","absolute","win","defaultView","documentElement","offsetLeft","offsetTop","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","viewport","box","boxPosition","rowInfo","colInfo","rtlEdge","ltrEdge","getLeftEdge","getRightEdge","getTop$1","getTopEdge","getBottomEdge","findPositions","getInnerEdge","getOuterEdge","array","lines","cellOption","lastLine","positions","optElements","detect$1","step","amount","units","unsupportedLength","fixed","relative","pattern","decimalDigits","exponentPart","opt","input","unsignedDecimalLiteral","RegExp","parse","accepted","exec","unitRaw","unit","check","isUnit","rPercentageBasedSizeRegex","rPixelBasedSizeRegex","isCol$2","getPercentSize","outerGetter","innerGetter","relativeParent","setPixelWidth","setPercentageWidth","setHeight","normalizePixelSize","getter","setter","number","newSize","total","floor","convert","getTotalHeight","getHeightValue","getRaw$1","prop","getRawWidth$1","getPercentageWidth","getPixelWidth$1","getHeight","get$7","setGenericWidth","getPercentTableWidth","percentageBasedSizeRegex","isCol$1","getRawW","getRawH","getDimension","cellOpt","backups","getWidthFrom","getWidth","columnCells","justCols","pos","colFilter","supportsColWidths","isValidColumn","getDeduced","deduced","d","getPixelWidths","tableSize","minCellWidth","getHeightFrom","direction","widthLookup","noneSize","zero","pixelWidth","getWidths","getCellDelta","singleColumnWidth","setElementWidth","adjustTableWidth","isRelative","label","percentageSize","getFloatWidth","cellWidth","getPercentageWidths","_delta","currentWidth","pixelSize","newWidth","TableSize","chooseSize","makeCell","seenSelected","rowIndex","td","extract$1","selectedSelector","isSelected","replica","replicaHouse","replicaStats","house","totalColumns","minRow","minCol","maxRow","maxCol","allCells","selectedCells","startRow","endRow","startCol","endCol","statsStruct","findSelectedStats","unselectedCells","stats","totalRows","j","fillInGaps","widthDelta","colWidths","allColsWidth","selectedColsWidth","getTableWidthDelta","emptyRows","clean","api","getOption","nodeValue","NodeValue","get$6","getEnd","elementsWithCursorPosition","isCursorPosition","isContentEditableFalse","first","descend","res","descendant$1","last$1","descendantRtl","transferableAttributes","createCell","createCol","createColgroup","createRow$1","replace$1","cloneChildren","copy$2","pasteReplace","cellOperations","mutate","formatsToClone","cloneCss","prev","source","sourceDom","targetDom","cssText","copy$1","formats","lastNode","oldCell","newCell","firstText","formatSelector","last","clonedFormat","cloneFormats","validAttributes","attributeName","attribute","cloneAppropriateAttributes","colGap","gap","paste$1","option","editor","options","defaultWidth","getPixelForcedWidth","parentBlock","getParent","selection","getStart","isBlock","getBody","getTableCloneElements","getTableHeaderType","getTableColumnResizingBehaviour","isPreserveTableColumnResizing","isResizeTableColumnResizing","getTableSizingMode","isTablePercentagesForced","isTablePixelsForced","isTableResponsiveForced","hasTableResizeBars","shouldStyleWithCss","shouldMergeContentOnPaste","getTableDefaultAttributes","defaultAttributes","isSet","determineDefaultTableAttributes","getTableDefaultStyles","defaultStyles","determineDefaultTableStyles","tableUseColumnGroup","closest","isEditable$1","assumeEditable","isContentEditable","editable","getRaw","contentEditable","getIsRoot","removeDataStyle","removeStyleAttribute","getSelectionStart","getPixelWidth","getPixelHeight","isInEditableContext$1","inSelection","bounds","leftEdge","rightEdge","topEdge","bottomEdge","finishCol","finishRow","isWithin","getAnyBox","startCell","finishCell","startCoords","finishCoords","sc","fc","detailA","detailB","min","getBox$1","isRect","detailIsWithin","isRectangular","intercepts$1","finish","inside","parentCell","innerCell","c1","c2","moveBy","deltaRow","deltaColumn","moveBy$1","getWarehouse","intercepts","nestedIntercepts","firstTable","lastTable","optStartCell","optLastCell","lastCell","TagBoundaries","DomUniverse","up","down","styles","remove","copyTo","destination","as","insert","afterAll","appendAll","create","comparePosition","other","compareDocumentPosition","isSpecial","getLanguage","getText","setText","isBoundary","isEmptyTag","isNonEditable","eq","unsafeOne","universe","look","tail","commonElement","sharedOne$1","ancestors$1","ps1","ps2","prune","ind","pruned1","pruned2","shared","firstpath","secondpath","universe$3","sharedOne","_universe","lookupTable","container","identify","rootTable","boxes","startTable","finishTable","ancestorCells","ancestors","lca","lcaTable","finishAncestorCells","startAncestorCells","retrieve$1","sels","getEdges","firstSelectedSelector","lastSelectedSelector","shiftSelection","getLast","identified","expandTo","retrieve","retrieveBox","edges","sectionSelector","firstAncestor","lastAncestor","fA","lA","getBox","unmergable","hasSpan","span","mergable","ephemera","strSelected","strSelectedSelector","strAttributeSelector","strFirstSelected","strFirstSelectedSelector","strLastSelected","strLastSelectedSelector","attributeSelector","selected","firstSelected","lastSelected","forMenu","getSelectionFromSelector","initCell","cellName","getSelectionCellOrCaption","getSelectionCell","getCellsFromSelection","nodes","model","getSelectedCells","registerEvents","actions","on","multiCellContext","preventDefault","extractSelected","content","format","innerText","getTextContent","serializer","serialize","serializeElements","getCellsFromFakeSelection","paste","isTable","getDoc","generators","targets","clipboard","pasteCells","focus","point","offset","scan$1","toEnd","freefallRtl$2","freefallRtl$1","universe$2","halve","main","getGenericWidth","surround","sizes","startIndex","endIndex","results","clampDeltaHelper","minCellSize","diff","clampNegativeDelta","clampDelta","resizeTable","calcRelativeDeltas","ratio","newThis","calcLeftEdgeDeltas","clampedDelta","calcFixedDeltas","resizer","clampTableDelta","calcMiddleDeltas","_prev","calcRightEdgeDeltas","calcRedestributedWidths","totalWidth","pixelDelta","newSizes","preserveTable","isLastColumn","maxDelta","_index","_minCellSize","_totalWidth","_pixelDelta","_isRelative","getGridSize","isHeaderCell","isHeaderCells","getRowHeaderType","isHeaderRow","getRowType","findCommonCellType","subType","headerCells","transformCell","substitution","transformRow","fixedCell","mutate$1","sectionCells","TableSection","rowType","findTableRowHeaderType","setIfNot","ignore","insert$1","render$1","newRows","syncRows","gridSection","tr","syncColGroup","colGroup","renderSection","sectionName","newSection","generateSection","sectionElems","renderOrRemoveSection","removeSection","headSection","bodySection","footSection","columnGroupsSection","findDiff","comp","subgrid","getRow","isColRow","getColumn","toDetails","seen","details","updateSeen","rowdetailnew","toGrid","colgroupCols","rowCells","rowDetail","toDetailList","findInWarehouse","extractCells","cell$1","lc","run","operation","extract","adjustment","postAction","genWrappers","behaviours","tableSection","output","fromWarehouse","cursor","out","newElements","tableSizing","sizing","resizing","resize","onPasteByEditor","onCells","onUnlockedCells","allUnlocked","isUnlockedTableCell","unmerge","currentCell","isToReplace","splitRows","uniqueCells","sub","value$1","applyHelper","constHelper","outputHelper","inner","_onError","onValue","isValue","isError","Result","mapError","toOptional","onError","_onValue","msg","fromOption","optional","err","measureWidth","gridA","gridB","rowDelta","colDelta","measureHeight","generateElements","generator","rowFill","exampleRow","colFill","newChildren","tailor","fillCols","fillRows","gridWidth","isLastColLocked","modifiedCols","newLockedColumns","isSpanning","matching","getLockedColumnsWithinBounds","startAddress","colNum","merge$1","validStartAddress","currentStartAddress","gridColLength","adjustedRowAddress","possibleColAddresses","validColAddress","getValidStartAddress","gridBRows","lockedColumnsWithinBounds","rowRemainder","colRemainder","colRequired","rowRequired","measure","fittedGrid","newLockedColumnsWithinBounds","lockedColumnObj","skippedCol","gridBColIndex","newCellElm","mergeTables","insertCols","prevCell","substitute","splitCols","fittedNewGrid","secondDelta","fittedOldGrid","insertRows","oldCols","oldRows","newLocked","secondDiff","fittedGridB","newChild","lockedColFill","insertRowAt","example","newRow","ex","insertColumnAt","withinSpan","getElementFor","isDuplicatedCell","notInStartRow","notInStartColumn","determineScope","applyScope","newScope","isInHeader","getScope","replaceIn","replacer","genScope","shouldReplace","mapCells","isTarget","getColumnCells","replaceColumns","indexes","rowHeaders","shouldReplaceCell","targetColumn","_colIndex","columnReplacePredicate","scopeGenerator","columnScopeGenerator","replaceRows","targetRow","getRowCells","columnHeaders","_cell","newGrid","_rowIndex","rowReplacerPredicate","rowScopeGenerator","replaceCells","targetCells","Adt","cases","constructors","adt","acase","count","keys$1","argLength","foldArgs","branches","branchKeys","reqKey","log","params","ColumnContext","only","middle","right","determine","context","neighbours","measures","recalculateHeightForCells","heights","recalculate","widths","groups","recalculateWidthForColumns","recalculateWidthForCells","recalculateAndApply","adjustWidth","clampedStep","deltas","newWidths","dx","adjustHeight","getPixelHeights","newHeights","dy","newCellSizes","newRowSizes","matchRowHeight","uniqueColumns","currentDetail","isCol","isColgroup","isRow$1","elementToData","getScopeAttribute","Generators","toData","add","data","nuCell","recent","getOrInit","makeNew","replaceOrInit","merge","stringAttributes","baseScope","scopes","getScopeProperty","blockList","universe$1","tagName","isBlock$1","isList","isList$1","isEmptyTag$1","isBr","markCell","rightSiblingIsBlock","rightSibling","isListItem","contents","advancedBr","markContent","isEditable","outcome","elementFromGrid","_b","findEditableCursorPosition","bundle","cursorElement","uniqueRows","makeRowsSection","initialGrid","rowIndexes","opMakeRowsHeader","opMakeRowsBody","opMakeRowsFooter","gridifyRows","pasteDetails","fromPastedRows","wh","_table","_info","adjustWidthTo","adjustAndRedistributeWidths","resizeBehaviour","tablePixelWidth","adjustAndRedistributeWidths$1","firstColumnIsLocked","_warehouse","lastColumnIsLocked","getColumnsWidth","uniqueCols","insertColumnsExtractor","pasteColumnsExtractor","headerCellGenerator","bodyCellGenerator","insertRowsBefore","targetIndex","insertRowsAfter","newG","insertColumnsBefore","extractDetail","insertColumnsAfter","eraseColumns","_comparator","_genWrappers","deleteColumnsAt","maxColIndex","eraseRows","deleteRowsAt","maxRowIndex","makeColumnsHeader","columnIndexes","unmakeColumnsHeader","makeRowsHeader","makeRowsBody","makeRowsFooter","makeCellsHeader","unmakeCellsHeader","mergeCells","merge$2","onMergable","mergeable","unmergeCells","onUnmergable","gridify","address","pasteColsBefore","mergedGrid","pasteColsAfter","pasteRowsBefore","pasteRowsAfter","getColumnsType","lastSelectedCell","minColRange","maxColRange","selectedColumnCells","getCellsType","getRowsType","minRowRange","maxRowRange","rowTypes","hasHeader","hasFooter","hasBody","findCommonRowType","fireNewRow","dispatch","fireNewCell","fireTableModified","styleModified","structure","structureModified","styleAndStructureModified","get$5","TableActions","resizeHandler","cellSelectionHandler","isTableBody","colMutationOp","getTableSectionType","setSelectionFromAction","firstCell","clearSelectedCells","rng","createRng","selectNode","setRng","des","setStart","setEnd","execute","guard","effect","noEvents","refresh","range","deleteRow","deleteColumn","getTableRowType","getTableCellType","getTableColType","constrainSpan","currentColspan","isColInRange","copyCols","fakeColGroups","colsToCopy","copiedCols","clonedCol","fakeColgroup","generateColGroup","fakeRows","cellsToCopy","copiedCells","clonedCell","fakeTR","generateRows","copyRows","slicedGrid","filteredGrid","slicedDetails","adt$5","invalid","pixels","percent","validateFor","rawAmount","substring","Size","redistributeValues","newWidthType","newTotalWidth","scale","pc","redistributeToPx","_pc","redistributeToPercent","redistribute$1","newType","floats","redistributeEmpty","normalize","sum","add$3","scan","remainder","floored","roundDown","round","validate","getUnit","redistribute","optWidth","optHeight","widthUnit","oldWidths","getRawWidths","nuWidths","redistributeToColumns","redistributeToW","newHeight","hUnit","totalHeight","oldHeights","getRawHeights","redistributeToH","isPercentSizing","isPixelSizing","isNoneSizing","cleanupLegacyAttributes","convertToPercentSize","convertToPixelSize","getPixelTableWidth","convertToNoneSize","rowElements","DefaultRenderOptions","border","colGroups","createGroupRow","createRows","createRow","placeCaretInCell","select","collapse","colHeaders","undoManager","headerType","renderOpts","rowHeadersGoInThead","actualRowHeaders","thead","theadRows","tbody","tbodyRows","render","get$4","insertContent","addVisual","isPercentage","fireEvents","tableElm","selectFirstCellInTable","global","tableTypeBase","tableTypeRow","tableTypeColumn","setData","items","fakeClipboardItem","FakeClipboardItem","write","getData","read","getType","clearData","clear","setRows","rowsOpt","clearRows","getRows","setColumns","columnsOpt","clearColumns","getColumns","getSelectionStartCellOrCaption","registerCommands","getTableFromCell","performActionOnSelection","action","getSelectionStartCell","postExecute","_data","actOnSelection","copyRowSelection","copyColSelection","pasteOnSelection","clonedRows","pasteRows","actOnType","getAction","_ui","get$c","no_events","mceTableSplitCells","mceTableMergeCells","mceTableInsertRowBefore","mceTableInsertRowAfter","mceTableInsertColBefore","mceTableInsertColAfter","mceTableDeleteCol","mceTableDeleteRow","mceTableCutCol","mceTableCutRow","mceTableCopyCol","mceTableCopyRow","mceTablePasteColBefore","mceTablePasteColAfter","mceTablePasteRowBefore","mceTablePasteRowAfter","mceTableDelete","cellOrCaption","isEmpty","setContent","setCursorLocation","nodeChanged","mceTableCellToggleClass","clazz","allHaveClass","formatter","formatterAction","mceTableToggleClass","toggle","mceTableToggleCaption","caption","appendAt","mceTableSizingMode","setSizingMode","mceTableCellType","mceTableColType","mceTableRowType","func","addCommand","checkInput","headerRows","headerColumns","insertTable","getFormatName","validArgs","has","formatName","adt$4","Situ","cata","subject","onBefore","onOn","onAfter","situ","Response","kill","createRange","selectNodeContents","selectNodeContentsUsing","relativeToNative","startSitu","finishSitu","setStartBefore","setStartAfter","setEndBefore","setEndAfter","setFinish","exactToNative","soffset","foffset","toRect","rect","bottom","adt$3","ltr","rtl","fromRange","startContainer","startOffset","endContainer","endOffset","diagnose","ranges","domRange","exact","getRanges","collapsed","rev","doDiagnose","asLtrRange","SimRange","Situs","convertToRange","makeSitus","selectRange","cellSel","traverse","mode","backtrack","_direction","transition","sidestep","advance","sibling","successors","go","rules","succ","rule","fb","Walkers","hone","isLeaf","seekLeft$1","seekRight$1","before$1","after$1","after$2","adt$2","success","failedUp","failedDown","isRow","BeforeAfter","verify","bridge","beforeOffset","afterOffset","failure","afterCell","beforeCell","beforeBounds","getRect","afterBounds","isOverlapping","_sharedRow","onSuccess","onFailedUp","onFailedDown","gatherer","cand","gather","handleParent","findBr","br","adjacent","inParent","indexInParent","tryBr","handleBr","tgt","moveDown","caret","moveUp","xDelta","yDelta","toCaret","getElemBox","getBoxAt","getRangedRect","getPartialBox","getEntireBox","adt$1","retry","inOutsideBlock","isOutside","downMovement","adjuster","guessBox","lowerCaret","move","adjustTil","movement","numRetries","isAtTable","adjustForTable","situsFromPoint","guess","newCaret","moved","adjusted","getInnerHeight","checkScroll","scrollBy","Retries","tryUp","higherCaret","tryDown","getJumpSize","findSpot","getSelection","sel","brNeighbour","fromSitus","analysis","_message","process","tryCursor","situs","tryAgain","tryAt","inSameTable","simulate","initial","anchor","spot","handle$1","navigate","precheck","firstUpCheck","seekLeft","lastOffset","lastDownCheck","seekRight","Cell","doRevoke","revoke","singleton","findCell","isInEditableContext","isKey","keycode","isUp","isDown","isNavigation","isBackward","isForward","SimSelection","exactFromRange","simRange","getWin","_finishSitu","_soffset","_finish","_foffset","caretPositionFromPoint","offsetNode","caretRangeFromPoint","availableSearch","beforeSpecial","name$1","makeRange","same","getNativeSelection","doSetNativeRange","removeAllRanges","addRange","doSetRange","setRangeFromRelative","setBaseAndExtent","extend","setLegacyRtlRange","setExact","preprocessExact","setRelative","preprocessRelative","readRange","rangeCount","firstRng","getRangeAt","lastRng","doGetExact","anchorNode","focusNode","anchorOffset","focusOffset","setToElement","selectNodeContents$1","get$2","getExact","getFirstRect","rects","getClientRects","getFirstRect$1","getAtPoint","WindowBridge","exactAdt","clearSelection","collapseSelection","toStart","setSelection","setRelativeSelection","selectContents","innerHeight","getScrollY","_DOC","get$3","by","rc","mouse","annotations","handlers","clearstate","applySelection","event","clearBeforeUpdate","singleCell","isNonEditableCell","isCellClosestContentEditable","mousedown","mouseover","mouseup","MouseSelection","isEditableNode","isEditableSelection","keyboard","clearToNavigate","keydown","realEvent","which","shiftKey","handler","update$1","attempts","navigation","newSels","update","_","keyup","sync","supports","classList","add$1","id","add$2","SelectionAnnotation","onSelection","onClear","removeSelectionAttributes","addSelectionAttribute","multiple","single","getOtherCells","upOrLeftCells","upGrid","upDetails","slicedCells","getUpOrLeftCells","downOrRightCells","downGrid","downDetails","getDownOrRightCells","fromRawEvent$1","rawEvent","composed","composedPath","getOriginalEventTarget","stopPropagation","prevent","fa","mkEvent","clientX","clientY","useCapture","wrapped","handle","addEventListener","unbind","removeEventListener","bind$1","fromRawEvent","hasInternalTarget","TableCellSelectionHandler","cellSelection","lazyRoot","Selections","otherCells","fireTableSelectionChange","fireTableSelectionClear","_e","mouseHandlers","keyHandlers","external$1","external","handleResponse","response","hasShiftKey","ns","isLeftMouse","button","doubleTap","lastTarget","lastTimeStamp","touchEnd","lT","lTS","timeStamp","getDoubleTap","buttons","wrappedEvent","getRng","hide","show","addTempAttr","onMultiple","onSingle","Event","fields","trigger","create$1","typeDefs","registry","baseWith","handleUnsupported","required","validateStrArr","everything","sorted","checkDupes","req","reqMessage","invalidKeys","incorrect","invalidTypeMessage","handleExact","unsupported","unsuppMessage","exactly","DragMode","DragSink","DragApi","InDrag","previous","events","onEvent","old","compare","reset","Movement","noDragState","NoDrag","inDragState","dragState","off","isOn","setup","mutation","settings","active","drop","sink","throttledDrop","rate","timer","cancel","clearTimeout","throttle","setTimeout","runIfActive","forceDrop","delayDrop","isActive","destroy","namespace","dashNamespace","resolve$1","MouseDrag","dragApi","blocker","layerClass","position","Blocker","mdown","mup","mmove","mout","BarMutation","drag","delegate","Mutation","assign","resizeBar","resizeRowBar","resizeColBar","wire","drawBar","origin","cpOption","cp","bar","refreshCol","colPositions","tableHeight","colBar","role","refreshRow","rowPositions","tableWidth","rowBar","refreshGrid","warhouse","isResizable","resizableRowBars","resizableRows","resizableRowPositions","_pos","barIndex","resizableColBars","resizableCols","colElmOpt","resizableColumns","resizableColPositions","bars","resizeBarDragging","BarManager","transform","hoverTable","getResizer","_dataRow","_dataCol","currentCol","getDelta","dir","startAdjust","isColBar","view","tbl","hideBars","showBars","TableResize","lazySizing","hdirection","vdirection","manager","beforeResize","afterResize","startDrag","_event","refreshBars","ResizeWire","chrome","createContainer","padding","margin","barResizerPrefix","TableResizeHandler","selectionRng","tableResize","resizeWire","startW","startRawW","lazyResizingBehaviour","afterCornerResize","isRightEdgeResize","getNumColumns","isPercentage$1","percentW","isPixel","computedWidth","syncPixels","sz","inline","rawWire","objectResizing","hasTableObjectResizing","rawTable","fireObjectResizeStart","fireObjectResized","targetElm","addClass","getStyle","getAttrib","getRawWidth","isReadOnly","setupTable","registerOption","register","processor","default","valid","lookupOnSelection","addQueryValueHandler","registerQueryCommands","DomModel"],"mappings":"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"}
|